Выбор услуги только из одного модуля одного состояния
Можно ли создать сервис, который указывает только на модуль, созданный набором состояний?
Решения, которые заставляют меня быть:
- Поставить в качестве поставщика от имени стручка.
- Динамические метки с названием стручка.
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>