6

可以创建一个只指向一个由 statefulset 创建的 pod 的服务吗?

让我的解决方案是:

  • 代表 pod 作为提供者。
  • 带有 pod 名称的动态标签。
4

2 回答 2

9

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

从文档中:

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

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

于 2018-01-24T01:00:39.337 回答
4

您可以使用 statefulset pod 的序数值来标记 pod。

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

示例初始化容器:

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>
于 2018-01-24T16:49:18.333 回答