一、控制节点组件

在 Kubernetes 中,控制平面组件是管理集群的核心组件,负责管理集群的状态、调度、监控和协调工作。以下是 Kubernetes 控制平面组件的主要组件:
在这里插入图片描述

1.1、kube-apiserver

kube-apiserver 是Kubernetes API服务器,提供了Kubernetes API的访问点。所有对 Kubernetes 集群的请求都会通过 kube-apiserver 进行处理,并且所有的集群状态信息都存储在 etcd 中。kube-apiserver 还负责认证、授权和准入控制等安全功能。

1.2、kube-controller-manager

kube-controller-manager是一组控制器的组合,它们负责监控集群的状态,并根据预期状态进行调整。常见的控制器包括 Node Controller、Replication Controller、Namespace Controller 等,它们负责管理集群中的节点、副本控制、命名空间等。

1.3、kube-scheduler

kube-scheduler 负责根据 Pod 的调度要求和集群中的资源情况,将Pod分配到合适的节点上。kube-scheduler 考虑了诸如节点资源利用率、硬件约束、亲和性和反亲和性(污点)等因素来进行调度决策。

1.4、etcd

etcd是Kubernetes中的分布式键值存储系统,用于保存集群的配置信息、状态信息以及持久化数据。所有的集群状态信息、配置信息和运行时数据都存储在etcd中,kube-apiserver通过etcd存取数据。在kubernetes中使用etcd时,需要对etcd做备份,保证高可用。整个kubernetes系统中一共有两个服务需要用到etcd,用etcd来协同和存储配置,分别是:
1)网络插件falnner、对于其它网络插件也需要用到etcd存储网络的配置信息
2)kubernetes本身,包括各种对象的状态和元信息配置

1.5、kubelet

kubelet是运行在每个节点上的代理程序,负责管理节点上的容器和Pod。它与容器运行时(如 Docker、containerd)交互,根据Pod的规范创建、启动、停止和监控容器,并与 kube-apiserver 通信以接收关于集群状态的更新。

1.6、kube-proxy

kube-proxy 负责实现 Kubernetes 服务的网络代理和负载均衡。它维护网络规则、监控集群中的服务和端点,并将流量转发到正确的 Pod 上。

1.7、flannel

Flannel 使用了一种称为 VXLAN 的技术来实现容器网络的隔离和通信。它会在每个节点上创建一个虚拟的网络接口(称为 “flannel.0”),并在这些接口之间建立 VXLAN 隧道,以实现节点之间的通信。Flannel 通常作为 Kubernetes 网络插件的一部分,用于解决容器之间的网络通信问题。

1.8、coredns

是一个DNS服务器,能够为Kubernetes services提供DNS记录

二、工作节点组件:

Kubernetes 中的节点(Node)是集群中的工作节点,用于运行容器化的应用程序。每个节点都包含一组 Kubernetes 组件,这些组件协同工作,以管理节点上的容器并与集群的其余部分进行通信。

2.1、kubelet

kubelet 是运行在每个节点上的代理程序,负责管理节点上的容器和 Pod。它与容器运行时(如 Docker、containerd)交互,根据 Pod 的规范创建、启动、停止和监控容器,并与 kube-apiserver 通信以接收关于集群状态的更新。

2.2、kube-proxy

kube-proxy 是负责实现 Kubernetes 服务的网络代理和负载均衡的组件。它维护网络规则、监控集群中的服务和端点,并将流量转发到正确的 Pod 上,以确保服务的可用性和可靠性。

2.3、flannel

略!~

三、k8s通信默认端口介绍

3.1、kube-apiserver:

默认端口:6443。用途:kube-apiserver 是 Kubernetes API 服务器,提供了 Kubernetes API 的访问点。所有对 Kubernetes 集群的请求都会通过 kube-apiserver 进行处理。

3.2、etcd:

默认端口:2379(客户端访问端口)、2380(集群成员间通信端口)
用途:etcd 是 Kubernetes 中的分布式键值存储系统,用于保存集群的配置信息、状态信息以及持久化数据。
所有的集群状态信息、配置信息和运行时数据都存储在 etcd 中,kube-apiserver 通过 etcd 存取数据。

3.3、kubelet:

默认端口:10250(只读端口,供 kube-apiserver 访问)、10255(只读端口,供监控系统访问)、10256(只读端口,供授权插件访问)用途:kubelet 是运行在每个节点上的代理程序,负责管理节点上的容器和 Pod。kube-apiserver 可以通过 10250 端口与 kubelet 通信以获取节点和 Pod 的状态信息,监控系统可以通过 10255 端口获取监控指标,授权插件可以通过

3.4、NodePort:

NodePort 是 Kubernetes Service 类型之一,它将某个 Service 暴露在 Node 的固定端口上。NodePort 的范围是从 30000 到 32767,默认情况下由 Kubernetes 自动分配。

四、k8s的API介绍

在书写k8s的yaml文件时需要添加apiVersion的版本。如果使用的api版本中不含有关键字段的信息,在运行yaml时会有报错。
下面是对api版本的介绍:

4.1、alpha-内部测试版本:

1)版本名称包含了alpha (例如:v1alpha1)。
2)可能是有缺陷的。启用该功能可能会带来隐含的问题,默认情况是关闭的。
3)支持的功能可能在没有通知的情况下随时删除。
4)API的更改可能会带来兼容性问题,但是在后续的软件发布中不会有任何通知。
5)由于bugs风险的增加和缺乏长期的支持,推荐在短暂的集群测试中使用。

4.2、beta-公测版本:

1)版本名称包含了beta(例如:v2beta3)。
2)代码已经测试过。启用该功能被认为是安全的,功能默认已启用。
3)所有已支持的功能不会被删除,细节可能会发生变化。
4)对象的模式和/或语义可能会在后续的beta测试版或稳定版中以不兼容的方式进行更改。 发生这种情况时,我们将提供迁移到下一个版本的说明。 这可能需要删除、编辑和重新创建API对象。执行编辑操作时需要谨慎行事,这可能需要停用依赖该功能的应用程序。
5)建议仅用于非业务关键型用途,因为后续版本中可能存在不兼容的更改。 如果有多个可以独立升级的集群,则可以放宽此限制

4.3、stable-稳定版本:

1)版本名称是vX,其中X是整数。
2)功能的稳定版本将出现在许多后续版本的发行软件中。

4.4、API组:

1)核心组(通常被称为遗留组)位于REST路径/api/v1并使用apiVersion:v1。
2)指定的组位于REST路径/apis/GROUP/VERSION,并使用apiVersion:GROUP_NAME/VERSION(例如apiVersion:batch/v1)。在官方地址(https://kubernetes.io/docs/reference/)中可以看到支持的API组的完整列表。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐