이 문서에서는 업그레이드를 준비하기 위해 독립형 도구를 실행하는 방법을 보여줍니다. Google Distributed Cloud 버전 1.9 이상의 관리자 또는 사용자 클러스터를 업그레이드하기 전에 업그레이드 전 도구를 실행하는 것이 좋습니다.
도구를 실행하려면 이 문서에서 하드 코딩된 보안 해시 알고리즘(SHA)을 사용하는 bash 스크립트를 사용합니다. 이 문서는 도구의 출시 버전이 출시될 때마다 새 SHA로 업데이트됩니다. 이 스크립트는 업그레이드할 버전에 따라 특정 버전의 프리플라이트 검사를 실행하는 Kubernetes 작업을 만듭니다.
업그레이드 전 검사
이 도구는 사용자 클러스터를 업그레이드하기 전에 다음을 확인합니다.
카테고리 | 설명 |
---|---|
클러스터 상태 |
|
구성 |
|
이 도구는 관리자 클러스터를 업그레이드하기 전에 다음을 확인합니다.
카테고리 | 설명 |
---|---|
클러스터 상태 | 관리자 클러스터의 모든 네임스페이스에서 PodDisruptionBudgets (PDB)를 검증합니다. |
구성 |
|
도구 실행 준비
아직 업그레이드하지 않았으면 관리자 워크스테이션을 업그레이드합니다.
OS 이미지를 vSphere로 가져오지 않았으면
gkectl prepare
를 실행합니다.gkectl prepare \ --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
다음을 바꿉니다.
TARGET_VERSION
: 업그레이드할 Google Distributed Cloud 패치 버전입니다. 버전 번호 형식은1.13.10-gke.42
와 같은 완전한 패치 버전이어야 합니다.ADMIN_CLUSTER_KUBECONFIG
: 관리자 클러스터 kubeconfig의 경로입니다.
비공개 레지스트리를 사용하는 경우 제공된 Docker 다이제스트와 함께 프리플라이트 컨테이너 이미지를 다운로드하고 이미지를 비공개 레지스트리에 업로드합니다. 비공개 레지스트리를 사용하지 않는 경우 다음 단계로 건너뜁니다.
export SRC_IMAGE=gcr.io/gke-on-prem-release/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234 export DST_IMAGE=REGISTRY_ADDRESS/preflight:$(date +%Y-%m%d-%H%M%S) docker pull $SRC_IMAGE docker tag $SRC_IMAGE $DST_IMAGE docker push $DST_IMAGE
REGISTRY_ADDRESS
를 비공개 레지스트리 주소로 바꿉니다.다음 bash 스크립트에서 이러한 자리표시자의 값을 설정합니다.
ADMIN_CLUSTER_KUBECONFIG
: 관리자 클러스터 kubeconfig의 경로입니다.REGISTRY_ADDRESS
: 관리자 클러스터에서 비공개 레지스트리를 사용하는 경우 이전 단계에서 지정한 비공개 레지스트리 주소입니다. 비공개 레지스트리를 사용하지 않는 경우 공개 레지스트리(gcr.io/gke-on-prem-release
)를 지정합니다.
#!/bin/bash UPGRADE_TARGET_VERSION=${1} CLUSTER_NAME=${2} ADMIN_KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG REGISTRY_ADDRESS=REGISTRY_ADDRESS pre_upgrade_namespace=kube-system if [[ -z "$CLUSTER_NAME" ]] then echo "Running the pre-ugprade tool before admin cluster upgrade" else echo "Running the pre-ugprade tool before user cluster upgrade" pre_upgrade_namespace=$CLUSTER_NAME-gke-onprem-mgmt fi kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: pre-upgrade-job namespace: $pre_upgrade_namespace EOF kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: creationTimestamp: null name: pre-upgrade-job-rolebinding-in-$pre_upgrade_namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: onprem-user-cluster-controller-role subjects: - kind: ServiceAccount name: pre-upgrade-job namespace: $pre_upgrade_namespace EOF kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: pre-upgrade-$(date +%Y-%m%d-%H%M%S) namespace: $pre_upgrade_namespace labels: onprem.cluster.gke.io/job-usage: preflight spec: ttlSecondsAfterFinished: 2592000 backoffLimit: 2 template: metadata: labels: onprem.cluster.gke.io/pod-usage: preflight spec: containers: - name: preflight image: $REGISTRY_ADDRESS/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234 imagePullPolicy: Always command: - /preflight - --upgrade-target-version - "$UPGRADE_TARGET_VERSION" - --cluster-name - "$CLUSTER_NAME" - --scenario - pre-upgrade restartPolicy: Never serviceAccountName: pre-upgrade-job imagePullSecrets: - name: private-registry-creds EOF
위의 bash 스크립트를
pre-upgrade.sh
파일에 저장하고 실행 파일로 만듭니다.chmod +x pre-upgrade.sh
스크립트 실행
스크립트를 실행할 때 제공하는 인수는 사용자 클러스터 또는 관리자 클러스터를 업그레이드하는지에 따라 달라집니다.
- 관리자 클러스터를 업그레이드하기 전에 다음과 같이 스크립트를 실행합니다.
./pre-upgrade.sh TARGET_VERSION
- 사용자 클러스터를 업그레이드하기 전에는 다음을 실행합니다.
./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
USER_CLUSTER_NAME
을 업그레이드할 사용자 클러스터의 이름으로 바꿉니다.출력은 다음과 비슷합니다.
job.batch/pre-upgrade-2023-0822-213551 created
작업에서 제어하는 포드에서 다음 명령어를 실행하여 유효성 검사 결과 목록을 가져옵니다.
kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
다음을 바꿉니다.
JOB_NAME
: 이전 단계에서 스크립트가 출력하는 작업의 이름입니다.JOB_NAMESPACE
: 관리자 또는 사용자 클러스터 업그레이드 여부에 따라 설정하는 값이 달라집니다. 관리자 클러스터를 업그레이드하는 경우kube-system
을 지정합니다. 사용자 클러스터를 업그레이드하는 경우USER_CLUSTER_NAME-gke-onprem-mgmt
를 지정합니다.
작업이 완료되거나 백오프 한도에 도달하여 실패할 때까지 몇 분 정도 기다립니다. 결과에서
Warning
,Unknown
또는Failure
상태 검사에 대한Reason
을 검토하여 문제를 해결할 수 있는지 확인합니다.클러스터를 업그레이드하기 전에 다음 명령어를 실행하여 작업을 삭제합니다.
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG