k8s设置非强一致反亲和性示例

 更新时间:2023年10月29日 11:27:50   作者:ponponon  
这篇文章主要为大家介绍了k8s设置非强一致反亲和性示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Q:如何设置反亲和性

尽可能让 pod 部署在不同的 node 上,如果需要部署的pod数大于节点数,也可以在一个节点上部署多个 pod,如何设置?

A:要设置反亲和性(PodAntiAffinity),以尽可能让Pod部署在不同的节点上,但允许多个Pod在一个节点上部署,您可以使用适当的PodAntiAffinity规则。这通常涉及到使用适当的标签和拓扑域。

以下是如何设置这样的反亲和性规则的一般步骤:

  • 为节点添加标签:首先,您需要为集群中的节点添加适当的标签,以便您可以在反亲和性规则中使用它们。例如,您可以为节点添加一个标签,如rackzone,以表示节点所在的机架或区域。
  • 创建PodAntiAffinity规则:在您的Pod定义中,您可以使用affinity字段来定义反亲和性规则。以下是一个示例:
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100  # 设置优先级
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: "app"
              operator: In
              values:
              - my-app
          topologyKey: "kubernetes.io/hostname"  # 使用节点的主机名标签,或者您设置的标签

上述示例中,我们创建了一个PodAntiAffinity规则,该规则使用preferredDuringSchedulingIgnoredDuringExecution字段,这表示这是一个"优先级规则",而不是绝对必需的规则。该规则要求不同Pod的my-app标签值必须匹配,但它们不能调度到相同的节点上,使用节点的主机名标签(kubernetes.io/hostname)作为拓扑域键来实现这一点。

部署Pod

当您部署多个Pod时,Kubernetes调度器将根据反亲和性规则尽力确保它们不会在相同的节点上调度。如果有足够的节点可用,它们可以分布在不同的节点上,以满足反亲和性规则。如果节点数量少于Pod数量,一些Pod可能需要共享节点,但反亲和性规则会尽力确保它们分布在尽可能多的不同节点上。

请注意,设置preferredDuringSchedulingIgnoredDuringExecution而不是requiredDuringSchedulingIgnoredDuringExecution允许一些Pod仍然可以共享节点,如果没有足够的节点可供选择。这可以帮助在节点资源有限的情况下仍然尽量满足反亲和性规则。

确保您的集群中有足够的节点来容纳您的Pod,以便反亲和性规则可以正常工作。如果节点资源不足,Pod可能会被迫在同一节点上调度,这可能会违反反亲和性规则。

Q:帮我修改

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution: #设置调度策略。
      - labelSelector:
          matchExpressions:
            - key: app
              operator: In
              values:
                - imdb-match-api
        topologyKey: kubernetes.io/hostname

A: 您提供的配置是使用requiredDuringSchedulingIgnoredDuringExecution,这表示Pod之间的反亲和性是强制的,而且如果违反规则,Pod将不会被调度。

如果您希望Pod之间的反亲和性是强制的,但仍然允许多个Pod在一个节点上部署,您可以使用preferredDuringSchedulingIgnoredDuringExecution,这样如果没有足够的节点来满足规则,Pod仍然可以共享节点。

修改版本

以下是您的配置的修改版本:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100  # 设置优先级
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - imdb-match-api
          topologyKey: kubernetes.io/hostname

这将创建一个"优先级规则",它要求不同Pod的imdb-match-api标签值必须匹配,但它们不能调度到相同的节点上。如果没有足够的节点来满足这一规则,Pod仍然可以共享节点,但反亲和性规则将尽力确保它们分布在尽可能多的不同节点上。

以上就是k8s设置非强一致反亲和性示例的详细内容,更多关于k8s设置非强一致反亲和性的资料请关注脚本之家其它相关文章!

相关文章

  • MinIO分布式文件存储(从入门到飞翔)

    MinIO分布式文件存储(从入门到飞翔)

    MinIO是一款高性能的分布式对象存储系统,兼容Amazon S3协议,具有轻量级、易部署、高可用和可扩展性等优势,它通过纠删码技术实现数据冗余与高容错性,适用于私有云存储、大数据分析和静态资源托管等场景,本文介绍MinIO分布式文件存储的相关知识,感兴趣的朋友一起看看吧
    2025-03-03
  • k8s之Pod控制器使用及说明

    k8s之Pod控制器使用及说明

    本文介绍了Kubernetes中的Pod控制器,包括Deployment、ReplicaSet、StatefulSet、DaemonSet、Job和CronJob等类型,详细解释了它们的工作原理、特点和应用场景
    2025-11-11
  • k8s调度原理以及自定义调度器方式

    k8s调度原理以及自定义调度器方式

    文章主要介绍了Kubernetes中的kube-scheduler组件及其调度流程,然后详细讲解了如何通过调度器扩展程序和调度框架来定制和扩展调度器,包括创建简单的自定义调度器扩展程序和调度框架插件的实现步骤,最后讨论了自定义调度策略时需要注意的问题及解决方案
    2026-04-04
  • 一篇文章搞懂K8S高级特性

    一篇文章搞懂K8S高级特性

    这篇文章主要给大家介绍了关于K8S高级特性的相关资料,文中通过时实例代码以及图文介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-11-11
  • k8s高可用集群安装教程

    k8s高可用集群安装教程

    本文给大家介绍k8s高可用集群安装教程,本文通过图文示例相结合给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-03-03
  • 关于NetworkPolicy工作原理解读

    关于NetworkPolicy工作原理解读

    NetworkPolicy是Kubernetes中用于控制Pod间网络流量的资源对象,依赖于支持NetworkPolicy的CNI插件来实现流量控制,它通过定义入口和出口规则来允许或拒绝Pod间的通信,实现网络微分段,保障集群网络安全,NetworkPolicy遵循“默认拒绝,显式允许”的原则
    2025-10-10
  • 基于openEuler的Ceph分布式存储集群部署指南

    基于openEuler的Ceph分布式存储集群部署指南

    本文详细介绍了如何在openEuler22.03LTS操作系统上部署Ceph分布式存储集群,包括环境准备、软件仓库配置、集群初始化、存储节点部署、存储池创建、监控集成和性能优化等步骤,感兴趣的朋友一起看看吧
    2025-03-03
  • Spark三种属性配置方式详解

    Spark三种属性配置方式详解

    有时间还是多学习知识比较好,这篇文章主要介绍了Spark三种属性配置方式详解,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • k8s证书过期时间扫描方式

    k8s证书过期时间扫描方式

    该文章介绍了多种检查Kubernetes证书过期时间的方法,包括使用openssl命令、kubeadm工具、Shell脚本、Kubernetes API等,文章还提到了一些第三方工具,如cert-manager、kube-cert-manager和PrometheusSSLExporter,以及关键证书的位置
    2025-10-10
  • Kubernetes部署可视化地图的十个步骤

    Kubernetes部署可视化地图的十个步骤

    这篇文章主要为大家介绍了十步骤Kubernetes部署的可视化地图,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03

最新评论