云原生3 走进容器编排平台 - K8s核心功能与架构

751 阅读5分钟

什么是K8S?
K8s三要素 - 部署 弹性 管理
Kubernetes 是一个自动化的容器编排平台,它负责应用的部署、应用的弹性以及应用的管理,这些都是基于容器的。

K8S的核心功能
1.服务发现与负载均衡
K8s支持服务的发现与负载的均衡。
2.容器的自动装箱
我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上。
3.存储的编排
Kubernetes 会帮助我们去做存储的编排,让存储的生命周期与容器的生命周期能有一个连接。
4.自动化的容器的恢复
Kubernetes 会帮助我们去做自动化的容器的恢复。在一个集群中,经常会出现宿主机的问题或者说是 OS 的问题,导致容器本身的不可用,Kubernetes 会自动地对这些不可用的容器进行恢复。
5.应用的自动发布与回滚与配置密文管理
Kubernetes 会帮助我们去做应用的自动发布与应用的回滚,以及与应用相关的配置密文的管理。
6.批处理
对于 job 类型任务,Kubernetes 可以去做批量执行。
7.水平伸缩
为了让这个集群、这个应用更富有弹性,Kubernetes 也支持水平的伸缩。

K8s三大核心功能
1.调度
K8s可以把一个容器放到一个集群的某一个机器上,k8s的调度器会观察这个容器的大小,规格,比如CPU Memory,然后调度器会在集群中找一台比较空闲的机器来进行一次placement

Image.png

2.自动修复
K8S具有节点健康检查的功能,它会监测这个集群中所有的宿主机,当一个宿主机出现故障时,K8S会将该节点上的容器自动转移到健康节点上。

3.水平伸缩
k8s有业务负载检查的能力,它会检测业务上所承担的负载,对业务进行水平扩容,减少负载。

K8s架构
Kubernetesde的架构跟Zookeeper一样是一个比较典型的CS二层架构:

Image.png

Master - Client和Node的沟通枢纽
Master Server作为中央的管控节点,会去与 Node 进行一个连接,用户会通过UI, CLI的client与 Master 进行连接,把希望的状态或者想执行的命令下发给 Master,Master 会把这些命令或者状态下发给相应的节点,进行最终的执行。

Master的四个主要的组件
API Server、Controller、Scheduler 以及 etcd。

Image.png

  • API Server: 可以水平拓展顾名思义是用来处理 API 操作的,Kubernetes 中所有的组件都会和 API Server 进行连接,组件与组件之间一般不进行独立的连接,都依赖于 API Server 进行消息的传送

  • Controller: 可热备是控制器,它用来完成对集群状态的一些管理。比如刚刚我们提到的两个例子之中,第一个自动对容器进行修复、第二个自动进行水平扩张,都是由 Kubernetes 中的 Controller 来进行完成的;

  • Scheduler:可热备是调度器,“调度器”顾名思义就是完成调度的操作,比如把一个用户提交的 Container,依据它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置;

  • etcd保证高可用性是一个分布式存储系统API Server 中所需要的这些原信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。

Node - 真正承担业务负载的服务器
NodeKubernetes的 Node 是真正运行业务负载的,每个业务负载会以 Pod 的形式运行

kubelet
一个 Pod 中运行的一个或者多个容器,kubelet作为Node上最关键的组件是负责真正去运行这些 Pod 的组件的 ,它通过 API Server 接收到所需要 Pod 运行的状态,然后提交到 Container Runtime 组件中。

Image.png

Node的四个组件\

Container runtime
负责真正去启动配置容器和容器的运行环境

Storage Plugin/Network Plugin
K8s在OS上创建容器运行的环境并将Pod启动起来的过程中不会直接对网络和存储进行操作,而是通过Storage/Network Plugin对其管理

Kube-proxy
Kubernetes也会有 Kubernetes 的 Network,它是为了提供 Service network 来进行搭网组网的。真正完成 service 组网的组件的是Kube-proxy,它是利用了 iptable 的能力来进行组建 Kubernetes 的 Network,就是 cluster network

Tips: Kubernetes 的 Node 并不会直接和 user 进行 interaction,它的 interaction 只会通过Master。而 User 是通过 Master 向节点下发这些信息的。Kubernetes 每个 Node 上,都会运行我们刚才提到的这几个组件。

K8s部署流程

1.用户通过UI或者 CLI 提交一个 Pod 给 Kubernetes 进行部署,这个 Pod 请求首先会通过 CLI 或者 UI 提交给 Kubernetes API Server2.API Server 会把这个信息写入到它的存储系统 etcd
3.Scheduler 会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度。
4.Scheduler 会根据它的内存状态进行一次调度决策,在完成这次调度之后,它会向 API Server report 说:“OK!这个 Pod 需要被调度到某一个节点上。”
5.API Server 接收到这次操作之后,会把这次的结果再次写到 etcd 中
6.API Server 会通知相应的节点进行这次 Pod 真正的执行启动。
7.相应节点的 kubelet 会得到这个通知,kubelet 就会去调 Container runtime 来真正去启动配置这个容器和这个容器的运行环境,去调度 Storage Plugin 来去配置存储,network Plugin 去配置网络。

Image.png