组件介绍
Kubernetes 1.24 及以上版本不再支持Docker 作为CRI(Container Runtime Interface),建议使用containerd
控制节点
apiserver 是整个集群的控制中枢,提供集群中各个模块之间的数据交换,并将集群状态和信息存储到分布式健值存储系统etcd集群中。同时它也是集群管理、资源配额、提供完备的集群安全机制的入口,为集群各类资源对象提供增删改查以及watch的REST API接口 无状态
scheduler 是集群pod的调度中心,主要是通过调度算法将pod分配到最佳的Node节点,它通过apiserver监听所有pod状态,一旦发现新的未被调度到任何node节点的pod(PodSpec.NodeName),就会根据一系列策略选择最佳节点调试 有状态的,每次工作只有其中1个节点
Controller Manager 是集群状态管理器,以保证pod或其它资源达到期望值。当集群中某个pod的副本数或其他资源因故障和错误导致无法正常运行,没有达到设定的值时,Controller Manager会尝试自动修复并使其达到期望状态 有状态的,每次工作只有其中1个节点 查看主节点信息 kubectl get leases -n kube-system
Etcd 由CoreOS开发,用于可靠地存储集群的配置数据,是一种持久性、轻量型、分布式的键值数据存储组件,作为kubernetes集群的持久化存储系统
工作节点
kubelet 负责与master通信协作,管理该节点上的Pod,对容器进行健康检查及监控,同进负责上报节点和节点上面Pod的状态
kube-proxy 负责各pod之间的通信和负载均衡,交指定的流量分发到后面正确的机器上
runtime 负责容器的管理
coredns 用于kubernetes集群内部service的解析,可以让pod把service名称解析成service的ip,然后通过service的ip地址进行连接到对应的应用上
calico 符合cni标准的一个网络插件,它负责给每个pod分配一个不会重复的ip,并且把每个节点当做一台路由器,这样一个节点的pod就可以通赤ip地址访问到其他节点的Pod
pod Pod可简单地理解为是一组、一个或多个容器,具有共享存储/网络及如何运行容器的规范。 Pad包含一个或多个相对紧密耦合的应用程序容器,处于同一个Pod中的容器共享同样的存储空间(Volume,卷或存储卷)、IP地址和Port端口,容器之间使用localhost:port相互访问。 根据Docker的构造,Pod可被建模为一组具有共享命令空间、卷、IP地址和Port端口的Docker容器。 Pod包含的容器最好是一个容器只运行一个进程。每个Pod包含一个pause容器,pause容器是Pod的父容器,它主要负责僵尸进程的回收管理。 Kubernetes为每个Pod都分配一个唯一的IP地址,这样就可以保证应用程序使用同一端口,避免了发生冲突的问题。