Menjalankan alat pra-upgrade

Dokumen ini menunjukkan cara menjalankan alat mandiri sebagai persiapan untuk {i>upgrade.<i} Sebelum mengupgrade admin atau cluster pengguna yang ada di Google Distributed Cloud versi 1.9 dan versi yang lebih baru, sebaiknya jalankan alat pra-upgrade.

Untuk menjalankan alat ini, gunakan skrip bash dalam dokumen ini yang menggunakan {i>Secure Hash Algorithms <i}(SHA) yang di-hard code. Untuk setiap rilis alat, dokumen akan diperbarui dengan SHA baru. Skrip membuat Tugas Kubernetes menjalankan pemeriksaan preflight versi tertentu, bergantung pada versi yang dipilih. meng-upgrade.

Pemeriksaan pra-upgrade

Alat ini akan memeriksa hal berikut sebelum Anda mengupgrade cluster pengguna:

Kategori Deskripsi
Kondisi Cluster
  • Memvalidasi PDB di semua namespace cluster admin.
  • Memvalidasi PDB di semua namespace cluster pengguna.
  • Memvalidasi bahwa upgrade cluster admin sebelumnya berhasil diselesaikan.
Konfigurasi
  • Merekomendasikan versi patch yang akan di-upgrade.
  • Memeriksa apakah kunci SA akses komponen dihapus total yang dijelaskan dalam terkait masalah umum.
  • Jika Anda mengupgrade ke versi 1.10, berikan peringatan jika Anda perlu menerapkan solusi dalam masalah.

Alat ini akan memeriksa hal berikut sebelum Anda mengupgrade cluster admin:

Kategori Deskripsi
Kondisi Cluster Memvalidasi PodDisruptionBudgets (PDB) di semua namespace cluster admin.
Konfigurasi

Mempersiapkan untuk menjalankan alat

  1. Mengupgrade workstation admin Anda jika Anda belum melakukannya.

  2. Jalankan gkectl prepare untuk mengimpor OS image ke vSphere jika Anda belum melakukannya:

    gkectl prepare \
        --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Ganti kode berikut:

    • TARGET_VERSION: Versi patch Google Distributed Cloud tujuan upgrade. Format untuk nomor versi harus versi patch lengkap, seperti 1.13.10-gke.42.

    • ADMIN_CLUSTER_KUBECONFIG: Jalur ke admin {i>cluster kubeconfig<i}.

  3. Jika Anda menggunakan registry pribadi, download container preflight gambar lengkap dengan docker digest yang disediakan, lalu upload gambar tersebut ke {i>registry<i}. Jika Anda tidak menggunakan registry pribadi, lanjutkan ke langkah berikutnya.

    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
    

    Ganti REGISTRY_ADDRESS dengan registry pribadi alamat IPv6

  4. Dalam skrip bash berikut, tetapkan nilai untuk placeholder ini:

    • ADMIN_CLUSTER_KUBECONFIG: Jalur ke admin {i>cluster kubeconfig<i}.

    • REGISTRY_ADDRESS: Jika cluster admin menggunakan registry pribadi, ini adalah alamat {i> registry<i} pribadi yang Anda tentukan di langkah sebelumnya. Jika Anda tidak menggunakan registry pribadi, tentukan kantor pendaftaran publik: 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
    
  5. Simpan skrip bash di atas ke file bernama pre-upgrade.sh dan buat file tersebut dapat dieksekusi:

    chmod +x pre-upgrade.sh
    

Jalankan skrip:

  1. Argumen yang Anda berikan saat menjalankan skrip bergantung pada apakah Anda mengupgrade cluster pengguna atau cluster admin:

    • Sebelum mengupgrade cluster admin, jalankan skrip sebagai berikut:
    ./pre-upgrade.sh TARGET_VERSION
    
    • Sebelum mengupgrade cluster pengguna:
    ./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
    

    Ganti USER_CLUSTER_NAME dengan nama pengguna yang akan Anda upgrade.

    Outputnya mirip dengan hal berikut ini:

    job.batch/pre-upgrade-2023-0822-213551 created
    
  2. Jalankan perintah berikut di Pod yang dikontrol oleh tugas untuk mendapatkan daftar hasil validasi.

    kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Ganti kode berikut:

    • JOB_NAME: Ini adalah nama tugas yang skrip output dari langkah sebelumnya.

    • JOB_NAMESPACE: Nilai yang Anda tetapkan bergantung pada baik Anda mengupgrade cluster admin atau pengguna. Jika Anda mengupgrade cluster admin, tentukan kube-system. Jika Anda mengupgrade cluster pengguna, menentukan USER_CLUSTER_NAME-gke-onprem-mgmt.

    Tunggu beberapa menit sampai tugas selesai atau sampai batas backoff dan gagal. Dalam hasilnya, tinjau Reason untuk memeriksa apakah ada pemeriksaan dengan status Warning, Unknown, atau Failure untuk mengetahui apakah Anda dapat menyelesaikan menyelesaikan masalah.

  3. Sebelum mengupgrade cluster, jalankan perintah berikut untuk menghapus Tugas:

    kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG