Создание кластера Amazon EKS с помощью jenkins-x и cluster-autoscaler дает сбой при входе на четное количество узлов - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю кластер 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

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

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 и раскручивает новый узел, потому что автоскалер видит, что на первом узле недостаточно ресурсов ЦП.

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

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

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

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

0 голосов
/ 04 декабря 2018

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

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

ASG

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

In service

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

...