kubernetes每个节点创建一个服务的Pod

1. 问题场景

希望一个worker节点上仅部署同样的服务一个. 比如: kubernets有三个worker节点,三个节点部署N个副本的api服务, 为了提高服务效率希望加入缓存,需要为三个节点个部署一个redis服务, 这个时候我们定义这个redis服务副本为3, 但是如何设置一个节点仅部署一个redis服务呢?

2. 相关知识

  • 亲和性

    k8s设计了亲和性来配置pod和node, pod和pod的关系, 即:

  • 思路

    pod和node关系解决的pod选择node的场景, 这里不是解决本问题的关键, pod和pod的关系才是解决的关键, 只要让服务副本设置为3, 且每个node上redis的pod是互斥或者排他的选择即可, 如何设置同一个node上的pod互斥呢? 通过Inter-pod affinity and anti-affinity 可以知道需要指定: topologyKey

  • 具体配置结果

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: redis
    spec:
      nodeSelector:
        matchLabels:
          service: mirage
      selector:
        matchLabels:
          service: redis
      replicas: 3
      template:
        metadata:
          labels:
            service: redis
        spec:
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: service
                      operator: In
                      values:
                        - redis
                  topologyKey: kubernetes.io/hostname
          containers:
            - name: redis
              image: redis:latest
          ports:
            - containerPort: 3306
    

    解读上面的配置: 在Pod进行选择则node创建Pod的时候首先排除那些在该node上有redis pod的节点. 有点绕但是就是这样的逻辑.

3. 参考文档

转载于:https://my.oschina.net/jimmywa/blog/2986418

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值