Kubernetes: раскрывайте только один модуль StatefulSet

Для набора StateFul я могу получить доступ к его модулям через внутреннюю безголовую службу.

Я думаю, было бы разумно иметь простой способ экспонировать также отдельные модули извне (поскольку модули обычно имеют состояние и, следовательно, балансировка нагрузки по ним не имеет смысла).

Пока я не нашел прямого способа сделать это. Даже выполнение kubectl expose pod pod-1 --type NodePort дает мне сервис, который балансирует по всем модулям. Есть ли причина, по которой это так, или есть хороший способ получить доступ к отдельным модулям.


person Christof Tinnes    schedule 12.08.2017    source источник
comment
Вы используете несколько экземпляров полного набора состояний в своем кластере?   -  person sfgroups    schedule 12.08.2017
comment
У меня есть несколько реплик (например, 3), то есть pod-1, pod-2 и pod-3.   -  person Christof Tinnes    schedule 13.08.2017


Ответы (2)


Вы можете выставить конкретный Pod в StatefulSet извне, сопоставив метку statefulset.kubernetes.io/pod-name.

Например, если ваш StatefulSet называется app и вы хотите указать порт 80 из первого Pod как Service:

apiVersion: v1
kind: Service
metadata:
  name: app-0
spec:
  type: LoadBalancer
  selector:
    statefulset.kubernetes.io/pod-name: app-0
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
person jbg    schedule 22.05.2021

Я не вижу способа распределить нагрузку на один модуль. Если вы хотите, чтобы клиент сохранил этот сеанс с одним модулем, вы можете определить службу sessionAffinity: ClientIP. это отправит установленный клиентский трафик в тот же модуль.

person sfgroups    schedule 15.08.2017
comment
Изнутри моего кластера я могу получить доступ к каждому модулю отдельно. Итак, я не понимаю, почему это не имеет смысла для доступа из-за пределов Кластера. - person Christof Tinnes; 24.08.2017
comment
Я предполагаю, что внутри кластера вы правильно используете IP-адрес POD для доступа к модулям? или вы используете служебный IP-доступ к модулю? - person sfgroups; 24.08.2017
comment
На самом деле, я получаю доступ к модулям через безголовую службу по их DNS-именам. Так что, в конце концов, я думаю, это должен быть IP-адрес службы? - person Christof Tinnes; 28.08.2017