k8s核心组件
kube-apiserver
- 整个k8s集群的访问入口
- 提供k8s各类资源对象的增删改查及watch等HTTPS Rest接口
- 相关资源对象包括pods、services、replicationcontrollers等
- API Server为REST操作提供服务,并为集群的共享状态提供前端
- 所有其他组件都通过该前端进行交互
kubernetes API Server简介
-
默认端口:6443(可以通过启动参数“--secure-port"修改)
-
默认监听IP为0.0.0.0及本机所有IP(可以通过启动参数“--bind-address"修改)
-
接收来自客户端、dashboard等外部Https请求
-
实现基于Tocken文件或客户端证书及HTTP Base的认证
-
实现基于策略的账户鉴权及准入
-
客户端通过API Server远程调用kubernetes的API远程,实现对kubernetes内部资源的增删改查等管理任务的分发。
API的版本
- Alpha:预览版,可能包含bug或错误,不建议使用。
- Beta:公测版,可能存在不稳定或潜在bug,不建议生产环境使用
- v1/v2/vX:稳定版,适合生产环境使用
可以通过curl测试API,例如:
#curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443/ #返回所有的API列表
# curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443/apis #分组API
# curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443/api/v1 #带具体版本号的API
# curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443/version #API版本信息
# curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443/healthz/etcd #与etcd的心跳监测
# curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443/apis/autoscaling/v1 #指定API的详细信息
# curl --cacert /etc/kubernetes/ssl/ca.pem -H "Authorization: Bearer ${TOKEN}" https://172.31.7.101:6443/metrics #指标数据
etcd
目前是Kubernetes默认使用的key-value数据存储系统,用于保存kubernetes的所有集群数据,etcd支持分布式集群功能,生产环境使用时需要为etcd数据提供定期备份机制。
kube-scheduler
负责将 Pods 按照一定的调度策略指派到目的节点上
-
通过调度算法为待调度Pod列表的每个Pod从可用Node列表中选择一个最适合的Node,并将信息写入etcd中。
-
node节点上的kubelet通过API Server监听到kubernetes Scheduler产生的Pod绑定信息,然后获取对应的Pod清单,下载Image并启动容器。
kube-controller-manager
- 控制器管理器,包括一些子控制器(副本控制器、节点控制器、命名空间控制器和服务账号控制器等)
- 控制器作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理
- 当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群中的pod副本始终处于预期的工作状态。
基于controller-manager实现的pod高可用机制: - controller-manager控制器每间隔5秒检查一次节点的状态。
(node monitor period:节点监视周期,5s) - 如果controller-manager控制器没有收到自节点的心跳,则将该node节点被标记为不可达。
- controller-manager将在标记为无法访问之前等待40秒。
(node monitor grace period:节点监视宽限期,40s) - 如果该node节点被标记为无法访问后5分钟还没有恢复,controller-manager会删除当前node节点的所有pod并在其它可用节点重建这些pod。
(pod eviction timeout:pod超时驱逐时间,5m) - Controller:负责把用户通过API Server中遵循 某个特定API实例化的对象,生产出来;
- 智能程序:专用于特定领域
kube-proxy
Kubernetes网络代理,运行在 node 上,反映了 node上 Kubernetes API中定义的服务,并可以通过一组后端进行简单的 TCP、UDP和 SCTP 流转发或者在一组后端进行循环 TCP、UDP 和 SCTP 转发。
用户必须使用 apiserver API 创建一个服务来配置代理(其实就是kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务访问)。
kube-proxy 运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtables或者IPVS规则 来实现网络的转发。
Kube-Proxy的三种工作模式
-
UserSpace:从k8s 1.2开始,已淘汰。
-
IPtables:早期使用,节点数量时多会遇到瓶颈
-
IPVS:从k8s 1.9开始引入,1.11之后默认使用IPVS,默认使用轮询调度
IPVS 相对 IPtables 效率会更高一些,使用 IPVS 模式需要在运行 Kube-Proxy 的节点上安装 ipvsadm、ipset 工具包和加载 ip_vs内核模块,当 Kube-Proxy 以 IPVS 代理模式启动时,Kube-Proxy 将验证节点上是否安装了 IPVS 模块,如果未安装,则 Kube-Proxy将回退到 IPtables 代理模式。
kublet
kubelet是运行在每个worker节点的代理组件,它会监视已分配给节点的pod。
具体功能如下:
-
向master汇报node节点的状态信息
-
接受指令并在Pod中创建 docker容器
-
准备Pod所需的数据卷
-
返回pod的运行状态
-
在node节点执行容器健康检查
kubectl
通过命令行对kubernetes集群进行管理的客户端工具。

浙公网安备 33010602011771号