44 Acciones del ciclo de vida #
Esta sección describe las acciones de gestión del ciclo de vida de los clústeres desplegados con SUSE Telco Cloud.
44.1 Exclusión del equilibrador de carga #
Hay muchas acciones del ciclo de vida que requieren que se vacíen los nodos. Durante el proceso de vaciado, todos los pods se trasladarán a otros nodos del clúster. Una vez finalizado el proceso de vaciado, el nodo no aloja ningún servicio y, por lo tanto, no debe recibir ningún tráfico. Se puede informar de esto a los equilibradores de carga, como MetalLB, aplicando una etiqueta al nodo:
node.kubernetes.io/exclude-from-external-load-balancers: "true"Para obtener más detalles, consulte la documentación de Kubernetes.
Para ver las etiqueta de todos los nodos de un clúster, puede ejecutar:
kubectl get nodes -o json | jq -r '.items[].metadata | .name, .labels'En el caso de las actualizaciones de clústeres descendentes, esto se puede automatizar anotando el RKE2ControlPlane en el clúster de gestión:
rke2.controlplane.cluster.x-k8s.io/load-balancer-exclusion="true"Se crea de inmediato una anotación en todos los objetos de máquina del clúster de gestión para ese RKE2ControlPlane.
pre-drain.delete.hook.machine.cluster.x-k8s.io/rke2-lb-exclusion: ""Con esta anotación en los objetos de la máquina, cualquier nodo del clúster descendente que esté programado para el vaciado obtendrá la etiqueta de nodo anterior adjunta antes del inicio del proceso de vaciado. La etiqueta se eliminará del nodo una vez que esté disponible y listo de nuevo.
44.2 Actualizaciones del clúster de gestión #
La actualización del clúster de gestión se describe en la documentación del
clúster de gestión de día 2 (Capítulo 36, Clúster de gestión).
44.3 Actualización de clústeres descendentes #
Para actualizar los clústeres descendentes hay que actualizar varios componentes. Las siguientes secciones describen el proceso de actualización de cada uno de los componentes.
Actualización del sistema operativo
Para este proceso, consulte la siguiente referencia (Sección 43.2, “Preparación de la imagen del clúster descendente para entornos conectados”) para crear la nueva imagen con una
nueva versión del sistema operativo. Con esta nueva imagen generada por
EIB, la siguiente fase de aprovisionamiento utiliza la
nueva versión operativa proporcionada. En el siguiente paso, la nueva imagen
se utiliza para actualizar los nodos.
Actualización del clúster RKE2
Los cambios necesarios para actualizar el clúster RKE2
utilizando el flujo de trabajo automatizado son los siguientes:
Cambie el bloque
RKE2ControlPlaneen el archivocapi-provisioning-example.yamlque se muestra en la siguiente sección (Sección 43.4, “Aprovisionamiento de clústeres descendentes con aprovisionamiento de red dirigida (nodo único)”):Especifique la estrategia
rolloutStrategydeseada.Cambie la versión del clúster
RKE2a la nueva versión sustituyendo${RKE2_NEW_VERSION}.
apiVersion: controlplane.cluster.x-k8s.io/v1beta1
kind: RKE2ControlPlane
metadata:
name: single-node-cluster
namespace: default
spec:
infrastructureRef:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: Metal3MachineTemplate
name: single-node-cluster-controlplane
version: ${RKE2_NEW_VERSION}
replicas: 1
rolloutStrategy:
type: "RollingUpdate"
rollingUpdate:
maxSurge: 0
serverConfig:
cni: cilium
rolloutStrategy:
rollingUpdate:
maxSurge: 0
registrationMethod: "control-plane-endpoint"
agentConfig:
format: ignition
additionalUserData:
config: |
variant: fcos
version: 1.4.0
systemd:
units:
- name: rke2-preinstall.service
enabled: true
contents: |
[Unit]
Description=rke2-preinstall
Wants=network-online.target
Before=rke2-install.service
ConditionPathExists=!/run/cluster-api/bootstrap-success.complete
[Service]
Type=oneshot
User=root
ExecStartPre=/bin/sh -c "mount -L config-2 /mnt"
ExecStart=/bin/sh -c "sed -i \"s/BAREMETALHOST_UUID/$(jq -r .uuid /mnt/openstack/latest/meta_data.json)/\" /etc/rancher/rke2/config.yaml"
ExecStart=/bin/sh -c "echo \"node-name: $(jq -r .name /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
ExecStartPost=/bin/sh -c "umount /mnt"
[Install]
WantedBy=multi-user.target
kubelet:
extraArgs:
- provider-id=metal3://BAREMETALHOST_UUID
nodeName: "localhost.localdomain"Cambie el bloque
Metal3MachineTemplatedel archivocapi-provisioning-example.yamlque se muestra en la siguiente sección (Sección 43.4, “Aprovisionamiento de clústeres descendentes con aprovisionamiento de red dirigida (nodo único)”):Cambie el nombre de la imagen y la suma de comprobación a la nueva versión generada en el paso anterior.
En la directiva
nodeReusedefina el valortruepara evitar crear un nuevo nodo.En la directiva
automatedCleaningModedefinametadatapara habilitar la limpieza automática del nodo.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: Metal3MachineTemplate
metadata:
name: single-node-cluster-controlplane
namespace: default
spec:
nodeReuse: True
template:
spec:
automatedCleaningMode: metadata
dataTemplate:
name: single-node-cluster-controlplane-template
hostSelector:
matchLabels:
cluster-role: control-plane
image:
checksum: http://imagecache.local:8080/${NEW_IMAGE_GENERATED}.sha256
checksumType: sha256
format: raw
url: http://imagecache.local:8080/${NEW_IMAGE_GENERATED}.rawAntes de aplicar el archivo
capi-provisioning-example.yaml, siempre es recomendable
informar a los equilibradores de carga externos (por ejemplo, MetalLB) sobre
los nodos que se están vaciando, para que no dirijan el tráfico a los nodos
que se encuentran en ese estado. Como se menciona en la sección Sección 44.1, “Exclusión del equilibrador de carga”, puede automatizar este proceso anotando
el RKE2ControlPlane en el clúster de gestión. En este ejemplo, se anota un
objeto RKE2ControlPlane llamado multinode-cluster:
kubectl annotate RKE2ControlPlane/multinode-cluster rke2.controlplane.cluster.x-k8s.io/load-balancer-exclusion="true"Verifique que los objetos de máquina se han anotado:
pre-drain.delete.hook.machine.cluster.x-k8s.io/rke2-lb-exclusion: ""Recopile las anotaciones de todos los objetos de máquina:
kubectl get machines -o json | jq -r '.items[].metadata | .name, .annotations'Sin estas anotaciones, los usuarios pueden sufrir mayores tiempos de respuesta de los servicios, ya que los equilibradores de carga no están informados de los nodos vaciados.
Después de realizar estos cambios, el archivo
capi-provisioning-example.yaml se puede aplicar al
clúster con este comando:
kubectl apply -f capi-provisioning-example.yaml