当前位置: 首页 > news >正文

k8s 配置两个deployment主机级别互斥部署

在 Kubernetes 中,要实现两个 Deployment 的 Pod 在主机级别互斥部署,可以使用 podAntiAffinity 配置。通过设置 podAntiAffinity,可以确保两个 Deployment 的 Pod 不会被调度到同一节点上。

实现步骤

定义 Deployment

为每个 Deployment 定义 podAntiAffinity,指定它们不能与另一个 Deployment 的 Pod 部署在同一个节点上。

设置标签选择器

使用 labelSelector 来匹配另一个 Deployment 的 Pod 标签。

设置拓扑键

使用 topologyKey 设置为 kubernetes.io/hostname,表示基于节点的互斥。

案例

假设有两个 Deployment,分别是 deployment-Adeployment-B,它们的 Pod 标签分别为 app: app-aapp: app-b

Deployment A
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-a
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app-a
  template:
    metadata:
      labels:
        app: app-a
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - app-b
            topologyKey: kubernetes.io/hostname
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
Deployment B
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-b
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app-b
  template:
    metadata:
      labels:
        app: app-b
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - app-a
            topologyKey: kubernetes.io/hostname
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

说明

  • podAntiAffinity:定义 Pod 之间的互斥关系。

  • requiredDuringSchedulingIgnoredDuringExecution:硬性规则,必须满足,否则 Pod 不会被调度。

  • labelSelector:匹配另一个 Deployment 的 Pod 标签。

  • topologyKey:设置为 kubernetes.io/hostname,表示基于节点的互斥。

验证

部署完成后,可以使用以下命令查看 Pod 的调度情况:

kubectl get pods -o wide

这将显示每个 Pod 所在的节点,确保两个 Deployment 的 Pod 不在同一节点上。但此种部署方式需要保证节点不少于应用数,否则会出现pod无法调度的情况,比如集群只有1个节点,Deployment A成功调度到唯一节点上,那么Deployment A就无法成功调度;

通过以上配置,可以实现两个 Deployment 的 Pod 在主机级别互斥部署。

相关文章:

  • 硬件驱动——51单片机:寄存器、LED、动态数码管
  • Google Cloud Run 如何实现无服务器(Serverless)部署?
  • 受控组件非受控组件
  • 论文阅读:Deep Hybrid Camera Deblurring for Smartphone Cameras
  • 【工作记录】pytest使用总结
  • 深度学习中的并行策略:数据并行、流水并行与张量并行
  • DR-CAN 卡尔曼滤波笔记
  • Python库安装报错解决思路以及机器学习环境配置详细方案
  • 机器学习中说的正向传递和反向传递是什么意思
  • NFS网络文件共享服务
  • mysql-8.0.40-1.el7.x86_64.rpm Linux MySQL 保姆级详细安装教程(2025版)
  • 【技术报告】谷歌开源多模态大模型 Gemma-3
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(59)定风珠稳调度 - 任务调度器(贪心桶思想)
  • 鸿蒙开发:自定义一个搜索模版
  • lspci命令
  • ctfshow-web-351-360-ssrf-wp
  • PyTorch使用-张量的创建
  • K8s集群的环境部署
  • ⭐算法OJ⭐两数之和【哈希表】(C++ 实现)Two Sum
  • 三. Zabbix安装
  • 戛纳参赛片《爱丁顿》评论两极,导演:在这个世道不奇怪
  • 中国古代文学研究专家、南开大学教授李剑国逝世
  • 杨国荣︱以经验说事:思想史研究中一种需要反思的现象
  • “大国重器”、新型反隐身雷达……世界雷达展全面展示尖端装备
  • 广东高州发生山体滑坡,造成2人遇难4人送医救治1人失联
  • “马上涨价”再到“吞下关税”,美政策让沃尔玛“输两次”