13-DevOps-引入容器编排Kubernetes
当前部署架构是单机部署,示意图如下:
如果是有多台服务器,大集群的架构,如果要做到每台服务器手动指定部署相关的应用节点,或者移除哪个容器,管理起来不方便。
集群管理,就需要引入k8s(Kubernetes),它可以帮助在哪些服务器上部署哪些容器。帮助容器进行有效管理。
Kubernete是什么?
随着系统可部署组件的数量增⻓,把它们都管理起来会变得越来越困难。需要⼀个更好的⽅式来部署和管理这些组件,并⽀持基础设施的全球性伸缩,⾕歌可能是第⼀个意识到这⼀点的公司。⾕歌等全球少 数⼏个公司运⾏着成千上万的服务器,⽽且在如此海量规模下,不得不处理部署管理的问题。这推动着他们找出解决⽅案使成千上万组件的管理变得有效且成本低廉。
Kubernetes是⼀个软件系统,它允许你在其上很容易地部署和管理容器化的应⽤。它依赖于Linux容器的 特性来运⾏异构应⽤,⽽⽆须知道这些应⽤的内部详情,也不需要⼿动将这些应⽤部署到每台机器。因 为这些应⽤运⾏在容器⾥,它们不会影响运⾏在同⼀台服务器上的其他应⽤,当你是为完全不同的组织机构运⾏应⽤时,这就很关键了。这对于云供应商来说是⾄关重要的,因为它们在追求⾼硬件可⽤率的同时也必须保障所承载应⽤的完全隔离。
K8S架构
Master
- etcd是⾼可⽤的键值对的分布式安全存储系统,⽤于持久化存储集群中所有的资源对象,例如集群 中的Node、Service、Pod的状态和元数据,以及配置数据等。
- API Server,也就是常说的kube-API Server。它承担API的⽹关职责,是⽤户请求及其他系统组件与集群交互的唯⼀⼊⼝。
- 控制器是Kubernetes集群的⾃动化管理控制中⼼,⾥⾯包含30 多个控制器,有Pod管理的(Replication 控制器、Deployment 控制器等)、有⽹络管理的(Endpoints 控制器、Service 控制器等)、有存储相关的(Attachdetach 控制器等)
- 集群中的调度器负责Pod 在集群节点中的调度分配。我们常说Kubernetes是⼀个强⼤的编排⼯具, 能够提⾼每台机器的资源利⽤率,将压⼒分摊到各个机器上,这主要归功于调度器。
Node节点
- kubelet是运⾏在每个节点上的负责启动容器的重要的守护进程。在启动时,Kubelet进程加载配置 参数,向API Server 处创建⼀个Node 对象来注册⾃身的节点信息,例如操作系统、Kernel 版本、IP地址、总容量(Capacity)和可供分配的容量(Allocatable Capacity)等。
- kube-proxy ,kube-proxy 也是⼀个“控制器”。它也从API Server 监听Service和Endpoint对象的变 化,并根据Endpoint 对象的信息设置Service 到后端Pod的路由,维护⽹络规则,执⾏TCP、UDP 和SCTP 流转发。

- 容器运⾏时是真正删除和管理容器的组件。容器运⾏时可以分为⾼层运⾏时和底层运⾏时。⾼层运⾏时主要包括Docker、Containerd和Cri-o,底层运⾏时包含运⾏时runc、kata 及gVisor。

- 在Kubernetes 中,提供了⼀个轻量的通⽤容器⽹络接⼝CNI(Container Network Interface),专⻔⽤于设置和删除容器的⽹络连通性。容器运⾏时通过CNI调⽤⽹络插件来完成容器的⽹络设置。

- Pod 作为承载容器化应⽤的基本调度和运⾏单元,是Kubernetes集群中最重要的对象。容器云平台需要解决的最核⼼的问题是应⽤运⾏,Kubernetes 将容器化应⽤运⾏的实体抽象为Pod,Pod 类似⾖荚,它是⼀个或者多个容器镜像的组合。当应⽤启动以后,每⼀个容器镜像对应⼀组进程,⽽同⼀个Pod的所有容器中的进程默认公⽤同⼀⽹络Namespace,并且共⽤同⼀⽹络标识。
