versión de kubeadm : 1.10.2
Medio ambiente :
Hace un par de meses creé un clúster HA de kubernetes 1.9.3 usando kubeadm 1.9.3
, siguiendo la documentación 'oficial' https://kubernetes.io/docs/setup/independent/high-availability/ , configurando el etcd
HA clúster que lo aloja en los nodos maestros usando pods estáticos
Quería actualizar mi clúster a k8s 1.10.2
usando el último kubeadm
; después de actualizar kubeadm
, al ejecutar kubeadm upgrade plan
, recibí el siguiente error:
[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
Investigué el problema y encontré las 2 causas raíz:
kubeadm
no identifica el clúster etcd
como TLS habilitadoLa guía instruye para usar el siguiente comando en el pod estático 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
cheques (aquí: https://github.com/kubernetes/kubernetes/blob/release-1.10/cmd/kubeadm/app/util/etcd/etcd.go#L56) si etcd
tiene TLS habilitado al verificar la presencia de los siguientes indicadores en el comando de pod estático.
"--cert-file=",
"--key-file=",
"--trusted-ca-file=",
"--client-cert-auth=",
"--peer-cert-file=",
"--peer-key-file=",
"--peer-trusted-ca-file=",
"--peer-client-cert-auth=",
pero como las banderas --client-cert-auth
y --peer-client-cert-auth
se usan en las instrucciones sin ningún parámetro (siendo booleanos) kubeadm
no reconoció que el clúster etcd
tuviera TLS activado.
ARREGLO PERSONAL:
Actualicé mi comando de pod estático etcd
para usar - --client-cert-auth=true
y - --peer-client-cert-auth=true
ARREGLO GENERAL:
Actualice las instrucciones para usar --client-cert-auth=true
y --peer-client-cert-auth=true
y relaje los cheques kubeadm usando "--peer-cert-file"
y "--peer-key-file"
(sin los iguales)
kubeadm
no usó los certificados correctosdespués de arreglar el punto 1, el problema persistía ya que kubeadm
no estaba usando los certificados correctos.
Siguiendo la guía de kubeadm HA, de hecho, los certificados creados son ca.pem
ca-key.pem
peer.pem
peer-key.pem
client.pem
client-key.pem
pero el último kubeadm
espera ca.crt
ca.key``peer.crt
peer.key``healthcheck-client.crt
healthcheck-client.key
lugar.
Las claves de configuración maestra kubeadm-config
etcd.caFile
, etcd.certFile
y etcd.keyFile
se ignoran.
ARREGLO PERSONAL:
Se cambió el nombre del certificado .pem
a su .crt
y .key
y se actualizó la configuración de pod estática etcd
para usarlos.
ARREGLO GENERAL:
Utilice los valores kubeadm-config
data.caFile
, data.certFile
y data.keyFile
, infiera los certificados correctos de la definición de pod estática de etcd (ruta de pod + volúmenes hostPath) y / o cree un nuevo certificado de cliente temporal para usar durante la actualización.
El plan de actualización debería haberse ejecutado correctamente
cree un clúster de k8s ha usando kubeadm 1.9.3
siguiendo https://kubernetes.io/docs/setup/independent/high-availability/ e intente actualizarlo a k8s >= 1.10
usando el último kubeadm
este problema parece estar solucionado en kubeadm 1.10.3
, aunque no actualizará automáticamente el pod estático etcd
ya que lo reconoce como 'externo'
Estoy usando kubeadm 1.10.3
y tengo los mismos problemas. Mi clúster es 1.10.2 con un etcd seguro externo
@brokenmass ¿Los valores de sus correcciones personales a la segunda causa que observa se ven así:
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/etcd/healthcheck-client.crt
keyFile: /etc/kubernetes/pki/etcd/healthcheck-client.key
@detiber, ¿puedes ayudar por favor?
@FloMedja
en mi caso, los valores se ven así:
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/client.pem
keyFile: /etc/kubernetes/pki/etcd/client-key.pem
y 1.10.3 funciona correctamente
@brokenmass Entonces, con kubeadm 1.10.3 todo funciona sin necesidad de sus arreglos personales. En este caso, estoy un poco confundido. Tengo kubeadm 1.10.3 pero el mismo mensaje de error que mencionas en este informe de error. Verificaré dos veces mi configuración puede ser que cometa algunos errores en otro lugar
agregue aquí (o únase a kubernetes slack y envíeme un mensaje directo) su kubeadm-config, etcd static pods yml y la salida completa de kubeadm upgrade plan
Mis disculpas, acabo de ver esto. @chuckha hizo el trabajo original para los documentos estáticos de HA, etcd, trabajaré con él durante los próximos días para ver si podemos ayudar a corregir las actualizaciones de HA.
@detiber gracias. el plan de actualización finalmente funciona. pero me enfrento a algunos problemas de condiciones de carrera cuando intento actualizar el clúster. a veces funciona a veces tengo el mismo error que kubernetes / kubeadm / issues / 850 . kubeadm se encuentra en condición de carrera cuando intenta reiniciar un pod en un nodo.
Me encontré con algunos inconvenientes al obtener una configuración de entorno de prueba para esto hoy y me estoy quedando sin tiempo antes de que comience mi fin de semana. Lo retomaré a principios de la semana que viene.
/ asignar @chuckha @detiber
@chuckha @detiber @stealthybox ¿ alguna actualización sobre esto?
Por lo tanto, la actualización de HA de 1.9-> 1.10 no fue una ruta admitida ni examinada.
Actualmente estamos en progreso en la actualización de nuestros documentos de mantenimiento para 1.11-> 1.12 que planeamos mantener en el futuro.