k8s基础架构
创建pod流程
(1)用户通过kubectl向api-server发起创建pod请求;
(2)apiserver通过对应的kubeconfig进行认证,认证通过后将yaml中的po信息存到etcd;
(3)Controller-Manager通过apiserver的watch接口发现了pod信息的更新,执行该资源所依赖的拓扑结构整合,整合后将对应的信息交给apiserver,apiserver写到etcd,此时pod已经可以被调度;
(4)Scheduler同样通过apiserver的watch接口更新到pod可以被调度,通过算法给pod分配节点,并将pod和对应节点绑定的信息交给apiserver,apiserver写到etcd,然后将pod交给kubelet;
(5)kubelet收到pod后,调用CNI接口给pod创建pod网络,调用CRI接口去启动容器,调用CSI进行存储卷的挂载;
(6)网络,容器,存储创建完成后pod创建完成,等业务进程启动后,pod运行成功。
master组件
(1)kube-apiserver:Kubernetes API,集群统一入口,各组件协调者,以RESTful API提供接口服务,所有对象的资源的增删改查和监听操作都交给APIServer处理后在提交给Etcd存储;
- 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd;
- 是资源配额控制的入口。
(2)controller-manager:是 Kubernetes 的大脑,它通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态;
(3)scheduler:scheduler 负责分配调度 Pod 到集群内的节点上,它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点;
- kube-scheduler 调度分为两个阶段,predicate 和 priority;
- predicate:过滤不符合条件的节点;
- priority:优先级排序,选择优先级最高的节点。
(4)etcd:Etcd 是 CoreOS 基于 Raft 开发的分布式 key-value 存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。
- 基本的 key-value 存储
- 监听机制
- key 的过期及续约机制,用于监控和服务发现
- 原子性操作(CAS 和 CAD),用于分布式锁和 leader 选举
node组件
(1)kubelet:kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载Secret、获取容器节点状态工作。kubelet将每个Pod转换成一组容器。
每个节点上都运行一个 kubelet 服务进程,默认监听 10250 端口,接收并执行 master 发来的指令,管理 Pod 及 Pod 中的容器。每个 kubelet 进程会在 API Server 上注册节点自身信息,定期向 master 节点汇报节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源
(2)kube-proxy:在node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
每台机器上都运行一个 kube-proxy 服务,它监听 API server 中 service 和 endpoint 的变化情况,并通过 iptables 等来为服务配置负载均衡(仅支持 TCP 和 UDP)。
kube-proxy 可以直接运行在物理机上,也可以以 static pod 或者 daemonset 的方式运行。
(3)docker或rocket:容器引擎,运行容器