浅析Kubernetes的常用的组件
Master组件
1.集群控制中心-指挥部
2.kubernetes系统的控制器组件(控制器组件可以运行在任何节点上,也可以为其单独分配服务器,称之为Master节点)
kube-apiserver
etcd
kube-controller-manager
kube-scheduler
cloud-controller-manager
3.Master组件一般会多实例部署(或者高可用部署)
注:
Master不可用,则对集群内容器应用的管理都将失效
Master不可用,并不一定影响正在运行的容器应用
Node组件
1.集群中接受Master组件的指令,实际运行容器应用的工作负载节点
2.早期版本成为Minion
3.当某个Node宕机时,其上的工作负载会被Master自动转移到其他的节点
4.Node上运行的组件
kubelet
kube-proxy
Docker Engine
5.Node可以在运行期间动态增加到kubernetes集群中
Master
-
Kube-apiserver
- Kubernetes资源请求/调用操作都是用过kube-apiserver提供的接口进行
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd)
- 采用HTTPS安全传输通道与CA签名数字证书强制刷个念想认证的方式,保障API-Server的安全性
- 使用协程(Coroutine)+队列(Queue)这种轻量级的高性能并发代码,使单进程的API-Server具备了超强的多核处理能力
- RESTful API采用了同步增删改查+异步WATCH接口,解决kubernetes中各种资源对象的高性能同步的问题
- API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;
关于API-Server访问资源方式参考以下
https://blog.csdn.net/bbwangj/article/details/81904421
相关命令参考
https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/
-
kube-controller-manager
- 运行各种管理控制器,它们是集群中处理常规任务的后台线程
- 管理控制器通过API Server提供的(List-Watch)接口实时监控集群中特定资源的状态变化,当资源对象的状态发生变化时,Controller会尝试将其状态调整为期待的状态
- kube-controller-manager包含Node controller、Replication Controller、Endpoint Controller、Service Account等
关于kube-controller-manager中的详细信息参考以下
https://blog.csdn.net/bbwangj/article/details/82557705
相关命令参考
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/
-
kube-scheduler
- 通过调度算法为待调度Pod列表中的每个Pod从Node列表中选择一个最合适的Node
- 调度步骤:
- 接收Controller Manager创建的新的待绑定pod
- 按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的Node上
- 将绑定的信息写入etcd中
- 目标Node上的kubelet服务进程实际为创建pod
关于kube-scheduler中的详细信息参考以下
https://blog.csdn.net/li_101357/article/details/89980217
相关命令参考
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/
-
Etcd
- etcd是一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
- k8s集群使用etcd作为它的数据后端,etcd是一种无状态的分布式数据存储集群. 数据以key-value的形式存储在其中
关于etcd的详细信息参考以下
http://jolestar.com/etcd-architecture/
Node
-
kube-proxy
- 每个Node上都会运行一个kube-proxy服务进程
- 实现Kubernetes Service的通信与负载均衡机制的重要组件
- kube-proxy负责为Pod创建代理服务,从apiserver获取所有server信息,并根据server信息创建代理服务,实现server到Pod的请求路由和转发,从而实现K8s层级的虚拟转发网络
- kube-proxy维护所有的Endpoint列表,kubernetes集群内不,可以在任意的Node上发起对某Service的访问请求,均能正确送达(及时Pod和kube-proxy不在同一个Node上)
- 将发到某个Service的访问请求转发带后端的多个pod实例(优先使用操作系统pacet filtering layer(iptables,ipvs等)进行转发,如果没有配置以上组件,kube-proxy自己负责转发)
关于kube-proxy的详细信息参考以下
https://www.cnblogs.com/fuyuteng/p/11598768.html
相关命令参考
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/
-
kubelet
- 每个Node上都会运行一个kubelet服务进程
- 处理Master下发到本节点的任务,管理pod及pod中的容器
- 通过kube-apiserver定期向Master汇报节点资源使用情况
- 通过cAdvisor监控容器和节点资源
- 定期执行容器健康检查
关于kubelet的详细信息参考以下
https://www.huweihuang.com/kubernetes-notes/principle/kubernetes-core-principle-kubelet.html
相关命令参考
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/