> 文章列表 > Kubernetes入门到提高(三)

Kubernetes入门到提高(三)

Kubernetes入门到提高(三)

一、API Server

API Server是Kubernetes的核心组件之一,它作为整个Kubernetes系统的中心控制点,提供了一种RESTful API接口,用于管理和操作整个集群中的资源对象。

API Server的主要职责是接收来自用户和Kubernetes组件的API请求,并将其转换为对Kubernetes集群的操作。API Server负责对资源对象进行验证、授权和记录,并将其保存在etcd中。API Server还处理了许多Kubernetes核心组件之间的通信,例如调度器、控制器管理器和kubelet。

API Server可以使用HTTPS或HTTP协议来处理API请求,并使用认证和授权策略来确保只有经过授权的用户可以对集群进行操作。API Server还可以通过配置文件或命令行参数来设置安全选项,例如启用TLS或关闭匿名访问等。

在Kubernetes集群中,每个节点上的kubelet进程都会与API Server进行通信。kubelet会将节点上的资源对象的状态信息发送到API Server,以便API Server可以了解整个集群的状态。同时,API Server还会向kubelet发送指令,例如调度Pod、更新资源对象等。

API Server是Kubernetes集群中最重要的组件之一,它为用户和Kubernetes组件提供了统一的RESTful API接口,用于管理和操作整个集群中的资源对象,包括节点、Pod、服务、ReplicaSet等。对于高级运维工程师而言,熟练掌握API Server的原理和使用方法,对于管理和维护Kubernetes集群具有重要的意义。

二、Controller Manager

Controller Manager是Kubernetes的核心组件之一,负责管理和控制整个集群的控制器。控制器是Kubernetes的一个重要概念,它用于确保集群中的资源对象达到预期状态,并且在资源状态发生变化时对其进行调整。Controller Manager中的每个控制器都有自己的功能,例如Deployment控制器用于管理Pod的部署和升级,Replication Controller控制器用于确保Pod的副本数满足期望值等等。

Controller Manager的主要职责是启动和管理这些控制器,并确保它们在整个集群中按预期工作。Controller Manager会从etcd中获取资源对象的状态信息,并将其与控制器的期望状态进行比较。如果资源对象的状态与期望状态不一致,Controller Manager将启动相应的控制器,对资源对象进行调整,直到其达到预期状态。

 

除了启动和管理控制器,Controller Manager还负责处理其他一些任务,例如:

  • 服务发现和负载均衡:Controller Manager中的Service控制器负责确保服务的端点和负载均衡规则与集群中的Pod的状态同步。
  • 资源限制和调度:Controller Manager中的ResourceQuota控制器和PodScheduled控制器负责限制集群中每个命名空间中的资源使用和调度Pod到合适的节点。
  • 垃圾回收:Controller Manager中的Garbage Collector控制器负责自动清理Kubernetes集群中不再需要的资源对象。

Controller Manager是Kubernetes集群中的一个重要组件,它负责启动和管理集群中的控制器,确保资源对象达到预期状态,并处理其他一些任务

以下是Controller Manager中常见的控制器组件:

  1. Replication Controller控制器:负责确保Pod的副本数达到指定的期望值,并在Pod发生故障时重新启动它们。

  2. Deployment控制器:管理应用程序的版本控制和升级,可以通过Deployment控制器来创建、升级和回滚应用程序。

  3. StatefulSet控制器:管理有状态应用程序的部署和扩展,可以确保应用程序的每个实例都有唯一的标识和稳定的网络标识符。

  4. DaemonSet控制器:管理在每个节点上运行的Pod,可以确保每个节点上都运行相同数量的Pod。

  5. Job和CronJob控制器:管理一次性任务和定时任务,可以用于批量处理和数据处理等场景。

  6. Service控制器:管理Kubernetes中的服务,确保服务的端点和负载均衡规则与集群中的Pod的状态同步。

  7. Endpoint控制器:管理服务的端点,将服务的网络标识符映射到实际运行服务的Pod的IP地址和端口号。

  8. Namespace控制器:管理命名空间,确保每个命名空间中的资源对象都与其他命名空间隔离。

  9. ResourceQuota控制器:管理资源配额,可以限制每个命名空间中的资源使用量。

除了上述控制器组件之外,Controller Manager还包括一些辅助组件,例如垃圾回收器和证书控制器等,用于保证集群的安全性和稳定性。Controller Manager是Kubernetes中的一个重要组件,由多个控制器组件组成,负责管理和控制整个集群的状态。

三、Scheduler

Scheduler主要负责将Pod调度到集群中的节点上运行。当创建一个Pod时,Pod的spec字段中会指定所需的资源,例如CPU和内存等。Scheduler会根据这些资源需求,以及节点的资源可用情况和Pod的亲和性(affinity)和反亲和性(anti-affinity)规则等条件,来确定Pod应该运行在哪个节点上。

 

Scheduler的工作流程如下:

  1. 创建一个Pod:当Kubernetes API Server接收到一个Pod创建请求时,将把该请求发送给Scheduler组件。

  2. 预选阶段:Scheduler会首先进行预选(Predicates)过滤,筛选出所有符合Pod要求的节点。

  3. 优选阶段:在所有预选通过的节点中,Scheduler会根据一些算法进行优选(Priorities)筛选,以选择最适合的节点。这些算法包括优选节点的资源使用率、Pod亲和性规则、Pod反亲和性规则等。

  4. 绑定阶段:Scheduler会将选定的节点信息写入Pod的spec字段,并将Pod的创建请求发送给API Server。

  5. 容器创建:当Pod被调度到某个节点上时,该节点的Kubelet将会创建Pod中的容器。

在Kubernetes中,Scheduler是可插拔的。这意味着用户可以根据自己的需求自定义Scheduler的实现。用户可以实现自己的调度策略,并将其作为Scheduler的插件来使用。这种可插拔的架构使得Kubernetes更加灵活和可扩展,可以满足各种不同的应用场景需求。

四、etcd

etcd是Kubernetes中的一个分布式键值存储系统,用于存储集群的状态信息和元数据。它通过使用Raft算法来保证数据的一致性和高可用性,并支持高效的数据读写操作。在Kubernetes中,etcd扮演着重要的角色,是控制平面和工作节点之间的重要通信媒介,也是Kubernetes中所有对象的存储介质。

etcd被设计成具有高可靠性和高可扩展性。它使用多个节点组成的集群来存储数据,当其中任何一个节点宕机时,其他节点可以接替其工作,保证了数据的可用性和一致性。同时,etcd还提供了快照和日志压缩等功能,可以有效减少存储空间的使用,提高系统性能。

在Kubernetes中,etcd主要用于存储集群的状态信息和元数据。例如,Kubernetes中的所有对象,例如Pod、Service和ReplicaSet等,都被存储在etcd中。当Kubernetes组件需要访问这些对象时,它们会从etcd中获取对象的信息,并在必要时将其更新。

另外,etcd还是Kubernetes的控制平面和工作节点之间的重要通信媒介。例如,当Kubernetes的API Server需要通知Scheduler或Controller Manager进行某些操作时,它会将这些指令写入etcd中,并通知这些组件进行相应的操作。