업그레이드 단계: AnthosBareMetal

이 단계에서는 Kubernetes 클러스터의 Kubernetes 버전과 부가기능을 업그레이드합니다. 이 단계에서는 업그레이드 작업 mz-location-upgrade도 실행합니다.

클러스터 업그레이드는 클러스터의 노드 하나에서 한 번에 실행됩니다. 클러스터 업그레이드의 대략적인 단계는 다음과 같습니다.

  1. 실행 전 검사는 노드가 업그레이드할 준비가 되었는지 확인하기 위해 실행됩니다.
  2. 업그레이드를 준비하기 위해 노드가 드레이닝됩니다.
  3. 노드의 Kubernetes 버전이 업그레이드됩니다.
  4. 노드 업그레이드가 성공했는지 확인하기 위해 비행 후 점검이 실행됩니다.
  5. 노드의 InventoryMachine 리소스가 maintenance에서 삭제됩니다. 이렇게 하면 노드가 포드를 다시 수락할 준비가 됩니다.

노드 드레이닝 프로세스

노드 드레이닝은 해당 노드에서 실행 중인 모든 워크로드를 해당 노드에서 단계적으로 이동하는 것을 의미합니다. 다음 단계로 구성됩니다.

  1. 노드의 InventoryMachine 리소스는 maintenance 아래에 배치됩니다.
  2. BaremetalMachine 리소스는 maintenance 아래에 배치됩니다.
  3. Kubernetes 노드에 baremetal.cluster.gke.io/maintenance: NoSchedule taint가 적용됨
  4. 베어메탈 노드의 경우 노드에서 실행되는 가상 머신은 maintenance 아래에서 해당 가상 머신의 InventoryMachine를 설정하여 드레인을 준비합니다.
  5. Kubernetes 노드에서 실행 중인 포드가 단계적으로 제거됩니다. 각 포드에는 정상적으로 종료하는 데 최대 80분이 주어집니다.

관리자 클러스터 kubeconfig, 클러스터 이름, 네임스페이스 가져오기

이 단계에서 문제를 분류하려면 관리자 클러스터 KUBECONFIG와 업그레이드 중인 클러스터의 이름 및 네임스페이스가 필요합니다. ORG_NAME을 업그레이드를 모니터링하는 조직으로 설정합니다.

export ORG_NAME=ORG_NAME

단계 이름에 지정된 클러스터에 따라 다음 중 하나를 선택합니다.

  1. 단계 이름: root-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="root-admin"
    export CLUSTER_NAMESPACE="root"
    
  2. 단계 이름: org-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-admin"
    export CLUSTER_NAMESPACE="${ORG_NAME}"
    
  3. 단계 이름: system/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-system"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  4. 단계 이름: service/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="g-${ORG_NAME}-shared-service"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  5. 사용자 클러스터 업그레이드

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME=USER_CLUSTER_NAME
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    

모니터링할 리소스

  1. ABM 클러스터 리소스 clusters.baremetal.cluster.gke.io

      kubectl get cluster -n "${CLUSTER_NAMESPACE}" "${CLUSTER_NAME}" --kubeconfig=${ADMIN_KUBECONFIG}
    

    출력 예시

    NAME         ABM VERSION       DESIRED ABM VERSION   CLUSTER STATE
    root-admin   1.29.400-gke.86   1.29.400-gke.86       Running
    
  2. ABM BaremetalMachine 리소스

      kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG}
    

    출력 예시

    NAME       CLUSTER      READY   INSTANCEID             MACHINE    ABM VERSION       DESIRED ABM VERSION
    10.8.0.2   root-admin   true    baremetal://10.8.0.2   10.8.0.2   1.29.400-gke.86   1.29.400-gke.86
    10.8.0.3   root-admin   true    baremetal://10.8.0.3   10.8.0.3   1.29.400-gke.86   1.29.400-gke.86
    10.8.0.4   root-admin   true    baremetal://10.8.0.4   10.8.0.4   1.29.400-gke.86   1.29.400-gke.86
    

    머신에 ABM VERSIONDESIRED ABM VERSION과 다르거나 READYtrue과 같지 않은 경우 -o yaml 플래그를 사용하여 머신에 관한 세부정보를 확인합니다.

  3. 노드가 유지보수 모드로 전환되거나 유지보수 모드에서 종료되지 않는 경우 HealthChecks

      export MACHINE_IP=MACHINE_IP
      kubectl get healthchecks -n kube-system --kubeconfig=${ADMIN_KUBECONFIG}
    

    출력 예시

    NAMESPACE     NAME                                                 COMPONENT   NAMESPACE   STATUS    LAST_COMPLETED
    kube-system   bm-system-10.8.0.2-machine                                                   Healthy   14m
    kube-system   bm-system-10.8.0.3-machine                                                   Healthy   14m
    kube-system   bm-system-10.8.0.4-machine                                                   Healthy   5m43s
    kube-system   bm-system-add-ons-add-ons                                                    Healthy   46m
    kube-system   bm-system-add-ons-configdrift                                                Healthy   46m
    

    상태 점검이 비정상으로 표시되면 -o yaml 플래그를 사용하여 세부정보를 확인합니다.

  4. 오류를 확인하기 위한 컨트롤러 로그

      export MACHINE_IP=MACHINE_IP
      kubectl logs -n kube-system -l baremetal.cluster.gke.io/lifecycle-controller-component=true | grep ${MACHINE_IP}
      kubectl logs -n capi-system -l baremetal.cluster.gke.io/lifecycle-controller-component=true | grep ${MACHINE_IP}
    
  5. 이 단계에서 실행 중이거나 실패한 업그레이드 작업이 있는지 확인합니다.

    export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    kubectl get upgradetaskrequests -n gpc-system -o json | jq '.items[] | select(.status.conditions[].status=="Unknown") | .metadata.name'
    

    출력 예시

    "upg-task-org-1-os-node-upgrade-task-whg8v"
    
    export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export UPGRADE_TASK=$(kubectl get upgradetaskrequests -n gpc-system -o json | jq -r '.items[] | select(.status.conditions[].status=="Unknown") | .metadata.name')
    kubectl get upgradetaskrequests -n gpc-system "${UPGRADE_TASK}" -o yaml 
    

    출력 예시

    status:
      conditions:
      - lastTransitionTime: "2024-09-25T16:26:33Z"
        message: job gpc-system/v1.13.0-os-7cf810d7a5-upg-task-org-1-os-node-upgra-4n5t6
          is running
        observedGeneration: 1
        reason: JobRunning
        status: Unknown
        type: Succeeded
      upgradeTaskResponse:
        name: upg-task-org-1-os-node-upgrade-task-whg8v-v1.13.0-os-7cf810d7a5
    

    출력에 실행 중인 작업이 표시되면 작업을 설명하거나 포드 로그에서 오류를 확인할 수 있습니다.