文章结构

  • 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过程中,各组件的配合方式

  1. 用户通过cloud-control-manager、kubectl或者其他api发起创建pod请求
  2. apiserver接受请求,将pod配置存储在etcd, 设置POD状态为pending
  3. scheduler检测到新增pod配置,选择合适的工作节点,设置POD状态为scheduled
  4. apiserver根据scheduler的调度请求下发指令
  5. 工作节点的kubelet接收apiserver指令,将创建容器的委托委派给Container
  6. Runtime创建容器,并调用CNI获取IP,调用CSI实现存储持久化
  7. 工作节点的kubelet将POD状态、IP等信息上报apiserver
  8. apiserver更新etcd中POD信息,并设置POD状态为running 此时Pod就已经创建完成

参考资料

https://kubernetes.io/zh/docs/concepts/overview/components/
https://www.redhat.com/zh/topics/containers/kubernetes-architecture

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐