Actualización de nodos de trabajo de Classic que utilizan OpenShift Data Foundation

Infraestructura clásica

En el caso de los clústeres Classic con una solución de almacenamiento como OpenShift Data Foundation, debe aislar, vaciar y sustituir cada nodo de trabajo de forma secuencial. Si ha desplegado OpenShift Data Foundation en un subconjunto de nodos de trabajador del clúster, después de sustituir el nodo de trabajador, debe editar el recurso de ocscluster para incluir el nuevo nodo de trabajador.

En la siguiente guía de aprendizaje se describen las actualizaciones de los nodos trabajadores principales y secundarios.

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.11 a 4.12, así como de OpenShift Data Foundation de 4.11 a 4.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_openshift a 4.12.16_1544_openshift mientras mantiene OpenShift Data Foundation en la versión 4.12.

No se admite saltarse versiones 4.12 durante una actualización, como de 4.8 a.

Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.

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.

Actualizar el maestro de clúster

Actualización importante

  1. Si está actualizando los nodos trabajadores a una nueva versión principal, como por ejemplo de 4.11 a 4.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
    
  2. Espere hasta que finalice la actualización del maestro.

Determine qué nodos trabajadores desea actualizar

[Actualización importante] {: tag-red} Actualización menor

  1. Liste los nodos trabajadores utilizando el mandato oc get nodes y determinando qué nodos trabajadores desea actualizar.

    oc get nodes
    

    Salida 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
    

Reducir OpenShift Data Foundation

[Actualización importante] {: tag-red} Actualización menor

  1. Para cada nodo trabajador que haya encontrado en el paso anterior, busque los despliegues rook-ceph-mon y rook-ceph-osd.
    oc get pods -n openshift-storage -o wide | grep -i <node_name>
    
  2. Reduzca los despliegues que ha encontrado en el paso anterior.
    oc scale deployment rook-ceph-mon-c --replicas=0 -n openshift-storage
    
    oc scale deployment rook-ceph-osd-2 --replicas=0 -n openshift-storage
    
    oc 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

  1. Acordone el nodo. El acordonamiento del nodo impide que se planiquen pods en este nodo.

    oc adm cordon NODE_NAME
    

    Salida de ejemplo

    node/10.241.0.4 cordoned
    
  2. 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-daemonsets
    

    Salida 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"
    
  3. Espere a que finalice el drenaje y, a continuación, siga estos pasos para sustituir el nodo de trabajador.

Actualizar el nodo trabajador

[Actualización importante] {: tag-red} Actualización menor

  1. Liste los nodos trabajadores utilizando ibmcloud oc worker ls y busque el nodo trabajador que ha acordonado y drenado en el paso anterior.

    ibmcloud oc worker ls -c CLUSTER
    

    Salida 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*
    
  2. Actualice el nodo trabajador.

    ibmcloud oc worker update -c CLUSTER --worker kube-***
    

    Salida de ejemplo

    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
    
  3. Espera a que se aprovisione el nodo de sustitución y, a continuación, enumera tus nodos de trabajo. Tenga en cuenta que este proceso puede tardar 20 minutos o más.

    oc get nodes
    

    Salida 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

  1. Vaya al proyecto openshift-storage.

    oc project openshift-storage
    
  2. Elimine el OSD anómalo del clúster. Puede especificar varios OSD anómalos 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_id es el entero en el nombre de pod inmediatamente después del prefijo rook-ceph-osd. El valor FORCE_OSD_REMOVAL debe cambiarse a true en 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.

  3. Verifique que el OSD se ha eliminado correctamente comprobando el estado del pod ocs-osd-removed-job.

    oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
    
  4. 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
    
  5. Identifique el volumen persistente (PV) asociado con la reclamación de volumen persistente (PVC) del nodo antiguo:

    oc get pv -L kubernetes.io/hostname | grep localblock | grep Released
    

    Si hay un PV en estado Liberado, suprímalo:

    oc delete pv <persistent_volume>
    

Añadir los nuevos nodos de almacenamiento

[Actualización importante] {: tag-red} Actualización menor

  1. Espere a que los pods de OpenShift Data Foundation se desplieguen en el nuevo nodo de trabajador. Verifique que se hayan creado los volúmenes persistentes de OSD y que todos los pods estén en un estado Running.
    oc get pv
    oc get ocscluster
    oc get pods -n openshift-storage
    
  2. 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 mon
    
    Salida 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
    
  3. Verifique que los nuevos pods de 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
    
  4. Identifique el despliegue del pod de crashcollector.
    oc get deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage
    
  5. Si existe un despliegue de crashcollector, suprímalo.
    oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage
    
  6. Suprima el trabajo de eliminación de ocs-osd.
    oc delete -n openshift-storage job ocs-osd-removal-job
    
    Salida de ejemplo:
    job.batch "ocs-osd-removal-job" deleted
    

Actualizar el complemento OpenShift Data Foundation

Actualización importante

  1. Compruebe la versión existente.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    
  2. Actualice el complemento.
    ibmcloud oc cluster addon update openshift-data-foundation --cluster CLUSTER --version VERSION
    
  3. Comprueba que el complemento esté actualizado.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    

Actualizar el recurso de clúster

Actualización importante

  1. Consigue el nombre de tu recurso ocscluster.

    oc get ocscluster
    

    Salida de ejemplo

    NAME             AGE
    ocscluster-vpc   19d
    
  2. Ejecuta el siguiente comando para editar tu recurso ocscluster.

    oc edit ocscluster OCS-CLUSTER-NAME
    
  3. Establece el parámetro ocsUpgrade en true.

    ...
    spec:
        billingType: hourly
    monSize: 20Gi
    autoDiscoverDevices: true
    numOfOsd: 1
    ocsUpgrade: true
    osdSize: 250Gi
    status:
        storageClusterStatus: Decreasing the capacity not allowed
    
  4. Guarde y cierre el archivo.

  5. Espera a que finalice la actualización.

  6. Verifique que los recursos storagecluster y cephcluster se 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.0
    
    oc 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_OK   
    
    oc 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