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 在主机级别互斥部署。

相关推荐
薪火铺子20 小时前
微服务认证方案对比与选型
微服务·云原生·架构
运维全栈笔记21 小时前
K8S部署Redis高可用全攻略:1主2从3哨兵架构实战
redis·docker·云原生·容器·架构·kubernetes·bootstrap
尘世壹俗人21 小时前
使用K8s部署模型
kubernetes
AI攻城狮1 天前
AI Agent 从上线到删库跑路始末
云原生
AI木马人1 天前
9.人工智能实战:GPU 服务如何上 Kubernetes?从单机部署到 K8s + NVIDIA Device Plugin + HPA 的生产级改造
人工智能·容器·kubernetes
码点滴1 天前
告别显存焦虑:PagedAttention 如何将大模型吞吐量提升 4 倍?
人工智能·架构·kubernetes·大模型·pagedattention
键盘鼓手苏苏1 天前
Kubernetes 容器安全最佳实践
云原生·kubernetes·k8
Elastic 中国社区官方博客1 天前
Elasticsearch Serverless 中跨项目搜索(CPS)的工作原理
大数据·elasticsearch·搜索引擎·云原生·serverless
键盘鼓手苏苏1 天前
Kubernetes 安全最佳实践
云原生·kubernetes·k8
小妖同学学AI1 天前
云原生AI服务新范式:Jina Serve框架,让多模态大模型落地像搭积木一样简单
人工智能·云原生·jina