【写在前面】
接触k8s有一段时间了,但是并没有很系统的撸一遍,总是哪个组件或者哪个出错了就去百度,知识并没有沉淀下来,所以打算写一下系列文章,本着好理解,全是大白话来搞定。如果哪里写的不好或者出错了,欢迎大佬指正。
1. 组件介绍
简单来说就是分为 master 和 node,集群中必须至少有一个node节点,通常node节点上会运行容器化的应用程序。
实际上来说就是node会托管pod,然后pod里面会运行容器化的应用程序。
master节点就是用来管理 node 和 pod 的。生产环境中可能需要多个master节点来保证集群的高可用。
master 和 node上运行的组件也是不相同的。
除了master 和 node 还有一些其他的插件也可以研究下。
架构如下:
1.1 master
也叫做控制平面组件,主要就是为集群做出决策,比如资源调度、检测和相应集群的事件。分为以下几个组件:
- apiServer:主要公开k8s的api接口,负责处理接收请求的工作,也可以理解为集群的统一入口,也是负责校验、鉴权、准入控制等。apiServer设计的时候就考虑到了水平扩展,所以可以通过部署多个实例来进行扩展
- etcd:一致且高可用的kv存储,当作k8s集群的后台数据库。
- scheduler:主要就是负责pod调度的,比如新创建的但是为指定运行的 node 的pod,然后选择匹配的节点来运行pod。
- controller-manager:负责维护集群状态,也负责集群的健康检查、自我修复、弹性伸缩等。其实k8s集群中分为多种控制器,比如node控制器,任务控制器,有状态无状态控制器、
1.2 node
节点组件会在每个节点上运行,其实就是提供了运行pod的运行环境。具体如下:
- kubelet:在每个节点上运行,保证containers都运行在pod中。也是负责定期向apiServer汇报pod以及node的健康状态。
- kube-proxy:其实简单理解就是实现集群内部的服务发现以及负载均衡,也算是一个网络代理吧;其实service是抽象出来的,具体实现还是由kube-proxy来实现的;根据service定义的内容,然后kube-proxy定义访问规则。
- 容器运行时:可以使用docker(1.19版本之前),containerd,或者只要支持k8s CRI接口的都行。
1.3 插件
这部分比如需要的web界面啊,资源监控等,这部分就不详细说了。