kubernetes组件概述, 以及创建POD过程中各组件的配合方式
K8S集群架构图K8S集群组件概述一、控制面集群的神经中枢,控制集群的 Kubernetes 组件以及存储有关集群状态和配置的数据apiserver是 Kubernetes API的对外接口, 是 Kubernetes 控制面的前端, 集群内、外请求均通过apiserver进行。scheduler负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。shedul
·
文章结构
- K8S集群架构图
- K8S集群组件概述
- K8S创建POD过程中,各组件的配合方式
K8S集群架构图
K8S集群组件概述
一、控制面
- 集群的神经中枢,控制集群的 Kubernetes 组件以及存储有关集群状态和配置的数据
apiserver
- 是 Kubernetes API的对外接口, 是 Kubernetes 控制面的前端, 集群内、外请求均通过apiserver进行。
scheduler
- 负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。
- sheduler根据资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、持久化存储等需求将POD安排到适当的计算节点。
controller-manager
- 通过apiserver监控资源状态,并将当前状态保持在期望状态(声明式api)
- 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
- 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod
- 端点控制器(Endpoints Controller): 加入 Service 与 Pod
- 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
cloud-controller-manager
- 对接外部云平台
etcd
- 负责集群配置的持久化,是key-value存储,兼顾高可用和一致性(CAP定理中的A、C)。
二、计算节点
- 干活的节点
kubelet
- 执行apiserver下发的指令,如创建pod操作
kube-proxy
- 网络代理,kube-proxy 维护节点上的网络规则, 实现service(node-port, cluster-ip)的负载均衡, 允许从集群内部或外部的网络会话与 Pod 进行网络通信
- 支持iptables, ipvs两种模式
- 请注意kube-proxy与CNI(container network interface)并不相同
container runtime (CRI)
- 容器运行环境是负责运行容器的软件, 如docker、CRI-O、containerd
三、持久化存储
- 通过CSI(container storage interface), 实现POD的持久化存储能力。
- 支持多种存储,如块存储、文件存储、对象存储、节点临时目录、节点路径等
四、容器镜像服务
- Kubernetes 所依赖的容器镜像存储于容器镜像仓库中
K8S创建POD过程中,各组件的配合方式
- 用户通过cloud-control-manager、kubectl或者其他api发起创建pod请求
- apiserver接受请求,将pod配置存储在etcd, 设置POD状态为pending
- scheduler检测到新增pod配置,选择合适的工作节点,设置POD状态为scheduled
- apiserver根据scheduler的调度请求下发指令
- 工作节点的kubelet接收apiserver指令,将创建容器的委托委派给Container
- Runtime创建容器,并调用CNI获取IP,调用CSI实现存储持久化
- 工作节点的kubelet将POD状态、IP等信息上报apiserver
- apiserver更新etcd中POD信息,并设置POD状态为running 此时Pod就已经创建完成
参考资料
https://kubernetes.io/zh/docs/concepts/overview/components/
https://www.redhat.com/zh/topics/containers/kubernetes-architecture
更多推荐
已为社区贡献4条内容
所有评论(0)