Atualização de nós de trabalho do Classic que utilizam o Data Foundation d OpenShift

Infraestrutura clássica

Para clusters Classic com uma solução de armazenamento como o OpenShift Data Foundation, é necessário isolar, esvaziar e substituir cada nó de trabalho sequencialmente. Se você implementou o OpenShift Data Foundation a um subconjunto de nós do trabalhador em seu cluster, depois de substituir o nó do trabalhador, você deverá editar o recurso ocscluster para incluir o novo nó do trabalhador.

O tutorial a seguir cobre as atualizações do nó do trabalhador principal e secundário..

Grande atualização
Conclua as etapas com esse rótulo para aplicar uma atualização principal, por exemplo se você estiver atualizando seus nós do trabalhador para uma nova versão principal, como de 4.11 para 4.12, bem como OpenShift Data Foundation de 4.11 para 4.12.
Pequena atualização
Conclua as etapas com esse rótulo para aplicar uma atualização de correção, por exemplo se você estiver atualizando de 4.12.15_1542_openshift para 4.12.16_1544_openshift enquanto mantém o OpenShift Data Foundation na versão 4.12.

Pular versões durante uma atualização, como de 4.8 para não 4.12 é suportado.

Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

Antes de atualizar os nós do trabalhador, certise-se de fazer backup de seus dados do app. Também, planeje a conclusão das etapas a seguir para um nó do trabalhador de cada vez. Repita as etapas para cada nó do trabalhador que deseja atualizar.

Atualizar o cluster principal

Grande atualização

  1. Se você estiver atualizando seus nós do trabalhador para uma nova versão principal, como de 4.11 para 4.12, atualize o cluster mestre primeiro.
    ibmcloud oc cluster master update --cluster CLUSTER [--version MAJOR.MINOR.PATCH] [--force-update] [-f] [-q]
    
    Exemplo de comando:
    ibmcloud oc cluster master update --cluster mycluster --version 4.21.27 --force-update
    
  2. Aguarde até que a atualização principal seja concluída

Determine quais nós do trabalhador você deseja atualizar

[Atualização importante] {: tag-red} Atualização menor

  1. Liste os nós do trabalhador usando o comando oc get nodes e determinando quais nós do trabalhador você deseja atualizar

    oc get nodes
    

    Exemplo de saída

    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
    

Reduzir a capacidade do OpenShift Data Foundation

[Atualização importante] {: tag-red} Atualização menor

  1. Para cada nó do trabalhador localizado na etapa anterior, localize as implementações rook-ceph-mon e rook-ceph-osd.
    oc get pods -n openshift-storage -o wide | grep -i <node_name>
    
  2. Reduza a capacidade das implementações localizadas na etapa 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 e drene o nó do trabalhador

[Atualização importante] {: tag-red} Atualização menor

  1. Bloqueie o nó. O bloqueio do nó impede que quaisquer pods sejam programados neste nó.

    oc adm cordon NODE_NAME
    

    Exemplo de saída

    node/10.241.0.4 cordoned
    
  2. Drene o nó para remover todos os pods. Ao drenar o nó do trabalhador, os pods se movem para os outros nós do trabalhador garantindo que não haja tempo de inatividade. A drenagem também garante que não haja interrupção do orçamento de disrupção do pod.

    oc adm drain NODE_NAME --force --delete-emptydir-data --ignore-daemonsets
    

    Exemplo de saída

    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. Aguarde a conclusão da drenagem e, em seguida, conclua as etapas a seguir para substituir o nó do trabalhador.

Atualizar o nó do trabalhador

[Atualização importante] {: tag-red} Atualização menor

  1. Listar seus nós do trabalhador usando o ibmcloud oc worker ls e localizar o nó do trabalhador que você isolou e drenou na etapa anterior.

    ibmcloud oc worker ls -c CLUSTER
    

    Exemplo de saída

    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. Atualizar o nó do trabalhador.

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

    Exemplo de saída

    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. Aguarde até que o nó substituto seja provisionado e, em seguida, liste seus nós de trabalho. Observe que esse processo pode levar 20 minutos ou mais.

    oc get nodes
    

    Exemplo de saída

    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
    

Limpar os recursos do nó antigo

[Atualização importante] {: tag-red} Atualização menor

  1. Navegue para o projeto do openshift-storage

    oc project openshift-storage
    
  2. Remova o OSD com falha do cluster É possível especificar vários OSDs com falha se necessário:

    oc process -n openshift-storage ocs-osd-removal -p FAILED_OSD_IDS=<failed_osd_id> -p FORCE_OSD_REMOVAL=true | oc create -f -
    

    O valor FAILED_osd_id é o número inteiro no nome do pod imediatamente após o prefixo rook-ceph-osd. O valor FORCE_OSD_REMOVAL deve ser mudado para true em clusters que tenham apenas três OSDs ou clusters com espaço insuficiente para restaurar todas as três réplicas dos dados após o OSD ser removido...

  3. Verifique se o OSD foi removido com sucesso, verificando o status do pod ocs-osd-removal-job

    oc get pod -l job-name=ocs-osd-removal-job -n openshift-storage
    
  4. Verifique se a remoção do OSD foi concluída

    oc logs -l job-name=ocs-osd-removal-job -n openshift-storage --tail=-1 | egrep -i 'completed removal'
    

    Exemplo de saída

    2023-03-10 06:50:04.501511 I | cephosd: completed removal of OSD 0
    
  5. Identifique o Persistent Volume (PV) associado à Persistent Volume Claim (PVC) do nó antigo:

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

    Se houver um PV no estado Liberado, exclua-o:.

    oc delete pv <persistent_volume>
    

Inclua os novos nós de armazenamento

[Atualização importante] {: tag-red} Atualização menor

  1. Aguarde a implementação dos pods do OpenShift Data Foundation no novo trabalhador. Verifique se os volumes persistentes do OSD foram criados e se todos os pods estão em um estado Running
    oc get pv
    oc get ocscluster
    oc get pods -n openshift-storage
    
  2. Verifique se todos os outros pods necessários do OpenShift do Data Foundation estão no estado Em Execução
    oc get pod -n openshift-storage | grep mon
    
    Saída de exemplo:
    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 se os novos pods OSD estão em execução no nó de substituição:
    oc get pods -o wide -n openshift-storage| egrep -i <new_node_name> | egrep osd
    
  4. Identifique a implementação do pod do crashcollector
    oc get deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage
    
  5. Se houver uma implementação existente do crashcollector, exclua-a
    oc delete deployment --selector=app=rook-ceph-crashcollector,node_name=NODE-NAME -n openshift-storage
    
  6. Exclua o ocs-osd-removal-job
    oc delete -n openshift-storage job ocs-osd-removal-job
    
    Saída de exemplo:
    job.batch "ocs-osd-removal-job" deleted
    

Atualize o complemento do OpenShift Data Foundation

Grande atualização

  1. Verifique a versão existente.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    
  2. Atualize o complemento.
    ibmcloud oc cluster addon update openshift-data-foundation --cluster CLUSTER --version VERSION
    
  3. Verifique se o complemento está atualizado.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    

Atualize seu recurso de cluster

Grande atualização

  1. Obtenha o nome do seu recurso do ocscluster.

    oc get ocscluster
    

    Exemplo de saída

    NAME             AGE
    ocscluster-vpc   19d
    
  2. Execute o comando a seguir para editar seu recurso ocscluster.

    oc edit ocscluster OCS-CLUSTER-NAME
    
  3. Defina o parâmetro ocsUpgrade como true``.

    ...
    spec:
        billingType: hourly
    monSize: 20Gi
    autoDiscoverDevices: true
    numOfOsd: 1
    ocsUpgrade: true
    osdSize: 250Gi
    status:
        storageClusterStatus: Decreasing the capacity not allowed
    
  4. Salve e feche o arquivo.

  5. Aguarde até que a atualização seja concluída.

  6. Verifique se os recursos storagecluster e cephcluster estão implementados corretamente.

    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