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

相关推荐
星梦清河2 分钟前
01 微服务
微服务·云原生·架构
http阿拉丁神猫8 分钟前
kubernetes知识点汇总43-47
云原生·容器·kubernetes
迷藏49444 分钟前
**发散创新:基于角色与属性的混合权限模型在微服务架构中的实战落地**在现代分布式系统中,
java·python·微服务·云原生·架构
张3231 小时前
Kubernetes服务发现
云原生·kubernetes
七七powerful1 小时前
K8s 工具安装文档 — Harbor + ArgoCD
容器·kubernetes·argocd
立莹Sir1 小时前
云原生实战:从零搭建企业级K8s环境
云原生·容器·kubernetes
立莹Sir1 小时前
云原生全解析:从概念到实践,Java技术栈如何拥抱云原生时代
java·开发语言·云原生
modelmd1 小时前
Docker 重命名数据卷
运维·docker·容器
Skilce1 小时前
K8S部署
linux·运维·服务器·容器·kubernetes
张3231 小时前
kubernetes Pod难点
云原生·容器·kubernetes