与Pod一起自动创建服务

时间:2019-01-03 15:39:39

标签: kubernetes

我有一个Kubernetes场景,我将需要部署3个Redis服务器(荚),并且每个服务器都必须具有ClusterIP服务。像这样的东西

  • RedisClusterIP1-> RedisPod1
  • RedisClusterIP2-> RedisPod2
  • RedisClusterIP3-> RedisPod3

我有如下的部署计划,但是您可以看到它正在手动创建ClusterIP服务,并将其中的一个绑定到所有pod。

是否有任何方法可以设置部署计划,它将与Pods创建相同数量的服务?

我检查了deploymentsreplica sets,但无法确定是否已经存在某些东西。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: redisharedis
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: redisharedis
    spec:
      containers:
        - name: redisharedis
          image: aozdemir/redisharedis:v6
          resources:
            limits:
              cpu: "1"
              memory: "800Mi"
            requests:
              cpu: "0.1"
              memory: "200Mi"
          ports:
            - containerPort: 6379


---
apiVersion: v1
kind: Service
metadata:
  name: redisharedis-service
  labels:
    name: redisharedis-service
spec:
  ports:
    - port: 6379
      targetPort: 6379
      protocol: TCP
  selector:
    app: redisharedis
  type: ClusterIP

1 个答案:

答案 0 :(得分:2)

如果您将Redis集群部署为KEEP FIRST/LAST而不是Statefulset,则可以这样做。在Kubernetes 1.9+中,StatefulSet自动在其每个Pod上添加Pod名称作为标签,因此您可以像这样启用Service-Per-Pod:

deployment

您需要在kubernetes集群中安装apiVersion: apps/v1beta2 kind: StatefulSet metadata: annotations: service-per-pod-label: "statefulset.kubernetes.io/pod-name" service-per-pod-ports: "80:8080" 才能为每个Pod安装一项服务。请参考以下链接以获取详细说明:

  

https://github.com/GoogleCloudPlatform/metacontroller/tree/master/examples/service-per-pod