Actualización o sustitución de nodos de trabajo de VPC que utilizan OpenShift Data Foundation
Nube privada virtual
En el caso de los clústeres VPC que utilicen una solución de almacenamiento como OpenShift Data Foundation, es necesario aislar, vaciar y actualizar cada nodo de trabajo de forma secuencial. En el caso de los nodos de trabajo «bare metal», ahora
puedes utilizar el comando « worker reload » en lugar de « worker replace ». Si ha implementado OpenShift Data Foundation en un subconjunto de nodos de trabajo de su clúster, tras actualizar el nodo de trabajo deberá
editar el recurso ocscluster para incluir el nuevo nodo de trabajo.
El siguiente tutorial cubre tanto las actualizaciones mayores y menores como las actualizaciones de los nodos trabajadores.
- Actualización importante
- Complete los pasos con esta etiqueta para aplicar una actualización importante; por ejemplo, si está actualizando los nodos trabajadores a una nueva versión principal, como por ejemplo de
4.11a4.12, así como de OpenShift Data Foundation de4.11a4.12. - Actualización menor
- Complete los pasos con esta etiqueta para aplicar una actualización de parche, por ejemplo, si está actualizando de
4.12.15_1542_openshifta4.12.16_1544_openshiftmientras mantiene OpenShift Data Foundation en la versión4.12. Debes repetir estos pasos para cada nodo que desees actualizar. - Sustitución de trabajadores
- Complete los pasos con estos pasos de etiqueta si está sustituyendo un nodo trabajador en la misma versión de parche. Debes repetir estos pasos para cada nodo que quieras sustituir.
No se admite saltarse versiones 4.12 durante una actualización, como de 4.8 a.
Antes de actualizar los nodos de trabajador, asegúrese de realizar una copia de seguridad de los datos de la aplicación. Asimismo, planifique realizar los pasos siguientes para un nodo de trabajador a la vez. Repita los pasos para cada nodo de trabajador que desee actualizar.
Comprueba el estado de tu clúster de almacenamiento
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
-
Enumera los pods ejecutando el siguiente comando. Compruebe que todos los pods del espacio de nombres
openshift-storagese encuentran en buen estado. Diríjase a los pods que no estén en estado "En ejecución" o "Completado".oc get pods -n openshift-storage -
Ejecute el siguiente comando y compruebe que la dirección
Phasedeocs-storageclusteresReady.oc get storagecluster -n openshift-storageSalida de ejemplo
NAME AGE PHASE EXTERNAL CREATED AT VERSION ocs-storagecluster 3m49s Ready 2025-04-06T09:37:49Z 4.16.9 -
Comprueba el estado del almacenamiento Ceph ejecutando el siguiente comando. Compruebe que la salud es
HEALTH_OK, que todos los OSD sonupyINy que todos lospgssonactive+clean. Si alguna de estas comprobaciones falla, abra un caso de asistencia. En los detalles del caso, asegúrese de incluir todos los archivos de registro, mensajes de error o salidas de comandos relevantes... Resuelva cualquier problema antes de continuar.oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) ceph status -c /var/lib/rook/openshift-storage/openshift-storage.configSalida de ejemplo
health: HEALTH_OK # Verify health is HEALTH_OK services: mon: 3 daemons, quorum a,b,c (age 3h) mgr: a(active, since 6h) mds: ocs-storagecluster-cephfilesystem:1 {0=ocs-storagecluster-cephfilesystem-b=up:active} 1 up:standby-replay osd: 27 osds: 27 up (since 2h), 27 in (since 111m) # Verify OSDs are “up” and “in” rgw: 2 daemons active (ocs.storagecluster.cephobjectstore.a, ocs.storagecluster.cephobjectstore.b) data: pools: 10 pools, 1136 pgs objects: 5.50M objects, 3.3 TiB usage: 9.9 TiB used, 43 TiB / 53 TiB avail pgs: 1136 active+clean # Verify psgs are active+clean io: client: 93 KiB/s rd, 2.0 MiB/s wr, 5 op/s rd, 29 op/s wr
Repita estas comprobaciones de estado antes de repetir el procedimiento de actualización para nodos adicionales. Desactivar más de un módulo OSD a la vez puede poner en peligro los datos del usuario.
Actualizar el maestro de clúster
Actualización importante
-
Si está actualizando los nodos trabajadores a una nueva versión principal, como por ejemplo de
4.11a4.12, actualice primero el nodo maestro del clúster.ibmcloud oc cluster master update --cluster CLUSTER [--version MAJOR.MINOR.PATCH] [--force-update] [-f] [-q]Mandato de ejemplo:
ibmcloud oc cluster master update --cluster mycluster --version 4.21.27 --force-update -
Espere hasta que finalice la actualización del maestro.
Decida qué nodos de almacenamiento desea actualizar o sustituir
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
-
Enumera tus nodos de trabajo utilizando
oc get nodesy determina qué nodos de almacenamiento deseas actualizar.oc get nodesSalida de ejemplo
NAME STATUS ROLES AGE VERSION 10.241.0.4 Ready master,worker 106s v1.21.6+4b61f94 10.241.128.4 Ready master,worker 22d v1.21.6+bb8d50a 10.241.64.4 Ready master,worker 22d v1.21.6+bb8d50a
Asegúrate de que el clúster de almacenamiento esté en buen estado
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
Ejecute los siguientes comandos para comprobar el estado del clúster de almacenamiento.
oc get storagecluster -n openshift-storage
oc get cephcluster -n openshift-storage
Asegúrese de que el clúster de almacenamiento está en buen estado antes de continuar.
Reducir OpenShift Data Foundation
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
-
Para cada nodo trabajador que haya encontrado en el paso anterior, busque los despliegues
rook-ceph-monyrook-ceph-osd.oc get pods -n openshift-storage -o wide | grep -i <node_name>Si los pods de Noobaa se atascan durante el drenaje, puede eliminarlos manualmente para que se NooBaa programen en un nodo diferente.
-
Elimine los pods Noobaa restantes en el siguiente orden.
noobaa-db noobaa-core noobaa-endpoint noobaa-operator -
Reduzca los despliegues que ha encontrado en el paso anterior.
oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storageoc scale deployment rook-ceph-osd-2 --replicas=0 -n openshift-storageoc scale deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME --replicas=0 -n openshift-storage
Cordon y drene el nodo trabajador
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
-
Acordone el nodo. El acordonamiento del nodo impide que se planiquen pods en este nodo.
oc adm cordon NODE_NAMESalida de ejemplo
node/10.241.0.4 cordoned -
Drene el nodo para eliminar todos los pods. Cuando drena el nodo de trabajador, los pods se mueven a los demás nodos de trabajador asegurándose de que no haya ningún tiempo de inactividad. El drenaje también garantiza que no haya ninguna interrupción del presupuesto de interrupción del pod.
oc adm drain NODE_NAME --force --delete-emptydir-data --ignore-daemonsetsSalida de ejemplo
evicting pod "managed-storage-validation-webhooks-7fd79bc9f7-pdpv6" evicting pod "calico-kube-controllers-647dbbd685-fmrp9" evicting pod "certified-operators-2v852" evicting pod "csi-snapshot-controller-77fbf474df-47ddt" evicting pod "calico-typha-8574d89b8c-7f2cc" evicting pod "dns-operator-6d48cbff67-vrrsw" evicting pod "router-default-6fc798b98b-9m6kh" evicting pod "prometheus-adapter-5b77ffdd5f-hzqrp" evicting pod "alertmanager-main-1" evicting pod "prometheus-k8s-0" evicting pod "network-check-source-66c7fbb86-2r78z" -
Espera a que finalice el vaciado y, a continuación, sigue los siguientes pasos para actualizar el nodo de trabajo.
Limpiar los volúmenes persistentes de los nodos de trabajo «bare metal»
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
Solo para nodos de trabajo «bare metal »: Si vas a actualizar o sustituir un nodo de trabajo «bare metal», sigue estos pasos para limpiar los volúmenes persistentes y preparar el nodo para la nueva implementación. Si estás trabajando con nodos de trabajo que son instancias de servidor virtual (VSI), omite esta sección y pasa directamente a « Actualizar el nodo de trabajo ».
Antes de empezar, asegúrate de haber completado los pasos anteriores para aislar y vaciar el nodo de trabajo.
-
Identifica los volúmenes persistentes (PV) que se encuentren en estado «
Released» y que estén asociados a la clase de almacenamiento «localblock» en el nodo que estás actualizando.oc get pv -L kubernetes.io/hostname | grep localblock | grep ReleasedSalida de ejemplo
local-pv-d6bf175b 1490Gi RWO Delete Released openshift-storage/ocs-deviceset-0-data-0-6c5pw localblock 2d22h compute-1 -
Si hay algún PV en el estado «
Released», elimínalo. Sustituye por<persistent_volume>el nombre del PV del paso anterior.oc delete pv <persistent_volume>Mandato de ejemplo
oc delete pv local-pv-d6bf175bSalida de ejemplo
persistentvolume "local-pv-d6bf175b" deleted -
Borra los discos ODF del nodo «bare metal» para preparar la creación de un nuevo volumen persistente. Inicia un pod de depuración en el nodo que estás actualizando. Sustituye «
<node-name>» por el nombre de tu nodo «worker» de «bare metal».kubectl debug node/<node-name> -it --image=registry.access.redhat.com/ubi8/ubiMandato de ejemplo
kubectl debug node/kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000003b3 -it --image=registry.access.redhat.com/ubi8/ubi -
Dentro del módulo de depuración, accede al directorio raíz del host.
chroot /host -
Borra todos los discos NVMe que haya utilizado ODF. Ajusta el rango de discos (
nvme{0..7}n1) en función del número de discos de tu configuración.for disk in /dev/nvme{0..7}n1; do echo "Wiping $disk..." wipefs -af $disk dd if=/dev/zero of=$disk bs=1M count=100 sgdisk --zap-all $disk 2>/dev/null || true done -
Comprueba que los discos estén limpios y que ya no contengan ningún rastro del sistema de archivos.
for disk in /dev/nvme{0..7}n1; do echo "=== $disk ===" blkid $disk 2>&1 || echo "Clean" doneCada disco debería aparecer como «Clean» en el resultado, lo que indica que se han eliminado todas las firmas del sistema de archivos.
-
Sal del pod de depuración.
exit exit -
Consulta la lista de recursos de
localvolumediscoveryresultspara encontrar la entrada correspondiente al nodo que estás actualizando.kubectl get localvolumediscoveryresults -n openshift-local-storageSalida de ejemplo
NAME AGE discovery-result-kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000003b3 5d discovery-result-kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000004a1 5d -
Elimina el recurso «
localvolumediscoveryresults» correspondiente al nodo que estás actualizando. Sustituye «<discovery-result-name>» por el nombre del paso anterior.kubectl delete localvolumediscoveryresults <discovery-result-name> -n openshift-local-storageMandato de ejemplo
kubectl delete localvolumediscoveryresults discovery-result-kube-d8g2ek0l0bd8e4oss13g-bhargavibmu-default-000003b3 -n openshift-local-storage
Una vez completados estos pasos, se crearán automáticamente nuevos volúmenes persistentes y se programarán en el nodo «bare metal» tras su reinicio. Pasa a la siguiente sección para actualizar el nodo de trabajo.
Actualizar el nodo trabajador
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
-
Liste los nodos trabajadores utilizando el mandato
ibmcloud oc worker lsy busque el nodo trabajador que ha acordonado y drenado en el paso anterior.ibmcloud oc worker ls -c CLUSTERSalida de ejemplo
ID Primary IP Flavor State Status Zone Version kube-c85ra07w091uv4nid9ug-vpcoc-default-000001c1 10.241.128.4 bx2.4x16 normal Ready us-east-3 4.8.29_1544_openshift* kube-c85ra07w091uv4nid9ug-vpcoc-default-00000288 10.241.0.4 bx2.4x16 normal Ready us-east-1 4.8.29_1544_openshift* kube-c85ra07w091uv4nid9ug-vpcoc-default-00000352 10.241.64.4 bx2.4x16 normal Ready us-east-2 4.8.29_1544_openshift* -
Actualiza el nodo trabajador. Para los nodos trabajadores de metal desnudo, utilice el comando
worker reload. Para los nodos trabajadores de instancia de servidor virtual (VSI), utilice el comandoworker replace.
Nodos trabajadores de metal desnudo: Utilice el comando worker reload para recargar el nodo trabajador. Este comando es compatible con los trabajadores de hardware físico de VPC.
sh {: pre} ibmcloud oc worker reload --worker kube-***
Nodos trabajadores VSI: Actualización menor Ejemplo de comando para reemplazar el nodo trabajador y aplicar la última actualización del parche.
sh {: pre} ibmcloud oc worker replace -c CLUSTER --worker kube-*** --update
Nodos trabajadores VSI: Worker replace Ejemplo de comando para reemplazar el nodo worker sin aplicar la última actualización del parche.
sh {: pre} ibmcloud oc worker replace -c CLUSTER --worker kube-*** Ejemplo de salida para la sustitución del nodo trabajador VSI:
sh {: screen} The replacement worker node is created in the same zone with the same flavor, but gets new public or private IP addresses. During the replacement, all pods might be rescheduled onto other worker nodes and data is deleted if not stored outside the pod. To avoid downtime, ensure that you have enough worker nodes to handle your workload while the selected worker nodes are being replaced. Replace worker node kube-c85ra07w091uv4nid9ug-cluster-default-00000288? [y/N]> y Deleting worker node kube-c85ra07w091uv4nid9ug-cluster-default-00000288 and creating a new worker node in cluster
-
Espere a que el nodo trabajador se recargue o sustituya y, a continuación, liste sus nodos trabajadores. Tenga en cuenta que este proceso puede tardar 20 minutos o más.
oc get nodesSalida de ejemplo
NAME STATUS ROLES AGE VERSION 10.241.0.4 Ready master,worker 22d v1.21.6+bb8d50a 10.241.128.4 Ready master,worker 22d v1.21.6+bb8d50a 10.241.64.4 Ready master,worker 22d v1.21.6+bb8d50a
Limpiar los recursos del nodo antiguo
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
-
Compruebe que el pod OSD ha aparecido en el nodo sustituido en un estado
running. Si el pod está en marcha, continúe con el paso 7. Si el pod ha fallado, realice lo siguiente steps.If no hay más de un pod OSDRunning, deténgase y póngase en contacto con el servicio de asistencia. Abra un caso de soporte. En los detalles del caso, asegúrese de incluir todos los archivos de registro, mensajes de error o salidas de comandos relevantes. -
Vaya al proyecto
openshift-storage.oc project openshift-storage -
Elimine el OSD anómalo del clúster. Puede especificar varios OSD fallidos si es necesario.
oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -El valor
FAILED_osd_ides el entero en el nombre de pod inmediatamente después del prefijorook-ceph-osd. El valorFORCE_OSD_REMOVALdebe cambiarse atrueen clústeres que solo tienen tres OSD, o clústeres con espacio insuficiente para restaurar las tres réplicas de los datos después de eliminar el OSD. -
Verifique que el OSD se ha eliminado correctamente comprobando el estado del pod
ocs-osd-removal-job.oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage -
Verifique que la eliminación de OSD se ha completado.
oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'Salida de ejemplo
2023-03-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
Añadir el nuevo nodo de almacenamiento
Antes de añadir nuevos nodos de almacenamiento, asegúrese de haber completado los pasos anteriores para todos los nodos de almacenamiento del clúster.
[Actualización importante] {: tag-red}[ Actualización menor] {: tag-blue} Sustitución de trabajadores
-
Si ha limitado el despliegue de ODF a un subconjunto de nodos trabajadores especificando nombres de nodo durante la instalación, debe actualizar la CRD de
ocsclusterpara que incluya el nuevo nombre.Si no ha limitado su configuración a sólo determinados nodos trabajadores, no necesita actualizar el CRD de
ocscluster.oc edit ocsclusterapiVersion: ocs.ibm.io/v1 kind: OcsCluster metadata: name: ocscluster-auto spec: . . . osdSize: 250Gi osdStorageClassName: ibmc-vpc-block-metro-10iops-tier workerNodes: - NODE-NAME # Example 10.248.128.42 - NODE-NAME - NODE-NAME -
Espere a que los pods de OpenShift Data Foundation se desplieguen en el nuevo nodo de trabajador. Verifique que se hayan creado los nuevos volúmenes persistentes y que todos los pods estén en un estado
Running.oc get pv oc get ocscluster oc get pods -n openshift-storage -
Verifique que todos los demás pods de OpenShift Data Foundation necesarios estén en estado En ejecución.
oc get pod -n openshift-storage | grep monSalida de ejemplo:
rook-ceph-mon-a-cd575c89b-b6k66 2/2 Running 0 38m rook-ceph-mon-b-6776bc469b-tzzt8 2/2 Running 0 38m rook-ceph-mon-d-5ff5d488b5-7v8xh 2/2 Running 0 4m8s -
Compruebe que los nuevos pods OSD se están ejecutando en el nodo de sustitución.
oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
Actualizar el complemento OpenShift Data Foundation
Actualización importante
-
Compruebe la versión existente.
ibmcloud oc cluster addon ls --cluster CLUSTER -
Actualice el complemento.
ibmcloud oc cluster addon update openshift-data-foundation --cluster CLUSTER --version VERSION -
Comprueba que el complemento esté actualizado.
ibmcloud oc cluster addon ls --cluster CLUSTER
Actualizar el recurso de clúster
Actualización importante
-
Consigue el nombre de tu recurso
ocscluster.oc get ocsclusterSalida de ejemplo
NAME AGE ocscluster-vpc 19d -
Ejecuta el siguiente comando para editar tu recurso
ocscluster.oc edit ocscluster OCS-CLUSTER-NAME -
Establece el parámetro
ocsUpgradeentrue.... spec: billingType: hourly monSize: 20Gi monStorageClassName: ibmc-vpc-block-10iops-tier numOfOsd: 1 ocsUpgrade: true osdSize: 250Gi osdStorageClassName: ibmc-vpc-block-10iops-tier status: storageClusterStatus: Decreasing the capacity not allowed -
Guarde y cierre el archivo.
-
Espera a que finalice la actualización.
-
Verifique que los recursos
storageclusterycephclusterse hayan desplegado correctamente.oc get storagecluster -n openshift-storage NAME AGE PHASE EXTERNAL CREATED AT VERSION ocs-storagecluster 43h Ready 2023-06-21T09:22:00Z 4.11.0oc get cephcluster -n openshift-storage NAME DATADIRHOSTPATH MONCOUNT AGE PHASE MESSAGE HEALTH EXTERNAL ocs-storagecluster-cephcluster /var/lib/rook 3 43h Ready Cluster created successfully HEALTH_OKoc get csv -n openshift-storage NAME DISPLAY VERSION REPLACES PHASE mcg-operator.v4.11.8 NooBaa Operator 4.11.8 mcg-operator.v4.11.7 Succeeded ocs-operator.v4.11.8 OpenShift Container Storage 4.11.8 ocs-operator.v4.11.7 Succeeded odf-csi-addons-operator.v4.11.8 CSI Addons 4.11.8 odf-csi-addons-operator.v4.11.7 Succeeded odf-operator.v4.11.8 OpenShift Data Foundation 4.11.8 odf-operator.v4.11.7 Succeeded