K8S架构分析
K8S集群简介
K8S的集群由master和node组成,节点上运行着若干K8S服务。 如下图
Master节点
master节点上运行着的后台服务有kube-apiserver, kube-scheduler, kube-controller-manager, etcd 和pod 网络.(flannel)。如下图所示
1.API Server (kube-apiserver)
API Server是k8s的前端接口,各种客户端工具以及k8s其他组件可以通过它管理集群的各种资源。
2.Scheduler (kube-scheduler)
scheduler负责决定将pod放在哪个node上运行。另外scheduler在调度时会充分考虑集群的架构,当前各个节点的负载,以及应用对高可用,性能
数据亲和性的需求。
3.Controller Manager (kube-controller-manager)
负责管理集群的各种资源(创建Pod之类的),保证资源处于预期的状态
4.etcd
负责保存k8s集群的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速通知k8s相关组件
5.pod网络
pod要能够互相通信,k8s集群必须掌握pod网络,flannel是其中一个可选方案。
node节点
node是Pod运行的地方。node上运行的k8s组件有kublet,kube-proxy 和 Pod网络(flannel),如下图所示:
1.kubelet
是node的agent(代理),当scheduler去确定在某个node上运行pod后,会将pod的具体配置信息发送给该节点的kubelet,kubelet会根据遮羞信息
创建和运行容器,并向Master报告运行状态。
2.kube-proxy
每个node都会运行kube-proxy服务,外界通过service访问pod, kube-proxy负责将降访问service的TCP/UDP数据流转发到后端的容器/
如果有多个副本,Kube-proxy会实现负载均衡。
3.pod网络
pod能能够互相通信,k8s集群必须部署pod网络,flannel是其中一个可以选择的方案
部署过程图:
① kubectl 发送部署请求到 API Server。
② API Server 通知 Controller Manager 创建一个 deployment 资源。
③ Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。
④ k8s-node1 和 k8s-node2 上的 kubectl 在各自的节点上创建并运行 Pod。
补充两点:
应用的配置和当前状态信息保存在 etcd 中,执行kubectl get pod 时 API Server 会从 etcd 中读取这些数据。
flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。