version de kubeadm: 1.10.2
Environnement :
Il y a quelques mois, j'ai créé un cluster kubernetes 1.9.3 HA en utilisant kubeadm 1.9.3
, en suivant la documentation `` officielle '' https://kubernetes.io/docs/setup/independent/high-availability/ , en configurant le etcd
Cluster HA qui l'héberge sur les nœuds maîtres à l'aide de pods statiques
Je voulais mettre à niveau mon cluster vers k8s 1.10.2
utilisant la dernière kubeadm
; après la mise kubeadm
jour de kubeadm upgrade plan
, j'ai eu l'erreur suivante:
[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
J'ai enquêté sur le problème et trouvé les 2 causes profondes:
kubeadm
n'identifie pas le cluster etcd
comme TLS activéLe guide demande d'utiliser la commande suivante dans le pod statique 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
chèques (ici: https://github.com/kubernetes/kubernetes/blob/release-1.10/cmd/kubeadm/app/util/etcd/etcd.go#L56) si etcd
a activé TLS en vérifiant la présence des indicateurs suivants dans la commande de pod statique.
"--cert-file=",
"--key-file=",
"--trusted-ca-file=",
"--client-cert-auth=",
"--peer-cert-file=",
"--peer-key-file=",
"--peer-trusted-ca-file=",
"--peer-client-cert-auth=",
mais comme les indicateurs --client-cert-auth
et --peer-client-cert-auth
sont utilisés dans les instructions sans aucun paramètre (étant des booléens) kubeadm
n'a pas reconnu le cluster etcd
pour avoir TLS activée.
CORRECTIF PERSONNEL:
J'ai mis à jour ma commande de pod statique etcd
pour utiliser - --client-cert-auth=true
et - --peer-client-cert-auth=true
CORRECTIF GÉNÉRAL:
Mettez à jour les instructions pour utiliser --client-cert-auth=true
et --peer-client-cert-auth=true
et relâchez les chèques kubeadm en utilisant "--peer-cert-file"
et "--peer-key-file"
(sans les égaux)
kubeadm
n'a pas utilisé les bons certificatsaprès avoir corrigé le point 1, le problème persistait car kubeadm
n'utilisait pas les bons certificats.
En suivant le guide HA de kubeadm, en fait, les certificats créés sont ca.pem
ca-key.pem
peer.pem
peer-key.pem
client.pem
client-key.pem
mais le dernier kubeadm
attend ca.crt
ca.key``peer.crt
peer.key``healthcheck-client.crt
healthcheck-client.key
place.
Les clés kubeadm-config
MasterConfiguration etcd.caFile
, etcd.certFile
et etcd.keyFile
sont ignorées.
CORRECTIF PERSONNEL:
Le certificat .pem
renommé en son équivalent .crt
et .key
et a mis à jour la configuration du pod statique etcd
pour les utiliser.
CORRECTIF GÉNÉRAL:
Utilisez les valeurs kubeadm-config
data.caFile
, data.certFile
et data.keyFile
, inférez les bons certificats à partir de la définition de pod statique etcd (chemin du pod + volumes hostPath) et / ou créez un nouveau certificat client temporaire à utiliser lors de la mise à niveau.
Le plan de mise à niveau doit avoir été exécuté correctement
créez un cluster ha k8s en utilisant kubeadm 1.9.3
suivant https://kubernetes.io/docs/setup/independent/high-availability/ et essayez de le mettre à jour à k8s >= 1.10
utilisant le dernier kubeadm
ce problème semble être résolu dans kubeadm 1.10.3
, même s'il ne mettra pas automatiquement à jour le pod statique etcd
car il le reconnaîtra comme `` externe ''
J'utilise kubeadm 1.10.3
et j'ai les mêmes problèmes. Mon cluster est 1.10.2 avec un etcd sécurisé externe
@brokenmass Est-ce que les valeurs de vos correctifs personnels pour la deuxième cause que vous remarquez ressemblent à ceci:
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/etcd/healthcheck-client.crt
keyFile: /etc/kubernetes/pki/etcd/healthcheck-client.key
@detiber pouvez-vous aider s'il vous plaît?
@FloMedja
dans mon cas, les valeurs ressemblent à:
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/client.pem
keyFile: /etc/kubernetes/pki/etcd/client-key.pem
et 1.10.3 fonctionne correctement
@brokenmass Donc, avec kubeadm 1.10.3, tout fonctionne sans avoir besoin de vos correctifs personnels. Dans ce cas, je suis un peu confus. J'ai kubeadm 1.10.3 mais le même message d'erreur que vous mentionnez dans ce rapport de bogue. Je vais vérifier ma configuration peut-être que je fais des erreurs ailleurs
ajoutez ici (ou rejoignez kubernetes slack et envoyez-moi un message direct) vos pods statiques kubeadm-config, etcd yml et la sortie complète de kubeadm upgrade plan
Mes excuses, je vois ça maintenant. @chuckha a fait le travail original pour les docs HA etcd de static-pod, je travaillerai avec lui au cours des prochains jours pour voir si nous pouvons aider à redresser les mises à niveau HA.
@detiber vous remercie. le plan de mise à niveau fonctionne enfin. mais je suis confronté à des problèmes de conditions de concurrence lorsque je tente de mettre à niveau le cluster. parfois cela fonctionne parfois j'ai la même erreur que kubernetes / kubeadm / issues / 850 . kubeadm se heurte à une condition de concurrence lors de la tentative de redémarrage d'un pod sur un nœud.
J'ai rencontré des problèmes pour obtenir une configuration d'environnement de test pour cela aujourd'hui et je manque de temps avant le début de mon week-end. Je reviendrai là-dessus au début de la semaine prochaine.
/ assign @chuckha @detiber
@chuckha @detiber @stealthybox une mise à jour à ce sujet?
Ainsi, la mise à niveau 1.9-> 1.10 HA n'était pas un chemin pris en charge ou vérifié.
Nous sommes actuellement en train de mettre à jour notre maintenance de nos documents pour 1.11-> 1.12 que nous prévoyons de maintenir à l'avenir.