部署k8s时会获得一个集群。
集群是一组计算机,称为节点,它们运行由Kubernetes管理的容器化应用程序。集群具有至少一个工作节点和至少一个主节点。
工作节点托管作为应用程序组件的Pod。主节点管理集群中的工作节点和Pod。多个主节点用于为群集提供故障转移和高可用性。
本文档概述了拥有完整且有效的Kubernetes集群所需的各种组件。
kube-apiserver
API服务器是Kubernetes 控制平面组件。 公开了Kubernetes API。API服务器是Kubernetes控制平面的前端。
Kubernetes API服务器的主要实现是kube-apiserver。kube-apiserver旨在水平扩展-即,它通过部署更多实例进行扩展。您可以运行kube-apiserver的多个实例,并平衡这些实例之间的流量。
etcd
一致且高度可用的键值存储用作所有集群数据的Kubernetes的后备存储。
如果您的Kubernetes集群使用etcd作为其后备存储,请确保您有针对这些数据的备份计划。
您可以在官方文档中找到有关etcd的详细信息。
kube-scheduler
主组件上的组件,该组件监视未分配节点的新创建的Pod,并选择要在其上运行的节点。
计划决策要考虑的因素包括个人和集体资源需求,硬件/软件/策略约束,亲和力和反亲和力规范,数据局部性,工作负载之间的干扰和期限。
kube-controller-manager
运行控制器的主机上的组件。
从逻辑上讲,每个控制器是一个单独的进程,但是为了降低复杂性,它们都被编译成一个二进制文件并在单个进程中运行。
这些控制器包括:
节点控制器:负责在节点出现故障时进行通知和响应。
复制控制器:负责为系统中的每个复制控制器对象维护正确数量的Pod。
端点控制器:填充“端点”对象(即,加入“服务和窗格”)。
服务帐户和令牌控制器:为新名称空间创建默认帐户和API访问令牌。
cloud-controller-manager
cloud-controller-manager运行与底层云提供商交互的控制器。cloud-controller-manager二进制文件是Kubernetes 1.6版中引入的alpha功能。
cloud-controller-manager仅运行特定于云提供商的控制器循环。您必须在kube-controller-manager中禁用这些控制器循环。您可以通过在启动kube-controller-manager时将–cloud-provider标志设置为来禁用控制器循环external。
cloud-controller-manager允许云供应商的代码和Kubernetes代码彼此独立地发展。在以前的版本中,核心的Kubernetes代码依赖于特定于云提供商的代码来实现功能。在将来的版本中,云供应商专有的代码应由云供应商自己维护,并在运行Kubernetes时链接到云控制器管理器。
以下控制器具有云提供程序依赖性:
- 节点控制器:用于检查云提供者以确定节点停止响应后是否已在云中删除该节点
- 路由控制器:用于在基础云基础架构中设置路由
- 服务控制器:用于创建,更新和删除云提供商负载平衡器
- 卷控制器:用于创建,附加和安装卷,以及与云提供商交互以编排卷
节点组件
节点组件在每个节点上运行,维护运行中的Pod,并提供Kubernetes运行时环境。
kubelet
在集群中每个节点上运行的代理。确保容器在容器中运行。
kubelet包含通过各种机制提供的一组PodSpec,并确保这些PodSpec中描述的容器运行正常。Kubelet不管理不是Kubernetes创建的容器。
kube-proxy
kube-proxy是一个网络代理,它在您群集中的每个节点上运行,实现了Kubernetes 服务的一部分。一种将在Pod 概念。
kube-proxy维护节点上的网络规则。这些网络规则允许从群集内部或外部的网络会话与Pod进行网络通信。
如果有kube-proxy可用,它将使用操作系统数据包过滤层。否则,kube-proxy会转发流量本身。
容器运行时
容器运行时是负责运行容器的软件。
Kubernetes支持几种容器运行时:Docker, containeded,cri-o, rktlet以及Kubernetes CRI(容器运行时接口)的任何实现。
插件
插件使用Kubernetes资源(DaemonSet, 部署等)来实现集群功能。因为它们提供了群集级功能,所以插件的命名空间资源属于kube-system命名空间。