代码之家  ›  专栏  ›  技术社区  ›  Teoman shipahi

自动创建服务和播客

  •  1
  • Teoman shipahi  · 技术社区  · 6 年前

    我有一个kubernetes场景,需要部署3个redis服务器(pods),每个服务器都需要公开一个clusterip服务。类似的东西;

    • 重新发现1->重新发现1
    • 重新发现2->重新发现2
    • 再发现3->再发现3

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

    有没有什么方法可以设置部署计划,它将创建与pods相同数量的服务?

    我查过了 deployments replica 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 回复  |  直到 6 年前
        1
  •  2
  •   Prafull Ladha    6 年前

    如果将redis集群部署为 Statefulset 而不是 deployment 是的。在kubernetes 1.9+中,statefulset会自动将pod名称添加为其每个pod上的标签,因此您可以按如下方式启用每个pod的服务:

    apiVersion: apps/v1beta2
    kind: StatefulSet
    metadata:
      annotations:
        service-per-pod-label: "statefulset.kubernetes.io/pod-name"
        service-per-pod-ports: "80:8080"
    

    你需要安装 MetaController 在kubernetes集群中为每个pod安装一个服务。有关详细说明,请参阅以下链接:

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