Создайте кластер Amazon EKS с jenkins-x, и cluster-autoscaler выдает ошибку входа на четное количество узлов

Я создаю кластер Amazon EKS, используя jenkins-x с:

jx create cluster eks -n demo --node-type=t3.xlarge --nodes=1 --nodes-max=5 --nodes-min=1 --skip-installation

После этого я добавляю IAM-политику кластера-автомасштабирования для автоматического обнаружения и добавленные теги в группу автомасштабирования и созданный экземпляр, согласно это руководство.

Я добавляю роли rbac для румпеля и автомасштабирования с помощью этого файла (kubectl create -f rbac-config.yaml):

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: autoscaler
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: autoscaler
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: autoscaler
    namespace: kube-system

Установил румпель:

helm init --service-account tiller

и установил автомасштабирование кластера:

helm install stable/cluster-autoscaler -f cluster-autoscaler-values.yaml --name cluster-autoscaler --namespace kube-system

Затем устанавливаю систему jenkins-x:

jx install --provider=eks --domain=mydomain.com --default-environment-prefix=demo --skip-setup-tiller

Я просто принимаю все значения по умолчанию для вопросов (для меня создан nginx-ingress).

Затем я создаю приложение по умолчанию spring-boot-rest-prometheus:

jx create quickstart

снова, принимая все значения по умолчанию. Это отлично работает, приложение подобрано jenkins скомпилировано, что я вижу в:

http://jenkins.jx.mydomain.com

и я могу связаться с приложением через:

http://spring-boot-rest-prometheus.jx-staging.mydomain.com

Затем я запускаю тест, чтобы убедиться, что автомасштабирование работает правильно, поэтому я открываю файл в charts/spring-boot-rest-prometheus/values.yaml и меняю replicaCount: 1 на replicaCount: 8. Зафиксируйте и нажмите. Это запускает конвейер Jenkins и запускает новый узел, потому что автомасштабирование видит, что на первом узле недостаточно ресурсов процессора.

После появления второго узла я больше не могу связаться с Дженкинсом и приложением через доменные имена. Так что по какой-то причине мой вход больше не работает.

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

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

Что вызывает сбой входа для четного числа узлов? Как я могу изучить эту проблему дальше?

Журналы и дескрипторы для всех входящих частей размещены здесь.


person Martijn Burger    schedule 03.12.2018    source источник
comment
Странный! Пун намеревался :) kubectl describe 'Если бы вы вошли, чтобы посмотреть, что там происходит, было бы хорошим началом.   -  person Clorichel    schedule 03.12.2018
comment
Размещенный журнал от контроллера входящего трафика и описание всех его частей здесь: gist.github.com/martijnburger/ 1e842e6c1d018044e4f01f9054f9bfb6   -  person Martijn Burger    schedule 04.12.2018


Ответы (2)


Вы можете отладить это, просмотрев AWS ASG (AutoScaling Group) и целевые экземпляры балансировщика нагрузки (ELB).

Вы можете видеть, что экземпляры добавляются в ASG:

ASG

Затем вы можете увидеть в своем балансировщике нагрузки, что экземпляры находятся в эксплуатации:

В эксплуатации

Может случиться так, что некоторые экземпляры из четного числа не находятся в эксплуатации. Они случайно находятся в другой зоне доступности? Удаляются ли из ELB «нечетные» числа? на них не пересылается трафик?

person Rico    schedule 03.12.2018
comment
Ах! Вызывается вопросом "А они случайно не находятся в разных зонах доступности?" да. Совершенно верно. Это проблема для ELB? - person Martijn Burger; 04.12.2018
comment
Вот как включить балансировку нагрузки между зонами. Я посмотрю завтра, если в этом проблема. docs.aws. amazon.com/elasticloadbalancing/latest/network/ - person Martijn Burger; 04.12.2018
comment
Только могло случиться так, что трафик не перенаправляется на те, которые находятся в другой авзоне, они в обслуживании? Его надо поддерживать. Обратите внимание, что AWS взимает плату за трафик между разными av-зонами. - person Rico; 04.12.2018
comment
Я думаю, что нашел его, просто нужно проверить, но этот отчет об ошибке и открытый PR говорят все, что я думаю: github.com/kubernetes/ingress-nginx/issues/3254 github .com / kubernetes / kubernetes / pull / 61064. - person Martijn Burger; 04.12.2018
comment
Это делает за меня диаграмма управления nginx-ingress. :) - person Martijn Burger; 04.12.2018
comment
Сделать NLB многозонным проблему не решило. Однако я вижу нездоровые цели после масштабирования до двух узлов. После удаления службы входа и ее воссоздания цели снова становятся здоровыми. Но для этого также необходимо обновить CNAME в Route 53. Я подхожу ближе, но белого дыма все еще нет. - person Martijn Burger; 04.12.2018

FWIW, похоже, я столкнулся с этой проблемой:

https://github.com/kubernetes/kubernetes/issues/64148

Все еще проверяю в AWS Support, относится ли это и к EKS, но это кажется очень правдоподобным.

person Martijn Burger    schedule 14.12.2018