Kubernetes autoscaler на aws не работает

Я пытаюсь настроить Kubernetes автоматическое масштабирование с Amazon AWS, как описано здесь: ДОКУМЕНТЫ, но в журналах модуля кластер-автоматическое масштабирование появляется эта ошибка:

E0411 09:23:25.529212   1 static_autoscaler.go:118] Failed to update node registry: RequestError: send request failed caused by: Post https://autoscaling.us-west-2a.amazonaws.com/: dial tcp: lookup autoscaling.us-west-2a.amazonaws.com on 10.96.0.10:53: no such host

Context:

Я создал группу AWS Autoscaling с именем KubeАвтомасштаб из Launch Configration с моим настраиваемым экземпляром AMI, который установил сервер Ubuntu 16.04 LTS (HVM) и Docker с Kubernetes (просто необработанная установка).

В AWS Autoscaling Group я поставил минимум 2 экземпляра и максимум 5 экземпляров (они находятся в регионе us-west-2a), и я вошел в систему на одном из этих 2 и настроил кластер Kubernetes, вошел в другой экземпляр и добавил его. для создания кластера и повторного входа в основной (первый) экземпляр запустите Autoscaler с конфигурацией:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-addon: cluster-autoscaler.addons.k8s.io
    k8s-app: cluster-autoscaler
  name: cluster-autoscaler
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: cluster-autoscaler
  labels:
    k8s-addon: cluster-autoscaler.addons.k8s.io
    k8s-app: cluster-autoscaler
rules:
- apiGroups: [""]
  resources: ["events","endpoints"]
  verbs: ["create", "patch"]
- apiGroups: [""]
  resources: ["pods/eviction"]
  verbs: ["create"]
- apiGroups: [""]
  resources: ["pods/status"]
  verbs: ["update"]
- apiGroups: [""]
  resources: ["endpoints"]
  resourceNames: ["cluster-autoscaler"]
  verbs: ["get","update"]
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["watch","list","get","update"]
- apiGroups: [""]
  resources: ["pods","services","replicationcontrollers","persistentvolumeclaims","persistentvolumes"]
  verbs: ["watch","list","get"]
- apiGroups: ["extensions"]
  resources: ["replicasets","daemonsets"]
  verbs: ["watch","list","get"]
- apiGroups: ["policy"]
  resources: ["poddisruptionbudgets"]
  verbs: ["watch","list"]
- apiGroups: ["apps"]
  resources: ["statefulsets"]
  verbs: ["watch","list","get"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["watch","list","get"]

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  name: cluster-autoscaler
  namespace: kube-system
  labels:
    k8s-addon: cluster-autoscaler.addons.k8s.io
    k8s-app: cluster-autoscaler
rules:
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["create"]
- apiGroups: [""]
  resources: ["configmaps"]
  resourceNames: ["cluster-autoscaler-status"]
  verbs: ["delete","get","update"]

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: cluster-autoscaler
  labels:
    k8s-addon: cluster-autoscaler.addons.k8s.io
    k8s-app: cluster-autoscaler
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-autoscaler
subjects:
  - kind: ServiceAccount
    name: cluster-autoscaler
    namespace: kube-system

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: cluster-autoscaler
  namespace: kube-system
  labels:
    k8s-addon: cluster-autoscaler.addons.k8s.io
    k8s-app: cluster-autoscaler
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cluster-autoscaler
subjects:
  - kind: ServiceAccount
    name: cluster-autoscaler
    namespace: kube-system

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cluster-autoscaler
  namespace: kube-system
  labels:
    app: cluster-autoscaler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cluster-autoscaler
  template:
    metadata:
      labels:
        app: cluster-autoscaler
    spec:
      serviceAccountName: cluster-autoscaler
      containers:
        - image: k8s.gcr.io/cluster-autoscaler:v0.6.0
          name: cluster-autoscaler
          resources:
            limits:
              cpu: 100m
              memory: 300Mi
            requests:
              cpu: 100m
              memory: 300Mi
          command:
            - ./cluster-autoscaler
            - --v=4
            - --stderrthreshold=info
            - --cloud-provider=aws
            - --skip-nodes-with-local-storage=false
            - --nodes=2:5:KubeAutoscale
          env:
            - name: AWS_REGION
              value: us-west-2a
          volumeMounts:
            - name: ssl-certs
              mountPath: /etc/ssl/certs/ca-certificates.crt
              readOnly: true
          imagePullPolicy: "Always"
      volumes:
        - name: ssl-certs
          hostPath:
            path: "/etc/ssl/certs/ca-certificates.crt"
3
0
1 466
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас проблема с конфигурацией:

 env:
  - name: AWS_REGION
    value: us-west-2a

Ваш регион AWS - us-west-2, а зона AZ - us-west-2a. Вот почему, когда Autoscaling генерирует URL-адрес конечной точки автомасштабирования, результатом является https://autoscaling.us-west-2a.amazonaws.com/ вместо https://autoscaling.us-west-2.amazonaws.com/, что является правильным.

Чтобы исправить это, просто установите AWS_REGION на us-west-2 вместо us-west-2a.

Привет Антон. Спасибо за быстрый ответ, вы правы, это была проблема. Он исправлен, но теперь я получаю еще одну ошибку: Ошибка при проверке группы узлов для <ID-OF-MY-NODE>: Неверный идентификатор: ожидаемый формат aws: /// <зона> / <имя>, получено

Ivan Longin 11.04.2018 17:57

Проверьте параметры демона kubelet, параметр --cloud-provider=aws должен существовать. Если нет - просто добавьте его, это должно решить эту проблему. И не забудьте проверить роль узлов в IAM. По крайней мере, он должен разрешать доступ к тегам.

Anton Kostenko 11.04.2018 18:07

Антон, спасибо за помощь. Я добавил этот флаг в kubelet, но потом он потерпел неудачу, заявив, что AWS не нашла Cluster ID. Затем я добавил флаг --cloud-config с конфигурацией, которая имеет свойства KubernetesClusterTag, KubernetesClusterID и Zone, а затем сделал: kubelet --cloud-provider = aws --cloud-config = / etc / kubernetes / cloud-config.conf, который закончился со строкой: listen tcp 0.0.0.0:10255: bind: адрес уже используется ... и ошибка, о которой я упоминал ранее, повторяется (я думаю, потому что kubelet не обновлялся из-за этой последней строки об используемом адресе). Документация по этой теме очень скудная: /

Ivan Longin 11.04.2018 20:34

Ваш ответ сэкономил мне много времени.

beahacker 02.06.2018 10:38

Другие вопросы по теме