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集群进行管理的客户端工具。

posted @ 2026-01-12 22:43  Y99017  阅读(3)  评论(0)    收藏  举报