探究Kubernetes工作机制的奥秘
云计算时代的操作系统
Kubernetes 是一个生产级别的容器编排平台和集群管理系统,能够创建、调度容器,监控、管理服务器。
容器,对应操作系统中的软件,是应用、进程;服务器,对应操作系统中的硬件,是CPU、内存、硬盘、网卡。所以说Kubernetes是一个集群级别的操作系统。
Kubernetes的基本架构
操作系统的一个重要功能就是抽象,从繁琐的底层事务中抽象出一些简洁的概念,然后基于这些概念去管理系统资源。
Kubernetes 采用了现今流行的“控制面 / 数据面” (Control Plane / Data Plane)架构,集群里的计算机被称为“节点” (Node),可以是实机也可以是虚机,少量的节点用作控制面来执行集群的管理维护工作,其他的大部分节点都被划归数据面,用来跑业务应用。
节点内部的结构
Kubernetes是由很多模块构成的,这些模块又可以分成组件(Component)和插件(Addon)两类
Master
Master 里有 4 个组件,分别是 apiserver、etcd、scheduler、controller-manager

apiserver
apiserver,是Master节点,同时也是整个Kubernetes系统的唯一入口,它对外公开了一系列的 RESTful API,并且加上了验证、授权等功能,所有其他组件都只能和它直接通信,可以说是 Kubernetes 里的联络员。
etcd
etcd, 是一个高可用的分布式 Key-Value 数据库,用来持久化存储系统里的各种资源对象和状态,相当于 Kubernetes 里的配置管理员。
scheduler
scheduler, 负责容器的编排工作,检查节点的资源状态,把 Pod 调度到最适合的节点上运行,相当于部署人员。
controller-manager
controller-manager 负责维护容器和节点等资源的状态,实现故障检测、服务迁移、应用伸缩等功能,相当于监控运维人员。
这4个组件也被容器化了,运行在集群的Pod里,可以在kube-system的命名空间里查看
kubectl get pod -n kube-system

Worker
Master 里的 apiserver、scheduler 等组件需要获取节点的各种信息才能够作出管理决策,这些信息都是从Worker Node中获取的。
Worker Node中有3个组件,分别是 kubelet、kube-proxy、container-runtime
kubelet
kubelet 是 Node 的代理,负责管理 Node 相关的绝大部分操作,Node 上只有它能够与 apiserver 通信,实现状态报告、命令下发、启停容器等功能,相当于是 Node 上的一个“小管家”
kube-proxy
kube-proxy 的作用有点特别,它是 Node 的网络代理,只负责管理容器的网络通信,简单来说就是为 Pod 转发 TCP/UDP 数据包,相当于是专职的“小邮差”
container runtime
container-runtime,是容器和镜像的实际使用者,在 kubelet 的指挥下创建容器,管理 Pod 的生命周期,是真正干活的“苦力”;没有限定必须是Docker,也可以是其他符合标准的容器运行时(如containerd、CRI-O等)
这3个组件,只有kube-proxy被容器化了,而 kubelet 因为必须要管理整个节点,容器化会限制它的能力,所以它必须在 container-runtime 之外运行
查看kube-proxy
minikube ssh
docker ps |grep kube-proxy
查看kubelet
需要使用操作系统的ps命令查看
ps -ef | grep kubelet

Kubernetes大致工作流程
- 每个 Node 上的 kubelet 会定期向 apiserver 上报节点状态,apiserver 再存到 etcd 里。
- 每个 Node 上的 kube-proxy 实现了 TCP/UDP 反向代理,让容器对外提供稳定的服务。
- scheduler 通过 apiserver 得到当前的节点状态,调度 Pod,然后 apiserver 下发命令给某个 Node 的 kubelet,kubelet 调用 container-runtime 启动容器。
- controller-manager 也通过 apiserver 得到实时的节点状态,监控可能的异常情况,再使用相应的手段去调节恢复。
插件(Addons)
查看插件列表
minikube addons list

安装Dashboard
直接在虚拟机界面(而非ssh远程)执行此命令,命令会打开图形界面-浏览器
minikube dashboard
执行此命令,可以自动用浏览器打开 Dashboard 页面
总结

- Kubernetes 能够在集群级别管理应用和服务器,可以认为是一种集群操作系统。它使用“控制面 / 数据面”的基本架构,Master 节点实现管理控制功能,Worker 节点运行具体业务。
- Kubernetes 由很多模块组成,可分为核心的组件和选配的插件两类。
- Master 里有 4 个组件,分别是 apiserver、etcd、scheduler、controller-manager。
- Node 里有 3 个组件,分别是 kubelet、kube-proxy、container-runtime。
- 通常必备的插件有 DNS 和 Dashboard。
《极客时间-Kubernetes入门实战课》学习笔记 Day10