仅从一个statefulset的一个pod中选择服务

时间:2018-01-08 12:32:38

标签: kubernetes google-kubernetes-engine statefulset

可以创建仅指向由状态集创建的窗格的服务吗?

让我的解决方案是:

  • 代表pod提供服务。
  • 带有pod名称的动态标签。

2 个答案:

答案 0 :(得分:6)

根据Kubernetes 1.9,你可以使用:statefulset.kubernetes.io/pod-name

来自文档:

  

"当StatefulSet控制器创建Pod时,它会添加一个标签,   statefulset.kubernetes.io/pod-name,设置为的名称   荚。此标签允许您将服务附加到特定的Pod中   StatefulSet。"

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-name-label

答案 1 :(得分:2)

您可以使用statefulset pod的序号值来标记窗格。

我会在initContainer中使用kubectl来标记由statefulset创建的pod中的pod,并在服务选择器规范中使用该标签。

示例init容器:

initContainers:
  - name: set-label
    image: lachlanevenson/k8s-kubectl:v1.8.5
    command:
      - sh
      - -c
      - '/usr/local/bin/kubectl label pod $POD_NAME select-id=${HOSTNAME##*-} --server=https://kubernetes.default --token=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt -n $POD_NAMESPACE'
    env:
      - name: POD_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace
      - name: POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name

示例服务选择器:

selector:
  app: my-app
  select-id: <0|1|2 ordinal value>