Выбор услуги только из одного модуля одного состояния

Можно ли создать сервис, который указывает только на модуль, созданный набором состояний?

Решения, которые заставляют меня быть:

  • Поставить в качестве поставщика от имени стручка.
  • Динамические метки с названием стручка.

2 ответа

Согласно Kubernetes 1.9 вы можете использовать: statefulset.kubernetes.io/pod-name

Из документации:

"Когда контроллер StatefulSet создает Pod, он добавляет метку statefulset.kubernetes.io/pod-name, которая устанавливается в качестве имени Pod. Эта метка позволяет вам прикрепить Сервис к определенному Pod в StatefulSet. "

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

Вы можете использовать порядковый номер statefulset pod для маркировки pod.

Я бы использовал kubectl в initContainer, чтобы пометить модули из пакетов, созданных с помощью statefulset, и использовать эту метку в спецификации селектора служб.

Пример начального контейнера:

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>
Другие вопросы по тегам