ydswin

忘记背后,努力面前的,向着标杆直跑

导航

Cordon、Drain、污点与容忍度、亲和性与反亲和性

在Kubernetes(K8s)中,Cordon、Drain、污点与容忍度、亲和性与反亲和性都是与资源管理和调度相关的概念。下面是对这些概念的详细解释:

  1. Cordon(封锁、警戒):

    • Cordon是一个节点维护操作,用于阻止新的Pods被调度到该节点上。当一个节点被标记为Cordon时,已经在该节点上运行的Pods不会被驱逐,但新的Pods不会被调度到这个节点。

    • 这个操作通常用于节点的维护或升级,确保在维护期间不会有新的工作负载被分配到该节点上。

      kubectl cordon node1
      kubectl get nodes # status会新增SchedulingDisabled
      kubectl uncordon node1 
      
  2. Drain(驱逐):

    • Drain操作会驱逐节点上的所有Pods,即将它们从节点上移除并重新调度到其他可用的节点上。

    • 在执行Drain操作时,可以指定一些选项,如忽略DaemonSets管理的Pods,或者强制驱逐即使Pods有对应的容忍度。

    • Drain操作会将节点设置为不可调度状态(Cordon),确保在驱逐Pods期间不会有新的Pods被调度到这个节点上。

      kubectl drain node1 --ignore-daemonsets=true --force
      
  3. 污点(Taints):

    • 污点是应用于节点上的,用来表示节点存在某种问题或满足特定条件,从而阻止Pods被调度到这个节点上。

    • 污点由键(key)、值(value)和效应(effect)组成。效应可以是NoSchedule(不允许调度)、PreferNoSchedule(优先不调度)或NoExecute(不允许运行且驱逐已运行的Pods)。

    • 内置的污点包括节点未就绪、不可达、磁盘空间不足、内存压力等,也可以自定义污点。

      kubectl taint node node1 wudian:NoSchedule
      kubectl taint node node1 wudian-
      
      
  4. 容忍度(Tolerations):

    • 容忍度是应用于Pods上的,允许Pods在存在污点的节点上调度或继续运行。

    • 如果Pod有对应的容忍度,它可以被调度到带有相应污点的节点上,或者即使节点上的污点触发了NoExecute效应,Pod也可以继续在该节点上运行。

    • 容忍度与污点相互配合,用于实现Pod对节点条件的灵活适应和调度控制。

      # 键为key1且值为value1的污点,该污点的效应为NoSchedule。
      # 键为key2的任何污点,因为operator是Exists,并且该污点的效应为NoExecute。
      apiVersion: v1  
      kind: Pod  
      metadata:  
        name: my-tolerant-pod  
      spec:  
        containers:  
        - name: my-container  
          image: my-image  
        tolerations:  
        - key: "key1"  
          operator: "Equal"  
          value: "value1"  
          effect: "NoSchedule"  
        - key: "key2"  
          operator: "Exists"  
          effect: "NoExecute"
      
  5. 亲和性(Affinity):

    • 亲和性是一种规则,用于定义Pods在集群中的调度偏好。它允许用户根据标签选择器将Pods调度到具有特定标签的节点上。

    • 亲和性可以是硬亲和性(必须满足 requiredDuringSchedulingIgnoredDuringExecution)或软亲和性(尽量满足 preferredDuringSchedulingIgnoredDuringExecution)。硬亲和性在调度时必须满足,而软亲和性则是调度器在满足其他约束条件后尽量满足的

    • 通过使用亲和性,可以优化Pod的部署和性能,例如将相互依赖的Pods调度到同一节点上以减少网络延迟。

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: my-container
          image: my-image
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: kubernetes.io/hostname
                  operator: In
                  values:
                  - node1
                  - node2
            preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              preference:
                matchExpressions:
                - key: disktype
                  operator: In
                  values:
                  - ssd
      
      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        affinity:
          podAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - my-app
                topologyKey: kubernetes.io/hostname
        containers:
        - name: my-container
          image: my-image
      
  6. 反亲和性(Anti-Affinity):

    • 反亲和性是一种规则,用于定义Pods在集群中的调度反偏好。它确保Pods不会被调度到具有特定标签或已存在某些Pods的节点上。

    • 反亲和性有助于提高应用程序的可用性和容错性,通过将Pods分散到不同的节点上,可以防止单点故障。

    • 反亲和性通常用于确保Pods的高可用性,例如将数据库副本分散到不同的节点上以防止数据丢失。

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        affinity:
          podAntiAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - my-app
                topologyKey: kubernetes.io/hostname
        containers:
        - name: my-container
          image: my-image
      

通过合理使用这些功能,可以更好地控制和优化集群中资源的分配和Pod的部署。

posted on 2024-02-29 00:08  dashery  阅读(107)  评论(0编辑  收藏  举报