读书笔记:Kubernetes实战 简介

该书可以作为Docker的高级延伸书籍,用于搭建基于Kubernets+Docker的PaaS平台,实践DevOps。
Kubernets是Google开源的容器集群管理系统,它对于容器运行时、编排、常规服务都抽象设计出准确完整的API。Kubernets可以说是Google借助着容器领域的爆发,对于其巨大规模数据中心管理的丰富经验的一次实践,旨在建立新的技术业界标准。Kubernets构建于Docker技术之上,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等一整套功能。

平台即服务

PaaS为开发者提供了应用的开发环境和运行环境,将开发者从烦琐的IT环境管理中解放出来。自动化应用的部署和运维,使开发者能够集中精力于应用业务开发,极大地提升了应用的开发效率。Google GAE是PaaS的鼻祖,而Kubernets可以说是在PaaS的定义范畴内。
在这里插入图片描述

不温不火的PaaS

第一代PaaS:比如GAE(Google App Engine)、SAE(Sina App Engine)。这是早期的PaaS,当时并没有PaaS这个概念,现在看来是包含在PaaS范围内的。
第二代PaaS:比如Cloud Foundry、Openshift。这是各大IaaS(如Amazon AWS、OpenStack)流行之后,顺势推出的PaaS,并且发展迅速。其中Cloud Foundry是VMware于2011年推出的业界第一个开源PaaS云平台,后来分拆出Pivotal公司进行接管,2014年创立Cloud Foundry基金会进行运作。华为云、IBM BlueMix、HP Cloud和Dell云服务都采用了Cloud Foundry作为基础。
第三代PaaS:在Docker火爆之后,利用Docker的特性构建出许多PaaS,比如Kubernetes。这些PaaS更加灵活,更加适应企业,逐渐成为PaaS的主力。Docker利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。通虚拟机不同,容器并不是一套硬件虚拟化方法,也无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法。Docker的流行和标准化,激活了一直不温不火的PaaS,随之而来的是各类Micro-PaaS的出现,Kubernetes是其中最具代表性的一员。

Kubernetes

Google从2004年起就已经开始使用容器技术,于2006年发布了Cgroup,而且内部开发了强大的集群资源管理平台Borg和Omega,这些都已经广泛使用在Google的各个基础设施中,而Kubernetes的灵感来源于Google的内部Borg系统,更是吸收了包括Omega在内的容器管理器的经验和教训

Kubernetes深度集成Docker,天然适应容器的特点,设计出强大的容器编排能力,比如容器组合、标签选择和服务发现等,可以满足企业级需求。Kubernetes遵循微服务架构理论,整个系统划分出各个功能独立的组件,组件之间边界清晰,部署简单,可以轻易地运行在各种系统和环境中。

在这里插入图片描述

2015年7月经过400多位贡献者一年的努力,多达14000次代码提交,Google正式发布了Kubernetes v1.0,意味着这个开源容器编排系统可以正式在生产环境中使用。

Kubernetes的核心概念

Pod

Pod是若干相关容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命名空间、IP地址和端口,相互之间能通过localhost来发现和通信。另外,这些容器还可共享一块存储卷空间。在Kubernetes中创建、调度和管理的最小单位是Pod,而不是容器,Pod通过提供更高层次的抽象,提供了更加灵活的部署和管理模式。

Replication Controller

Replication Controller用来控制管理Pod副本(Replica,或者称为实例),Replication Controller确保任何时候Kubernetes集群中有指定数量的Pod副本在运行。如果少于指定数量的Pod副本,Replication Controller会启动新的Pod副本,反之会杀死多余的副本以保证数量不变。另外,Replication Controller是弹性伸缩、滚动升级的实现核心。

Service

Service是真实应用服务的抽象,定义了Pod的逻辑集合和访问这个Pod集合的策略。Service将代理Pod对外表现为一个单一访问接口,外部不需要了解后端Pod如何运行,这给扩展和维护带来很多好处,提供了一套简化的服务代理和发现机制。

Label

Label是用于区分Pod、Service、Replicaton Controller的Key/Value对,实际上,Kubernetes中的任意API对象都可以通过Label进行标识。每个API对象可以有多个Label,但是每个Label的Key只能对应一个Value。Label是Service和Replicaton Controller运行的基础,它们都通过Label来关联Pod,相比于强绑定模型,这是一种非常好的松耦合关系。

Node

Kubernetes属于主从分布式集群架构,Kubernetes Node运行并管理容器。Node作为Kubernetes的操作单元,用来分配给Pod进行绑定,Pod最终运行在Node上,Node可以认为是Pod的宿主机。

Kubernetes的架构

在这里插入图片描述

Kubernetes属于主从分布式架构,节点在角色上分为Master和Node。Kubernetes使用Etcd作为存储中间件,Etcd是一个高可用的键值存储系统,灵感来自于ZooKeeper和Doozer,通过Raft一致性算法处理日志复制以保证强一致性。Kubernetes使用Etcd作为系统的配置存储中心,Kubernetes中的重要数据都是持久化在Etcd中的,这使得Kubernetes架构的各个组件属于无状态,可以更简单地实施分布式集群部署。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/asmartkiller/article/details/105896673