k8s 集群中重要的组件(master和node的)

                  kubernets重要的组件

1、kubelet
 官方文档:https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/

  kubelet主要部署在node节点上,kubelet 是基于 PodSpec 来工作的。每个 PodSpec 是一个描述 Pod 的 YAML 或 JSON 对象。 kubelet 接受通过各种机制(主要是通过 kube-apiserver)提供的一组 PodSpec,并确保这些 PodSpec 中描述的容器处于运行状态且运行状况良好。 kubelet 不管理不是由 Kubernetes 创建的容器。
小结: node节点上kubelet和master的 kube-apiserver组件服务通讯

2、kubectl(管理集群) 
https://kubernetes.io/zh/docs/reference/kubectl/

Kubernetes 提供 kubectl 是使用 Kubernetes API (主要是kube-apiserver组件)与 Kubernetes 集群的控制面进行通信的命令行管理集群的工具。

小结: kubectl 主要就是和kube-apiserver组件通讯
         这里注意kubectl可以在master或node节点上执行,即集群内部就可以执行。
         kube-apiserver 通常发布方式,例如:集成在hyberkube二进制程序中,独立的kube-apiserver二进制程序。
         kubectl  通常的发布方式,例如:集成在hyberkube二进制程序中,独立的kubectl二进制程序。

3、Kubernetes API

 https://kubernetes.io/zh/docs/concepts/overview/kubernetes-api/

Kubernetes API

Kubernetes 控制面 的核心是 API 服务器。 API server(kube-apiserver)负责提供 HTTP API,以供用户、集群中的不同部分和集群外部组件相互通信。
小结: API已集成到了kube-apiserver内部,提供对外的访问。

4、kube-controller-manager(包括多个控制器)

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/
Kubernetes 控制器管理器是一个demaon进程(类似http server后台启动的进程一样),内嵌随 Kubernetes 一起发布的核心控制回路。 在机器人和自动化的应用中,控制回路是一个永不休止的循环,用于调节系统状态。 在 Kubernetes 中,每个控制器是一个控制回路,通过 API server(kube-apiserver)监视集群的共享状态, 并尝试进行更改以将当前状态转为期望状态。 

小结:
1) kube-controller-manager通过kube-apiserver通讯
2)kube-controller-manager监听10252和10257端口,两个接口都对外提供 /metrics 和 /healthz 的访问。
 10252:接收 http 请求访问,非安全端口,不需要认证授权,为了安全建议侦听地址为127.0.0.1;
 10257:接收 https 请求访问,安全端口,需要认证授权,可以侦听任何地址;
3) kube-controller-manager 由一系列的控制器组成,包括
 ReplicaSetController
 DeploymentController
 StatefulSetController
 DaemonSetController
 JobController
 TTLController
 CronJobController
 Route Controller(路由控制器)
 Service Controller(服务控制器)
 Node Controller(节点控制器)等
5、kube-proxy(service实现)
   官方文档: https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/
    Kubernetes 网络代理在每个node节点上运行。即运行在每个node节点上的Kube-proxy会通过kube-apiserver 获得etcd 中 Service和Endpoints的变化信息 。
    kube-proxy是实现Kubernetes Service的通信与负载均衡机制的重要组件; kube-proxy负责为Pod创建代理服务,从kube-apiserver获取所有server信息,并根据server信息创建代理服务,实现server到Pod的请求路由和转发,从而实现K8s层级的虚拟转发网络。
    在k8s中,相同服务的一组pod被抽象成一个service,通过service的统一对外提供服务,每个service都有一个IP地址和端口号供客户端访问。我们通常用nginx配置反向代理来访问service。kube-proxy主要用于Service功能的实现,具体来说,就是实现集群内的客户端pod访问service,或者是集群外的主机通过NodePort等方式访问service。
    网络代理反映了每个节点上 Kubernetes API 中定义的服务,并且可以执行简单的 TCP、UDP 和 SCTP 流转发,或者在一组后端进行 循环 TCP、UDP 和 SCTP 转发。 当前可通过 Docker-links-compatible 环境变量找到服务集群 IP 和端口, 这些环境变量指定了服务代理打开的端口。 有一个可选的插件,可以为这些集群 IP 提供集群 DNS。 用户必须使用 apiserver API 创建服务才能配置代理。
摘抄几个设置
kube-proxy配置参数 配置说明
--kube-api-burst int32  默认值:10 与 kubernetes apiserver 通信的突发数量。
--kube-api-content-type string     默认值:"application/vnd.kubernetes.protobuf" 发送到 apiserver 的请求的内容类型。
--kube-api-qps float32     默认值:5 与 kubernetes apiserver 交互时使用的 QPS。
--master string Kubernetes API 服务器(kube-apiserver)的地址(覆盖 kubeconfig 中的相关值)。


 小结: kube-proxy主要和kube-apiserver通讯

6、kube-scheduler(调度器)
  官方文档: https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/

  Kubernetes 调度器是一个控制面进程,负责将 Pods 指派到节点上。 调度器基于约束和可用资源为调度队列中每个 Pod 确定其可合法放置的节点。 调度器之后对所有合法的节点进行排序,将 Pod 绑定到一个合适的节点。 在同一个集群中可以使用多个不同的调度器;kube-scheduler 是其参考实现。 参阅调度以获得关于调度和 kube-scheduler 组件的更多信息。

摘抄几个配置选项

   
--kube-api-burst int32     默认值:100 已弃用: 与 kubernetes API(api被集成到了kube-apiserver中) 通信时使用的突发请求个数限值。 如果 --config 指定了一个配置文件,那么这个参数将被忽略。
--kube-api-content-type string 默认值:"application/vnd.kubernetes.protobuf" 已弃用: 发送到 API 服务器(kube-apiserver)的请求的内容类型。 如果 --config 指定了一个配置文件,那么这个参数将被忽略
--kube-api-qps float     默认值:50 已弃用: 与 kubernetes apiserver 通信时要使用的 QPS 如果 --config 指定了一个配置文件,那么这个参数将被忽略。
--master string Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)。

小结: kube-scheduler只和kube-apiserver通讯

 

posted @ 2022-05-30 02:38  jinzi  阅读(171)  评论(0编辑  收藏  举报