Kubernetes 节点

在Kubernetes集群中,节点是运行工作负载的基本单元。节点可以是虚拟机(VM)或物理机,具体取决于集群的配置。每个节点都包含运行Pod所需的服务,并由控制平面进行管理。

节点的组成

  1. Kubelet

    • 功能:Kubelet是每个节点上的代理,负责与控制平面通信,执行分配给该节点的任务,并管理Pod和容器的生命周期。
    • 技术原理:Kubelet定期从API Server获取Pod定义,并调用容器运行时(如Docker、containerd)来创建和管理容器,同时监控它们的运行状态。
    • 应用场景:在节点上启动、停止和维护Pod,确保容器按照预期运行。
  2. 容器运行时

    • 功能:容器运行时是实际负责运行容器的引擎。
    • 技术原理:容器运行时通过OCI(Open Container Initiative)标准接口接收Kubelet的指令,启动和管理容器。
    • 应用场景:运行在节点上的所有容器,常用的容器运行时包括Docker、containerd、CRI-O等。
  3. Kube-proxy

    • 功能:Kube-proxy维护网络规则,确保Pod之间及Pod与外部世界之间的网络通信。
    • 技术原理:通过iptables或IPVS实现网络流量转发和负载均衡,处理服务发现和网络请求。
    • 应用场景:在集群内实现服务的发现和负载均衡,确保不同节点上的Pod能够相互通信。

节点的管理

Kubernetes通过以下两种主要方法将节点添加到API Server:

  1. Kubelet自注册

    • 过程:当Kubelet标志--register-node设置为true(默认值)时,Kubelet会尝试向API Server注册自身。
    • 启动选项

      • --kubeconfig:用于向API Server验证自身的凭据路径。
      • --cloud-provider:指定如何与云提供商通信以获取节点的元数据。
      • --register-node:自动注册到API Server。
      • --register-with-taints:使用给定的污点列表注册节点。
      • --node-ip:节点的IP地址,可选项。
      • --node-labels:注册节点时要添加的标签。
      • --node-status-update-frequency:Kubelet向API Server更新节点状态的频率。
  2. 手动添加Node对象

    • 过程:可以使用kubectl命令手动创建和修改Node对象。
    • 示例

      {
        "kind": "Node",
        "apiVersion": "v1",
        "metadata": {
          "name": "node-123",
          "labels": {
            "role": "worker"
          }
        }
      }
    • 注意事项:节点名称必须是有效的DNS子域名,并且在集群中唯一。

节点状态与健康检查

节点的状态包含以下信息:

  • 地址:节点的IP地址。
  • 条件:节点的健康状态。
  • 容量和可分配:节点的资源容量,如CPU和内存。
  • 信息:节点的操作系统、Kubelet版本等信息。

可以使用kubectl describe node <node-name>查看节点的状态和详细信息。

节点控制器

节点控制器是Kubernetes控制平面组件,用于管理节点的各个方面。它的职责包括:

  1. CIDR分配:注册节点时分配CIDR块。
  2. 同步节点列表:与云提供商的计算资源列表保持同步。
  3. 节点健康监控:更新节点状态,并在节点不可用时触发Pod逐出。

节点控制器默认每5秒检查一次节点状态,可以通过--node-monitor-period标志配置时间段。

节点的逐出机制

节点控制器管理Pod逐出,默认逐出速率为每秒0.1次。当一个可用区的节点不正常比例达到一定阈值时,逐出速率会降低。逐出机制确保在区域故障时,工作负载可以转移到其他正常区域。

资源容量跟踪

Node对象跟踪节点的资源容量信息。Kubernetes调度器确保节点上的所有Pod都有足够的资源。可以显式为非Pod进程保留资源,确保系统守护进程的正常运行。

节点拓扑和交换内存管理

  • 节点拓扑:通过TopologyManager功能门控,Kubelet可以在做出资源分配决策时使用拓扑提示。
  • 交换内存管理:启用NodeSwap功能门控后,节点可以使用交换内存,但需配置--fail-swap-on为false。可选择LimitedSwap模式,仅允许可突发QoS的Pod使用交换。

通过这些机制和组件,Kubernetes能够有效管理和调度集群中的节点,确保容器化应用的高可用性和资源优化。

本文由mdnice多平台发布


逼格高的汤圆
7 声望2 粉丝