이 문서에서는 Google Distributed Cloud (GDC) 오프라인 Kubernetes 클러스터의 Kubernetes 버전을 업그레이드하는 방법을 설명합니다. 클러스터에 최신 Kubernetes 기능과 수정사항이 적용되도록 정기적인 클러스터 업그레이드를 계획해야 합니다.
이 문서는 조직 내에서 Kubernetes 리소스를 관리하는 플랫폼 관리자 그룹의 IT 관리자, 보안 엔지니어, 네트워크 관리자와 같은 사용자를 대상으로 합니다. 자세한 내용은 GDC 오프라인 문서 대상을 참고하세요.
시작하기 전에
kubectl CLI를 설치합니다. 자세한 내용은 구성요소 설치를 참고하세요.
타겟팅된 영역에서 관리 API 서버의 kubeconfig 파일을 생성합니다. 자세한 내용은 영역 Kubernetes 클러스터 리소스를 참고하세요.
사용 가능한 업그레이드 버전을 나열하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 사용자 클러스터 관리자(
user-cluster-admin) 역할을 부여해 달라고 요청하세요.표준 클러스터를 관리하고 플랫폼 관리자 그룹에서 사용자 클러스터 관리자 역할을 얻을 수 없는 경우 사용 가능한 Kubernetes 업그레이드 버전 목록을 제공해 달라고 요청해야 합니다.
클러스터 업그레이드를 구성하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 표준 클러스터 관리자(
standard-cluster-admin) 역할을 부여해 달라고 요청하세요.
Kubernetes 클러스터 업그레이드
UserClusterUpgradeRequest API를 사용하여 기존 Kubernetes 클러스터를 업그레이드합니다.
API를 사용하여 Kubernetes 클러스터를 업그레이드하려면 다음 단계를 따르세요.
UserClusterMetadata객체의kubernetesVersion값을 출력하여 사용 가능한 Kubernetes 업그레이드 버전을 나열합니다.kubectl --kubeconfig MANAGEMENT_API_SERVER \ get userclustermetadata -o=custom-columns='TARGET_VERSION:.spec.kubernetesVersion'MANAGEMENT_API_SERVER를 관리 API 서버의 kubeconfig 파일 경로로 바꿉니다.이 명령어는 사용 가능한 Kubernetes 버전 목록을 반환합니다.
TARGET_VERSION 1.30.1000-gke.85이전 출력에서 클러스터를 업그레이드할 Kubernetes 버전을 확인합니다. 다음 단계의 업그레이드 요청에 지정하는
targetVersion는 사용 가능한 버전 중 하나여야 합니다.UserClusterUpgradeRequest리소스를 만들어 클러스터 업그레이드를 요청합니다.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: cluster.gdc.goog/v1 kind: UserClusterUpgradeRequest metadata: name: CLUSTER_NAME namespace: CLUSTER_NAMESPACE spec: clusterRef: name: CLUSTER_NAME targetVersion: TARGET_VERSION EOF다음을 바꿉니다.
MANAGEMENT_API_SERVER: 관리 API 서버의 kubeconfig 파일 경로입니다.CLUSTER_NAME: 업그레이드할 Kubernetes 클러스터의 이름입니다(예:user-vm-2).CLUSTER_NAMESPACE: Kubernetes 클러스터의 네임스페이스입니다. 공유 클러스터의 경우platform네임스페이스를 사용합니다. 표준 클러스터의 경우 클러스터의 프로젝트 네임스페이스를 사용합니다.TARGET_VERSION: 이전 단계에서 식별된 업그레이드의 타겟 버전(예:1.30.1000-gke.85)
Kubernetes 클러스터의 평균 업그레이드 시간은 약 20분입니다.
UserClusterUpgradeRequest리소스를 모니터링하여 클러스터 업그레이드를 확인합니다.kubectl --kubeconfig MANAGEMENT_API_SERVER \ describe userclusterupgraderequest CLUSTER_NAME \ -n CLUSTER_NAMESPACE다음을 바꿉니다.
MANAGEMENT_API_SERVER: 관리 API 서버의 kubeconfig 파일 경로입니다.CLUSTER_NAME: 업그레이드할 Kubernetes 클러스터의 이름입니다(예:user-vm-2).CLUSTER_NAMESPACE: Kubernetes 클러스터의 네임스페이스입니다. 공유 클러스터의 경우platform네임스페이스를 사용합니다. 표준 클러스터의 경우 클러스터의 프로젝트 네임스페이스를 사용합니다.
출력의
Spec섹션을 검사합니다.Current Version및Target Version이 포함되어 있습니다.Current Version와Target Version이 다르면 업그레이드가 아직 진행 중입니다.Spec: ... Current Version: 1.29.500-gke.60 Target Version: 1.30.1000-gke.85 Status: Conditions: - Message: Upgrade is in progress Reason: UpgradeInProgress Status: "False" Type: SucceededSucceeded조건의 상태가True이고Current Version가Target Version와 일치하면 업그레이드가 완료되고 성공한 것입니다.Succeeded조건의 상태가False이면 업그레이드가 실패한 것입니다. Kubernetes 클러스터 업그레이드와 관련된 오류가 발생하면 인프라 운영자 그룹에 문의하여 추가 지원을 받으세요.
업그레이드 후 클러스터 하위 구성요소 확인
Kubernetes 클러스터가 성공적으로 업그레이드된 후 클러스터의 모든 하위 구성요소가 정상인지 확인하는 것이 좋습니다.
클러스터에서 하위 구성요소 오류를 확인합니다.
ReconciliationError메시지를 표시하는 하위 구성요소가 없는지 확인합니다.kubectl --kubeconfig MANAGEMENT_API_SERVER \ get subcomponent -n CLUSTER_NAME -o json | jq -r \ '.items[] | select(.status.conditions[]?.reason == "ReconciliationError") | select(.status.featureDisabled != true) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'출력에 하위 구성요소가 반환되면 인프라 운영자 그룹에 문의하여 추가 지원을 받으세요.
Reconciling메시지가 표시되는 하위 구성요소가 없는지 확인합니다.kubectl --kubeconfig MANAGEMENT_API_SERVER \ get subcomponent -n CLUSTER_NAME -o json | jq -r \ '.items[] | select(.status.conditions[]?.reason == "Reconciling") | select(.status.featureDisabled != true) | select( "\(.status)" | contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'컨트롤 플레인 노드 3개와 워커 노드 3개가 있는 Kubernetes 클러스터의 경우 업그레이드 시간은 약 20분입니다. 20분이 지나도 하위 구성요소가
Reconciling상태로 표시되면 인프라 운영자 그룹에 문의하여 추가 지원을 받으세요.