因为kubernetes字母k和s之间有8个字母,所以简写为k8s,k8s是容器的编排工具,用来管理容器的运行与调度
k8s特性
- 自动调度 向k8s控制面发送指令,控制面会决定如何调度
- 故障自愈 挂掉的容器会在集群其他节点拉活
- 多副本
- 负载均衡
- 跨主机的容器网络互通
- 服务发现
- 服务注册
- 网络策略
k8s组成
k8s由控制面和数据面组成,控制面就是管理节点,数据面就是工作节点
- 控制面包含的组件
- kube-apiserver 负责接收并响应用户请求
- kube-scheduler 调度器,负责选择合适的节点运行容器
- kube-controller-manager 负责监视整个集群的状态,并确保集群中的容器总是按照期望运行
- etcd kubernetes集群的数据库,用于保存kubernetes集群的所有数据信息 - 数据面包含的组件
- 容器运行时 containerd
- kubelet 接收控制面的指令,在工作节点上调用容器运行时创建容器
- kube-proxy
k8s工作原理
kube-apiserver接收用户请求并响应用户请求,kube-scheduler、kube-controller-manager、kubelet会向kube-apiserver传递心跳,表示节点或服务存活,kube-apiserver记录工作节点状态写入etcd,也会周期性的向kube-apiserver请求是否任务需要完成;
一旦用户下达了指令,例如创建容器,kube-apiserver就会接收请求,并写入etcd,当scheduler向kube-apiserver请求任务时,kube-apiserver会将接收的创建容器的请求发送给kube-scheduler,同时也会请求kubelet节点状态,scheduler通过调度算法来决定在哪个kubelet节点创建容器,并反馈给kube-apiserver,kube-apiserver将信息记录到etcd中;
当kubelet向api请求任务时,kube-apiserver在etcd中查询到节点有创建容器的任务,就会将任务丢给对应kubelet去创建;
kube-controller-manager向kube-apiserver请求任务,kube-apiserver会将集群信息发送给kube-controller-manager去检查。一旦发现任务不达标,就给将信息发送给kube-apiserver,kube-apiserver会记录在etcd中,当kubelet请求时,api会重新分配任务