Kubeadm: Обновление Kubeadm до 1.10 не удается на кластере ha k8s / etcd

Созданный на 20 мая 2018  ·  13Комментарии  ·  Источник: kubernetes/kubeadm

ОТЧЕТ ОБ ОШИБКЕ

Версии

версия kubeadm: 1.10.2

Окружающая среда :

  • Версия Kubernetes : 1.9.3
  • Облачный провайдер или конфигурация оборудования : 3 x k8s master HA
  • ОС : RHEL7
  • Ядро : 3.10.0-693.11.6.el7.x86_64

Что случилось?

Пару месяцев назад я создал кластер HA kubernetes 1.9.3, используя kubeadm 1.9.3 , следуя «официальной» документации https://kubernetes.io/docs/setup/independent/high-availability/ , настроив etcd Кластер HA, размещающий его на главных узлах с использованием статических модулей

Я хотел обновить свой кластер до k8s 1.10.2 используя последнюю версию kubeadm ; после обновления kubeadm при запуске kubeadm upgrade plan я получил следующую ошибку:

[root@shared-cob-01 tmp]# kubeadm upgrade plan
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[upgrade/plan] computing upgrade possibilities
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.9.3
[upgrade/versions] kubeadm version: v1.10.2
[upgrade/versions] Latest stable version: v1.10.2
[upgrade/versions] FATAL: context deadline exceeded

Я исследую проблему и обнаружил 2 основные причины:

1) kubeadm не идентифицирует кластер etcd как включенный TLS

В руководстве предлагается использовать следующую команду в статическом модуле etcd

- etcd --name <name> \
  - --data-dir /var/lib/etcd \
  - --listen-client-urls http://localhost:2379 \
  - --advertise-client-urls http://localhost:2379 \
  - --listen-peer-urls http://localhost:2380 \
  - --initial-advertise-peer-urls http://localhost:2380 \
  - --cert-file=/certs/server.pem \
  - --key-file=/certs/server-key.pem \
  - --client-cert-auth \
  - --trusted-ca-file=/certs/ca.pem \
  - --peer-cert-file=/certs/peer.pem \
  - --peer-key-file=/certs/peer-key.pem \
  - --peer-client-cert-auth \
  - --peer-trusted-ca-file=/certs/ca.pem \
  - --initial-cluster etcd0=https://<etcd0-ip-address>:2380,etcd1=https://<etcd1-ip-address>:2380,etcd2=https://<etcd2-ip-address>:2380 \
  - --initial-cluster-token my-etcd-token \
  - --initial-cluster-state new

kubeadm >= 1.10 проверяет (здесь: https://github.com/kubernetes/kubernetes/blob/release-1.10/cmd/kubeadm/app/util/etcd/etcd.go#L56) if etcd включает TLS, проверяя наличие следующих флагов в команде static pod.

"--cert-file=",
"--key-file=",
"--trusted-ca-file=",
"--client-cert-auth=",
"--peer-cert-file=",
"--peer-key-file=",
"--peer-trusted-ca-file=",
"--peer-client-cert-auth=",

но поскольку флаги --client-cert-auth и --peer-client-cert-auth используются в инструкциях без каких-либо параметров (являются логическими), kubeadm не распознал кластер etcd имеющий TLS включено.

ЛИЧНОЕ ИСПРАВЛЕНИЕ:
Я обновил свою команду etcd static pod, чтобы использовать - --client-cert-auth=true и - --peer-client-cert-auth=true

ОБЩЕЕ ИСПРАВЛЕНИЕ:
Обновите инструкции, чтобы использовать --client-cert-auth=true и --peer-client-cert-auth=true и ослабьте проверки kubeadm, используя "--peer-cert-file" и "--peer-key-file" (без равенства)

2) kubeadm не использовал правильные сертификаты

после исправления точки 1 проблема все еще сохранялась, поскольку kubeadm не использовал правильные сертификаты.
Фактически, следуя руководству kubeadm HA, созданные сертификаты имеют вид ca.pem ca-key.pem peer.pem peer-key.pem client.pem client-key.pem но последний kubeadm healthcheck-client.key вместо этого ожидает ca.crt ca.key``peer.crt peer.key``healthcheck-client.crt healthcheck-client.key .
Ключи kubeadm-config MasterConfiguration etcd.caFile , etcd.certFile и etcd.keyFile игнорируются.

ЛИЧНОЕ ИСПРАВЛЕНИЕ:
Сертификат .pem переименован в их эквивалент .crt и .key и обновлена ​​статическая конфигурация модуля etcd для их использования.

ОБЩЕЕ ИСПРАВЛЕНИЕ:
Используйте значения kubeadm-config data.caFile , data.certFile и data.keyFile , выведите правильные сертификаты из определения статического модуля etcd (путь модуля + путь хоста томов) и / или создайте новый временный сертификат клиента для использования во время обновления.

Чего вы ожидали?

План обновления должен был быть выполнен правильно

Как это воспроизвести (максимально минимально и точно)?

создайте кластер k8s ha, используя kubeadm 1.9.3 следуя https://kubernetes.io/docs/setup/independent/high-availability/, и попробуйте обновить его до k8s >= 1.10 используя последнюю версию kubeadm

areHA areUX areupgrades documentatioimprovement kinbug prioritimportant-soon

Все 13 Комментарий

эта проблема, похоже, исправлена ​​в kubeadm 1.10.3 , хотя он не будет автоматически обновлять статический модуль etcd поскольку он распознает его как «внешний»

Я использую kubeadm 1.10.3 и имею те же проблемы. Мой кластер 1.10.2 с внешним безопасным etcd

@brokenmass Значения ваших личных исправлений для второй причины, которую вы заметили, выглядят следующим образом:

  caFile: /etc/kubernetes/pki/etcd/ca.crt
  certFile: /etc/kubernetes/pki/etcd/healthcheck-client.crt
  keyFile: /etc/kubernetes/pki/etcd/healthcheck-client.key

@detiber, не могли бы вы помочь?

@FloMedja
в моем случае значения выглядят так:

  caFile: /etc/kubernetes/pki/etcd/ca.pem
  certFile: /etc/kubernetes/pki/etcd/client.pem
  keyFile: /etc/kubernetes/pki/etcd/client-key.pem

и 1.10.3 работает правильно

@brokenmass Итак, с kubeadm 1.10.3 все работает без каких-либо исправлений ваших личных данных. В этом случае я немного запутался. У меня kubeadm 1.10.3, но то же сообщение об ошибке, которое вы упомянули в этом отчете об ошибке. Я дважды проверю свою конфигурацию, возможно, я сделаю некоторые ошибки в другом месте

добавьте сюда (или присоединитесь к kubernetes slack и отправьте мне прямое сообщение) ваш kubeadm-config, etcd static pods yml и полный вывод kubeadm upgrade plan

Мои извинения, я только сейчас это вижу. @chuckha выполнил первоначальную работу для документации static-pod HA etcd, я буду работать с ним в течение следующих нескольких дней, чтобы посмотреть, сможем ли мы помочь исправить обновления HA.

@detiber спасибо. план обновления наконец-то заработал. но я сталкиваюсь с некоторыми проблемами условий гонки при попытке обновить кластер. иногда это срабатывает, иногда у меня та же ошибка, что и у kubernetes / kubeadm / issues / 850 . kubeadm попадает в состояние гонки при попытке перезапустить под на одном узле.

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

/ назначить @chuckha @detiber

@chuckha @detiber @stealthybox есть ли обновления по этому

Таким образом, обновление 1.9-> 1.10 HA не было поддерживаемым или проверенным путем.

В настоящее время мы работаем над обновлением нашей документации для версий 1.11 -> 1.12, которую мы планируем сохранить в будущем.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги