内容主要摘自官网文档资料 官网地址
本文概述了交付正常运行的Kubernetes集群所需的各种组件。
本文编写基于kubernetes v1.17版本
Kubernetes集群
Kubernetes集群主要组成为Master和Node
简单概述,Master节点就是集群的调度节点、其管理集群;Node节点是应用程序实际运行的节点。
Master组件
Master组件提供集群的Control Plane。Master组件对集群进行全局决策(例如,调度),并检测和响应集群事件(例如,当不满足部署的replicas字段时,启动新的pod)。
Master组件可以在集群中的任何节点上运行。然而,为了简单起见,安装脚本通常会启动同一个计算机上所有Master组件,并且不会在计算机上运行用户容器。
Master组件:
- kube-apiserver
- kube-scheduler
- kube-controller-manager
- etcd
- cloud-controller-manager
kube-apiserver
主节点上负责提供Kubernetes API服务的组件;它是Kubernetes control plane的前端,Kubernetes集群的操作均通过此API接口进行控制。
kube-apiserver在设计上考虑了水平扩缩的需要。换言之,通过部署多个实例可以实现扩缩。
kube-scheduler
主节点上的组件,该组件监视那些新创建的未指定运行节点的Pod,并选择节点让Pod在上面运行,简言之就是负责资源调度(Pod调度)
。
调度决策考虑的因素包括单个Pod和Pod集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
kube-controller-manager
Kubernetes中所有资源对象的自动化控制中心
。
从逻辑上讲,每个控制器控制器通过apiserver监控集群的公共状态,并致力于将当前状态转变为期望的状态。都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。
这些控制器包括:
- 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应。
- 副本控制器(Replication Controller):负责为系统中的每个副本控制器对象维护正确数量的Pod。
- 端点控制器(Endpoints Controller):填充端点(Endpoints)对象(即加入Service与Pod)。
- 服务帐户和令牌控制器(Service Account & Token Controllers):为新的命名空间创建默认帐户和API访问令牌.
etcd
etcd是兼具一致性和高可用性的键值数据库,可以作为保存Kubernetes所有集群数据的后台数据库
。
您的Kubernetes集群的etcd数据库通常需要有个备份计划。
云控制器管理器-(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的云控制器管理器相关联。
以下控制器具有云提供商依赖性:
- 节点控制器(Node Controller):用于检查云提供商以确定节点是否在云中停止响应后被删除
- 路由控制器(Route Controller):用于在底层云基础架构中设置路由
- 服务控制器(Service Controller):用于创建、更新和删除云提供商负载均衡器
- 数据卷控制器(Volume Controller):用于创建、附加和装载卷、并与云提供商进行交互以编排卷
Node组件
Node节点是运行容器应用化的机器,维护着运行的Pod并提供Kubernetes运行环境。
Node组件:
- kubelet
- kube-proxy
- 容器运行环境
kubelet
与apiserver通信,并管理所在节点的容器。kubelet不会管理不是由Kubernetes创建的容器
。
kube-proxy
kube-proxy是集群中每个节点上运行的网络代理,实现Kubernetes Service概念的一部分。
kube-proxy负责组件之间的负载均衡网络流量
,维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与Pod进行网络通信。
容器运行环境(Container Runtime)
容器运行环境是负责运行容器的软件(例如Docker)。
Kubernetes支持多个容器运行环境:Docker、containerd、cri-o、rktlet以及任何实现Kubernetes CRI(容器运行环境接口)。
插件(Addons)
插件使用Kubernetes资源(DaemonSet,Deployment等)实现集群功能。因为这些提供集群级别的功能,所以插件的命名空间资源属于kube-system命名空间。
可用插件的扩展列表:插件
DNS
尽管并非严格要求其他附加组件,但所有示例都依赖集群DNS,因此所有Kubernetes集群都应具有DNS,它为Kubernetes服务提供DNS记录。
ClusterDNS是一个DNS服务器,和您部署环境中的其他DNS服务器一起工作,为Kubernetes服务提供DNS记录。
Kubernetes启动的容器自动将DNS服务器包含在DNS searches(DNS搜索域)。
Dashboard
Kubernetes集群的Web UI。它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。
容器资源监控
容器资源监控将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。
集群层面日志
集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。
Networking and Network Policy
网络插件负责为接口配置和管理IP地址,并且通常提供与IP管理、每个容器的IP分配、以及多主机连接相关的功能。网络策略插件允许集群群组与其他网络终端进行通信时的规范以定义规则。
总结
-
kubernetes的主要组成
主要有两部分组成,master节点以及node节点。master节点包含kube-apiserver,kube-scheduler,kube-controller-manager,etcd,cloud-controller-manager组件;node节点包含kubelet,kube-proxy,容器运行环境。
-
哪些附件组件能够更好地帮助我们完善kubernetes集群的属性
DNS:为Kubernetes服务提供DNS记录解析。
Dashboard:kubernetes集群的Web UI,使管理更方便。
资源监控:更好地了解集群状态。
集群日志:更好地排查解决问题。
网络插件:管理网络及网络策略。
-
小结
更加详细地了解了Kubernetes的组成,以及各组件的一些细节。了解到运行一个Kubernetes集群需要哪些组成,怎么样才能够更好地运行和管理Kubernetes集群等一些基础理论知识。