不同namespace的pod反亲和配置

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 不同namespace的pod反亲和配置

业务需求 两pod互斥,增加系统健壮性

pod1:

-name:prometheus-dep
-namespace:prometheus


pod2:

-name:prometheus-server
-namespace:prometheus-server-dep

测试结论

查看两个pod的label 备用

kubectl -n <ns> describe pods  <pods-name> |grep Labels

pod1.yaml

配置模块均配置对方pod的信息

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mynginx-1 
  namespace: dev-1
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mynginx-1 
  template:
    metadata:
      labels:
        app: mynginx-1 
      containers:
      - name: mycontainer-1
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: nginx
          containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html/"
          name: nginx-vol
      affinity: ##调度策略配置模块
        podAntiAffinity:   ##类型pod反亲和
          requiredDuringSchedulingIgnoredDuringExecution: ##硬需求
          - labelSelector: ##标签匹配
              matchExpressions:
              - key: app  ##刚刚查到另一个pod的标签 key值
                operator: In  ##匹配规则
                values: [mynginx-test] ##对应的value值
            topologyKey: kubernetes.io/hostname ##固定字段控制域
            namespaces: [dev-2] ##互斥pod的名存空间


pod2.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mynginx-test 
  namespace: dev-2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mynginx-test 
  template:
    metadata:
      labels:
        app: mynginx-test 
    spec:
      containers:
      - name: mycontainer-2
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: nginx
          containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html/"
          name: nginx-vol
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector: 
              matchExpressions:
              - key: app ##对应标签的key
                operator: In
                values: [mynginx-1] ##对应标签的value
            topologyKey: kubernetes.io/hostname 
            namespaces: [dev-1] ##对方pod的名称空间
      volumes:
      - name: nginx-vol
        hostPath:
          path: /data/svc/web1-html


这样两个pod都配置互斥的好处是:不会因为启动顺序而失效,无论谁先启动都会检测 分配到合适的node


注意:唯一缺陷


当dep启动的pod 副本数大于或等于 集群 node数量时,可能会出现每个pod分布在每个node节点上的情况,导致另一个pod 不能分配工作节点,一直处于pending状态

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
6月前
|
Prometheus Kubernetes 监控
Kubernetes 的 NameSpace 无法删除应该怎么办?
Kubernetes 的 NameSpace 无法删除应该怎么办?
|
11月前
|
Kubernetes Nacos 数据中心
k8s(9)Namespace(命名空间)
Namespace(命名空间)
237 0
|
编译器 C语言 C++
【C++】命名空间 ( namespace )
【C++】命名空间 ( namespace )
|
2月前
|
C语言 C++
C++(六)Namespace 命名空间
命名空间(Namespace)是为了解决大型项目中命名冲突而引入的机制。在多库集成时,不同类库可能包含同名函数或变量,导致冲突。C++通过语法形式定义了全局无名命名空间,并允许对全局函数和变量进行作用域划分。命名空间支持嵌套与合并,便于协同开发。其使用需谨慎处理同名冲突。
|
5月前
|
C++
C++命名空间(namespace)的使用
C++命名空间(namespace)的使用
|
6月前
|
C++
C++命名空间(Namespace)详解
C++命名空间(Namespace)详解
|
6月前
|
编译器 数据安全/隐私保护 C语言
C++ 之命名空间namespace【详解】
C++ 之命名空间namespace【详解】
103 4
|
JSON Kubernetes 数据中心
k8s--命名空间 namespaces
k8s--命名空间 namespaces
|
Kubernetes 容器 Perl
kubernetes强制删除pod、namespace等资源
kubernetes强制删除pod、namespace等资源
980 0
|
11月前
|
存储 Kubernetes Docker
volume 、namespace
volume 、namespace