Masalah umum Google Distributed Cloud dengan air gap 1.12.x

Kategori Versi yang diidentifikasi Masalah dan solusi
Pencadangan dan pemulihan 1.12.1

Pencadangan volume tidak menyelesaikan endpoint penyimpanan objek tingkat organisasi

Cluster penyimpanan untuk pencadangan volume menggunakan server DNS eksternal, bukan penerus, yang mencegah pencadangan volume menyelesaikan endpoint penyimpanan objek tingkat org. Pada versi 1.12, traffic pencadangan memerlukan rute baru ke setiap organisasi.

Solusi:

IO harus mengupdate cluster penyimpanan untuk mengaktifkan penyelesaian DNS tingkat organisasi, dan untuk membuat rute dari antarmuka logis (LIF) replikasi ke endpoint penyimpanan objek di setiap organisasi. Salin dan tempel perintah berikut dari bootstrapper.

  1. Tetapkan variabel lingkungan KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Temukan cluster penyimpanan:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Temukan CIDR eksternal instance:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Perbarui cluster penyimpanan untuk menggunakan penerus dan dengan rute ke CIDR eksternal instance:
    kubectl patch storagecluster "${storage_cluster}" -n gpc-system --type='json' -p='[{"op": "replace", "path": "/spec/additionalNetworks/0/destinationSubnets", "value": '"${instance_external_cidr}"'}, {"op": "replace", "path": "/spec/dnsConfig/serviceRef/name", "value": "gpc-coredns-forwarder-udp"}]'
  5. Mulai ulang pengontrol untuk memastikan perubahan diterapkan:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Pencadangan dan pemulihan 1.12.1

Rute pencadangan ke organisasi gagal

Gejala:

Mengirim permintaan ke gateway ingress admin org dari node ONTAP gagal karena tidak ada rute dari subnet cadangan ke bidang kontrol org.

Solusi:

IO harus mengupdate cluster penyimpanan untuk mengaktifkan penyelesaian DNS tingkat organisasi, dan untuk membuat rute dari antarmuka logis (LIF) replikasi ke endpoint penyimpanan objek di setiap organisasi. Salin dan tempel perintah berikut dari bootstrapper.

  1. Tetapkan variabel lingkungan KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Temukan cluster penyimpanan:
    storage_cluster=$(kubectl get storagecluster -n gpc-system | awk 'NR == 2{print $1}')
  3. Temukan CIDR eksternal instance:
    instance_external_cidr=$(kubectl get cidrclaim -n gpc-system instance-external-cidr -ojsonpath='{.spec.ipv4Spec.staticCidrBlocks}')
  4. Perbarui cluster penyimpanan untuk menggunakan penerus dan dengan rute ke CIDR eksternal instance:
    kubectl patch storagecluster "${storage_cluster}" -n gpc-system --type='json' -p='[{"op": "replace", "path": "/spec/additionalNetworks/0/destinationSubnets", "value": '"${instance_external_cidr}"'}, {"op": "replace", "path": "/spec/dnsConfig/serviceRef/name", "value": "gpc-coredns-forwarder-udp"}]'
  5. Mulai ulang pengontrol untuk memastikan perubahan diterapkan:
    kubectl rollout restart deploy/file-storage-backend-controller -n file-system
Pencadangan dan pemulihan 1.12.4

Volume persisten yang dicadangkan tidak dapat dihapus

Gejala:

Volume persisten tidak dapat dihapus jika berada dalam hubungan snap mirror.

Solusi:

IO menghapus hubungan SnapMirror dengan volume sebagai tujuan.

  1. Tetapkan variabel lingkungan KUBECONFIG:
    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
  2. Simpan nama PV yang bermasalah dalam variabel:
    PV_NAME={ PV_NAME }
  3. Mendapatkan nama volume internal:
    volume_name=$(kubectl get pv ${PV_NAME?} -o jsonpath='{.spec.csi.volumeAttributes.internalName}')
  4. Dapatkan akses ke ONTAP dengan mengikuti langkah-langkah dalam runbook FILE-A0006.
  5. Hapus hubungan dengan volume ini sebagai sumber, menggunakan sandi yang dikumpulkan sebelumnya:
    ssh ${username?}@${mgmt_ip?} snapmirror delete -source-volume ${volume_name?} -destination-path "*"
    # enter the password collected from the breakglass secret
Pencadangan dan pemulihan 1.12.0
1.12.1
1.12.2

Repositori Cadangan sebenarnya responsif

Jika repositori cadangan tidak memiliki status error apa pun, tetapi notifikasi untuk repositori tersebut muncul, metrik notifikasi untuk repositori tersebut mungkin muncul karena error. Ini adalah masalah umum di 1.12.0, dan telah diperbaiki di 1.12.4. Penyebab masalah ini adalah bahwa repositori cadangan secara berkala mencoba terhubung ke penyimpanan objek sebagai pemeriksaan kondisi, dan memasuki status tidak responsif jika gagal terhubung. Namun, jika repositori cadangan pulih, metrik untuk menunjukkan kondisinya tidak akan beralih kembali dengan benar, sehingga menyebabkan pemberitahuan tetap berada dalam status aktif tanpa batas. Untuk mengatasi masalah ini, Anda dapat menghapus dan membuat ulang repositori cadangan secara manual untuk mereset metrik kondisinya. Ikuti langkah-langkah dalam buku pedoman BACK-R0003 untuk membuat ulang repositori cadangan.

Penagihan 1.12.4

Subkomponen bil-storage-system-cluster - Reconciliation error: E0121 gagal

Gejala:

Pesan error: bil-storage-system-cluster - Reconciliation error: E0121- rollback chart: no Job with the name "billing-storage-system-init-job-628" found

Subkomponen bil-storage-system-cluster gagal merekonsiliasi karena tugas yang sudah tidak berlaku. billing-storage-system-init-job-628 dan billing-storage-system-init-job-629 tetap ada setelah penyelesaian yang berhasil.

Solusi:

Selesaikan langkah-langkah berikut:

  1. Buat cadangan tugas penagihan yang tidak aktif:
    cd /root/USERNAME
    kubectl --kubeconfig /root/release/gdchservices/gdchservices-system-kubeconfig get jobs billing-storage-system-init-job-628 -n billing-system -o yaml > billing-storage-system-init-job-628.yaml
    kubectl --kubeconfig /root/release/gdchservices/gdchservices-system-kubeconfig get jobs billing-storage-system-init-job-629 -n billing-system -o yaml > billing-storage-system-init-job-629.yaml
  2. Menjeda subkomponen:
    export SUBCOMPONENT_NAME=bil-storage-system-cluster
    export SUBCOMPONENT_NAMESPACE=gdchservices-system-cluster
    
    kubectl annotate subcomponent "${SUBCOMPONENT_NAME:?}" -n "${SUBCOMPONENT_NAMESPACE:?}" lcm.private.gdc.goog/paused=true
  3. Hapus tugas yang sudah tidak berlaku.
  4. Mulai ulang oclcm-backend-controller.
  5. Lanjutkan subkomponen.
Block storage 1.12.4

Pod Grafana macet dalam status Init karena error pemasangan volume.

Gejala:

Pod Grafana di namespace anthos-identity-service-obs-system dan platform-obs-obs-system mengalami masalah karena error pemasangan volume.Init Pesan error di log kubelet menunjukkan masalah multi-lampiran. Masalah ini berasal dari bug di Trident, yang gagal mengidentifikasi dan memverifikasi perangkat pokok dengan benar untuk pemetaan LUKS, sehingga menyebabkan error multi-lampiran.

Solusi:

Periksa PVC untuk mengetahui apakah ada deletionTimestamp. Jika tidak ada deletionTimestamp (migrasi Pod), ikuti langkah-langkah berikut:

  1. Periksa VolumeAttachment untuk PVC guna mengidentifikasi tempat volume saat ini terpasang.
  2. Batasi Nodes dalam cluster yang tidak cocok dengan nilai ini.
  3. Hapus Pod yang gagal, tindakan ini akan menyebabkan Pod dimigrasikan kembali ke Node asli.

Setelah memeriksa, jika ada deletionTimestamp (Penghapusan volume), ikuti langkah-langkah berikut:

  1. Periksa VolumeAttachment untuk PVC guna mengidentifikasi tempat volume saat ini terpasang.
  2. Di Node, keluarkan konten file pelacakannya:
    cat /var/lib/trident/tracking/PVC_NAME.json
  3. Validasi bahwa perangkat LUKS yang ditemukan di kolom devicePath dari output file pelacakan benar-benar ditutup. Jalur ini tidak boleh ada pada tahap ini:
    stat DEVICE_PATH
  4. Validasi apakah nomor seri saat ini dipetakan ke perangkat multi-jalur.
    1. Salin nilai di kolom iscsiLunSerial pada file pelacakan.
    2. Konversi nilai ini menjadi nilai hex yang diharapkan:
      echo 'iISCSILUNSERIAL>' | xxd -l 12 -ps
    3. Dengan nilai baru ini, cari tahu apakah entri multi-jalur masih ada:
      multipath -ll | grep SERIAL_HEX
    4. Jika tidak ada, hapus file pelacakan.
    5. Jika ada, Anda akan melihat nilai hex serial yang sedikit lebih panjang daripada yang ditelusuri, yang akan disebut multipathSerial. Jalankan perintah berikut dan temukan perangkat blok:
      multipath -ll MULTIPATH_SERIAL
    6. Kemudian, jalankan perintah berikut, dengan perintah terakhir dijalankan secara unik untuk setiap perangkat blok:
                systemctl restart iscsid
                systemctl restart multipathd
                multipath -f MULTIPATH_SERIAL
                echo 1 > /sys/block/BLOCK_DEVICE_NAME/device/delete
                  
Pengelolaan cluster 1.12.0
1.12.1
1.12.2
1.12.4

Tugas machine-init gagal selama penyediaan cluster

Gejala:

  1. Selama penyediaan cluster, tugas machine-init dari node bidang kontrol kedua gagal dengan pesan berikut:
    FAILED! => {"changed": true, "cmd": "/usr/bin/kubeadm join phase control-plane-prepare certs --config /dev/stdin --v 5".
  2. Lihat log:
    kubectl --kubeconfig=ADMIN_KUBECONFIG logs -p kube-apiserver-{first_node_name} -n kube-system | grep "etcdmain: open /etc/kubernetes/pki/etcd/ca.crt: permission denied"

    Output menampilkan hasil yang tidak kosong.

Solusi:

  1. Aktifkan/nonaktifkan izin /etc/kubernetes/pki/etcd/ca.crt. Operasi ini sangat sensitif terhadap waktu. Pengalihan izin harus terjadi setelah pekerjaan machine-init sebelumnya dijalankan, tetapi sebelum pekerjaan machine-init berikutnya dijalankan, karena machine-init akan menggantikan izin kembali ke root.
  2. Mulai ulang etcd di node kedua untuk memulihkan etcd di node pertama dari loop error.

    Setelah menyelesaikan dua langkah ini, kube-apiserver di node pertama mulai berjalan, dan tugas machine-init berikutnya berhasil.

Pengelolaan cluster 1.12.2

PodCIDR IPv4 yang diperlukan tidak tersedia

Gejala:

Agen cilium menampilkan peringatan berikut:

level=warning msg="Waiting for k8s node information" error="required IPv4 PodCIDR not available" subsys=k8s 

Solusi:

  1. Cari tahu alamat IP node yang ingin Anda hapus.
  2. Hapus alamat IP dari spec.nodes di resource kustom NodePool.
  3. Tunggu hingga node dihapus sepenuhnya dari NodePool. Jika node tidak dihapus, lakukan force-remove:
    1. Tambahkan anotasi baremetal.cluster.gke.io/force-remove=true ke resource kustom Machine:
      kubectl -n org-1-system-cluster annotate machine IP_ADDRESS baremetal.cluster.gke.io/force-remove=true 
  4. Tambahkan kembali alamat IP ke spec.nodes di resource kustom NodePool.
Logging 1.12.0
1.12.1

Log server Kubernetes API tidak diteruskan ke tujuan SIEM

Gejala:

Setelah Anda selesai menyiapkan ekspor ke sistem SIEM eksternal, input SIEM tidak disertakan dalam pipeline pemrosesan Fluent Bit dan log server Kubernetes API tidak ada di SIEM ini.

Jaringan 1.12.4

Tugas machine-init gagal selama upgrade

Gejala:

Saat mengupgrade dari versi 1.12.2 ke 1.12.4, jika node dihapus lalu ditambahkan kembali, proses machine-init untuk node tersebut mungkin gagal. Kegagalan ini terjadi karena traffic jaringan dari node yang ditambahkan kembali ke layanan bidang kontrol penting ditolak oleh kebijakan ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes. Error ini ditandai oleh pesan status dalam contoh output ini:
      Feb 17 18:52:52.330: 30.0.0.9:41046 (world) <> 30.0.0.7:2379 (host) policy-verdict:none INGRESS DENIED (TCP Flags: SYN)
      Feb 17 18:52:52.330: 30.0.0.9:41046 (world) <> 30.0.0.7:2379 (host) Policy denied DROPPED (TCP Flags: SYN)

Solusi:

Untuk mengurangi masalah ini, ikuti langkah-langkah berikut:

  1. Untuk cluster admin root:
    1. Dapatkan CIDR dari CIDRClaim/org-external-cidr -n root (khususnya kolom .status.ipv4AllocationStatus.allocatedCidrBlocks). Jalankan perintah berikut di cluster admin root:
      ROOTCIDRs=$(ka get cidrclaim/org-external-cidr -n root -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Tambahkan CIDR ini ke ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes, khususnya ke kolom .spec.ingress.fromCIDR. Terapkan perubahan ini di cluster admin root dengan perintah:
      ka get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ROOTCIDRs}"'}]' \
        | ka apply -f -
  2. Untuk cluster admin org:
    1. Mendapatkan CIDR untuk organisasi (misalnya, org-1) dari CIDRClaim/org-external-cidr -n org-1 (khususnya kolom .status.ipv4AllocationStatus.allocatedCidrBlocks). Perintah ini dijalankan terhadap cluster admin root untuk mendapatkan CIDR 'org-1':
      ORGCIDRs=$(ka get cidrclaim/org-external-cidr -n org-1 -o json | jq '.status.ipv4AllocationStatus.allocatedCidrBlocks')
    2. Tambahkan CIDR ini ke ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes, khususnya ke kolom .spec.ingress.fromCIDR. Terapkan perubahan ini di cluster admin org yang sesuai dengan perintah:
      ko get ciliumclusterwidenetworkpolicy/base-node-policy-for-control-plane-nodes -o json \
        | jq '.spec.ingress += [{"fromCIDR":'"${ORGCIDRs}"'}]' \
        | ko apply -f -

Perubahan ini hanya perlu dilakukan sekali sebelum memulai upgrade.

Jaringan 1.12.0
1.12.1

Masalah terkait update, penghentian, dan penjadwalan VM dan penampung

Gejala:

Di node bare metal cluster sistem, dua container anetd tidak dapat dihentikan. Setelah menghentikan proses secara paksa, memulai ulang kubelet dan containerd, pod anetd dibuat ulang, tetapi semua container mengalami masalah podInit dan containerd melaporkan pesan error:

`failed to create containerd task: failed to create shim task: context deadline exceeded: unknown`.

Hal ini memblokir Container Network Interface (CNI) agar tidak dimulai dan menghentikan penjadwalan pod lainnya.

Solusi:

Lakukan mitigasi berikut untuk mencegah status node ini:

  • Jangan menjadwalkan lebih dari 10 PVC sekaligus pada satu node. Tunggu hingga mereka terpasang sebelum menjadwalkan lebih banyak. Hal ini paling terlihat saat mencoba membuat VM.
  • Perbarui file /etc/lvm/lvm.conf di setiap node untuk menyertakan baris: filter = [ "r|/dev/dm.|", "r|/dev/sg.|" ] dalam blok devices{}

Jika node memasuki status yang menunjukkan waktu tunggu untuk pemasangan dan pemasangan volume, atau tidak dapat menghapus volume, periksa jumlah proses vg yang tertunda di node untuk mengidentifikasi apakah node berada dalam status yang sangat buruk ini. Cara paling andal untuk memperbaiki node dalam status ini adalah dengan memulai ulang node.

Ada mode kegagalan lain yang mungkin dialami. Mode kegagalan tersebut memiliki tanda tangan berikut pada upaya pemasangan: mount(2) system call failed: No space left on device. Hal ini mungkin berasal dari propagasi pemasangan pada node. Periksa ini dengan menjalankan cat /proc/mounts | grep devtmpfs | awk '{ print $2 }' | sort -n | uniq -c. Jika salah satu dari nilai ini menunjukkan nilai yang lebih besar dari satu, hapus pod yang menggunakannya, dan hal ini akan memicu pelepasan. Jika tidak berhasil, lepaskan jalur tersebut secara manual. Jika Anda masih mengalami masalah, mulai ulang perangkat.

Jaringan 1.12.2

GDC gagal membuat ACL pengalihan dari kebijakan traffic selama proses bootstrapping awal

Dalam skenario tertentu, karena kondisi persaingan, Google Distributed Cloud (GDC) yang terisolasi gagal membuat ACL switch yang diperlukan untuk resource kustom Kubernetes selama bootstrap awal Distributed Cloud.

Gejala:

Mencantumkan CR ACL switch:

kubectl get switchacls -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig

Output perintah ini menunjukkan bahwa tidak ada ACL switch mgmt (mgmt-switch-acl) yang dibuat.

No resources found in gpc-system namespace.

Solusi:

  1. Mencantumkan CR Kebijakan Traffic:
    kubectl get trafficpolicies -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig

    Output menampilkan dua CR Kubernetes Kebijakan Traffic:

    NAME                          AGE     NAME
    default-traffic-policy-data   4d17h   default-traffic-policy-data
    default-traffic-policy-mgmt   4d17h   default-traffic-policy-mgmt
  2. Edit CR Kubernetes kebijakan traffic default-traffic-policy-mgmt:
    kubectl edit trafficpolicies default-traffic-policy-mgmt -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  3. Buka aturan kebijakan terakhir dalam file ini, yang mungkin berada di akhir file.
  4. Identifikasi kolom deskripsi aturan kebijakan terakhir. Kolom mungkin terlihat seperti ini:
    Deny All rule for Management Network
  5. Edit deskripsi ini dan tambahkan The ke awal baris deskripsi:
    The Deny All rule for Management Network
  6. Simpan file dan keluar.
  7. Mencantumkan kembali CR ACL switch Kubernetes:
    kubectl get switchacls -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig
  8. Output mencantumkan ACL pengalihan pengelolaan (mgmt-switch-acl):
    NAME              AGE   NAME
    mgmt-switch-acl   23h   mgmt-switch-acl
Server fisik 1.12.1
1.12.2

NodePool memiliki server dalam status tidak diketahui selama pembuatan

Gejala:

Saat menyediakan Server selama pembuatan cluster apa pun, ada kemungkinan server ditandai telah disediakan, tetapi tidak memiliki kondisi Provision-Ready. Akibatnya, NodePool tidak dapat menggunakan server ini. Contoh pesan peristiwa error di NodePool mungkin terlihat seperti ini:

Events:
  Type     Reason          Age    From    Message
  ----     ------          ----   ----    -------
  Warning  ReconcileError  xxx    Server  policy failure PolicyPreflightCompleted(UnreachableError): {PolicyPreflightCompleted False 3 2023-11-07 22:10:56 +0000 UTC UnreachableError reachability err: Failed to connect to the host via ssh: ssh: connect to host xx.xx.xx.xx port 22: Connection timed out}
      

Solusi:

Reset ILO dengan menjalankan skrip berikut:

      SERVER_NAME=
      ROOT_ADMIN_KUBECONFIG=
      ILO_IP=$(kubectl get servers ${SERVER_NAME} -n gpc-system --template={{.spec.bmc.ip}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG})
      SECRET_NAME=$(kubectl get secrets -o go-template='{{range $index,$pod := .items}}{{.metadata.name}}{{"\n"}}{{end}}' -n gpc-system --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | grep bmc | grep ${SERVER_NAME})
      ILO_USER=$(kubectl get secrets ${SECRET_NAME} -n gpc-system --template={{.data.username}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | base64 -d)
      ILO_PASS=$(kubectl get secrets ${SECRET_NAME} -n gpc-system --template={{.data.password}} --kubeconfig=${ROOT_ADMIN_KUBECONFIG} | base64 -d)
      # Perform iLO Reset
      
      curl -k -u ${ILO_USER}:${ILO_PASS}  -H "Content-Type: application/json" -H "OData-Version: 4.0" https://${ILO_IP}/redfish/v1/Managers/1/Actions/Manager.Reset --data '{"ResetType":"ForceRestart"}' -X POST | jq
      
      # Perform server power cycle, start with power off target server
       
       curl -k -u ${ILO_USER}:${ILO_PASS} -H "Content-Type: application/json" -H "OData-Version: 4.0" -X POST https://${ILO_IP}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset --data '{"ResetType":"ForceOff"}' | jq .
      
      # Verify target server powered off successfully
      
      curl -kqs -u ${ILO_USER}:${ILO_PASS} https://${ILO_IP}/redfish/v1/Systems/1 | jq '.PowerState'
       
      # Power server back
      
      curl -k -u ${ILO_USER}:${ILO_PASS} -H "Content-Type: application/jsonls " -H "OData-Version: 4.0" -X POST https://${ILO_IP}/redfish/v1/Systems/1/Actions/ComputerSystem.Reset --data '{"ResetType":"On"}' | jq .
       
      

Dalam kasus yang jarang terjadi, prosedur reset iLO sebelumnya mungkin tidak sepenuhnya menyelesaikan masalah, sehingga perlu dilakukan penyediaan ulang server. Lihat runbook OS-P0002 dan OS-P0003 untuk mengetahui prosedur mendetailnya.

Server fisik 1.12.2

Upgrade firmware node gagal di organisasi tenant

Gejala:

Upgrade node bare metal macet dalam status in-progress selama lebih dari tiga jam.

Solusi:

Ikuti langkah-langkah dalam runbook SERV-R0005.

Jaringan 1.12.1

Skrip pra-penginstalan gagal di beberapa tombol

Gejala:

POAP terus gagal dan log POAP menampilkan pesan seperti ini:

2024 Feb 27 20:20:25 switch %$ VDC-1 %$ %USER-1-SYSTEM_MSG: S/N[FDO26391GHS]-MAC[98:A2:C0:F8:60:6A] - Running: 'nxos.10.3.1.bin' - /script.sh
2024 Feb 27 20:20:25 switch %$ VDC-1 %$ %USER-1-SYSTEM_MSG: S/N[FDO26391GHS]-MAC[98:A2:C0:F8:60:6A] - Target: 'nxos64-cs.10.3.4a.M.bin' - /script.sh

Anda tidak dapat menemukan nxos.10.3.1.bin, tetapi menemukan sesuatu yang serupa seperti nxos64-cs.10.3.1.F.bin di direktori bootflash switch.

Solusi:

Di mesin bootstrapper, selesaikan langkah-langkah berikut. Anda harus menyelesaikan langkah-langkah ini saat proses pra-penginstalan sedang berlangsung. Jika ada beberapa folder /tmp/preinstall-bootstrap-, terapkan perubahan ke folder saat ini yang digunakan oleh proses pra-penginstalan dengan memeriksa log proses pra-penginstalan. Jika Anda perlu memulai ulang perintah pra-penginstalan, tindakan ini juga akan membuat folder /tmp/preinstall-bootstrap- baru.

  1. Buka folder /tmp/preinstall-bootstrap-RANDOM_NUMBER .
  2. Di dalam folder, temukan file poap.py.
  3. Hapus baris dengan checksum md5 sepenuhnya dalam file ini sehingga head -n 4 poap.py terlihat seperti ini:
    #!/bin/env python3
    import glob
    import os
    import pkgutil
  4. Di file yang sama, tambahkan baris berikut ke version_to_image_file:
        "nxos.10.2.1.bin": "nxos64.10.2.1.F.bin",
        "nxos.10.2.2.bin": "nxos64-cs.10.2.2.F.bin",
        "nxos.10.2.3.bin": "nxos64-cs.10.2.3.F.bin",
        "nxos.10.2.4.bin": "nxos64-cs.10.2.4.M.bin",
        "nxos.10.2.5.bin": "nxos64-cs.10.2.5.M.bin",
        "nxos.10.2.6.bin": "nxos64-cs.10.2.6.M.bin",
        "nxos.10.2.7.bin": "nxos64-cs.10.2.7.M.bin",
        "nxos.10.3.1.bin": "nxos64-cs.10.3.1.F.bin",
        "nxos.10.3.2.bin": "nxos64-cs.10.3.2.F.bin",

    Bagian file yang diperbarui akan terlihat seperti ini:

    version_to_image_file = {
        "nxos.10.2.1.bin": "nxos64.10.2.1.F.bin",
        "nxos.10.2.2.bin": "nxos64-cs.10.2.2.F.bin",
        "nxos.10.2.3.bin": "nxos64-cs.10.2.3.F.bin",
        "nxos.10.2.4.bin": "nxos64-cs.10.2.4.M.bin",
        "nxos.10.2.5.bin": "nxos64-cs.10.2.5.M.bin",
        "nxos.10.2.6.bin": "nxos64-cs.10.2.6.M.bin",
        "nxos.10.2.7.bin": "nxos64-cs.10.2.7.M.bin",
        "nxos.10.3.1.bin": "nxos64-cs.10.3.1.F.bin",
        "nxos.10.3.2.bin": "nxos64-cs.10.3.2.F.bin",
        "nxos.10.3.3.bin": "nxos64-cs.10.3.3.F.bin",
        "nxos.10.3.4a.bin": "nxos64-cs.10.3.4a.M.bin",
    }
  5. Jalankan md5sum poap.py untuk mendapatkan jumlah md5 dan tambahkan kembali ke poap.py sehingga head -n 4 poap.py terlihat seperti ini:
    #!/bin/env python3
    #md5sum="396bed5a5f579b80da5fac6edf0b590c"
    import glob
    import os
Jaringan 1.12.1

Upgrade dari 1.11.x ke 1.12.1 gagal karena pengontrol pnet tidak berhasil membuat resource kustom (CR) hairpinlink.

Solusi:

  1. Setelah upgrade, di cluster admin root, edit file clusterroles/pnet-core-backend-controllers-role.
  2. Telusuri hairpinlinks, lalu tambahkan izin create,update,delete ke resource.
  3. Verifikasi bahwa CR hairpinlinks dan hairpinbgpsessions telah dibuat.
Server NTP 1.12.1

Pod server relai NTP mengalami error setelah dimulai ulang

Gejala:

  • Anda mungkin melihat pesan berikut saat menjalankan perintah kubectl get pods:
    ntp-system                      ntp-relay-server-75bbf                                            1/2     CrashLoopBackOff    123 (5m12s ago)   24h
  • Anda mungkin melihat peringatan pemeriksaan keaktifan di log:
    Warning  BackOff    5m55s (x82 over 28m)      kubelet  Back-off restarting failed container ntp-image in pod ntp-relay-server-75bbf_ntp-system(28e4e28f-4f99-4c6e-8c26-d271f0c7995c)
    Warning  Unhealthy  <invalid> (x37 over 35m)  kubelet  Liveness probe failed: Leap status is Not synchronised

Masalah ini dapat menyebabkan server memiliki waktu yang tidak tersinkron.

Solusi:

  1. Buka daemonset ntp untuk mengedit:
    kubectl edit daemonset/ntp-relay-server -n ntp-system
  2. Hapus bagian livenessProbe: hingga baris timeoutSeconds: 30.
  3. Tambahkan bagian berikut di container ntp-image:
    securityContext:
      capabilities:
        add:
        - SYS_TIME
  4. Hal ini akan menghasilkan konfigurasi yang terlihat seperti berikut:

    containers:
      - name: ntp-image
      image: "DOCKER_REGISTRY/DOCKER_REPOSITORY/ntp-relay-server:DOCKER_TAG"
      imagePullPolicy: Always
      securityContext:
        capabilities:
          add:
          - SYS_TIME
  5. Buka kebijakan NTP OS untuk mengedit:
    kubectl edit ospolicy/bm-ntp-policy -n gpc-system
  6. Hapus semua alamat IP NTP di bagian kebijakan. Setelah itu, kebijakannya akan terlihat seperti ini:
    policy:
      installPlaybook:
        extraVars:
          ntp_servers: {}
        name: server-ntp-config
        secrets: {}
          
Server NTP 1.12.1

Pod ntp-relay-job-xxxx mengalami error setelah dimulai ulang

Gejala:

Anda mungkin melihat pesan berikut saat menjalankan perintah kubectl get pods:

NAMESPACE                       NAME                                                              READY   STATUS              RESTARTS         AGE
ntp-system                      ntp-relay-job-1707869137-kd7p4                                    0/1     CrashLoopBackOff    3 (15s ago)      59s

Masalah ini disebabkan oleh pembersihan tugas upgrade yang tidak tepat. Anda tidak perlu melakukan tindakan apa pun dan tugas dapat dibiarkan dalam status error berulang.

Server NTP 1.12.2

Node OS memiliki waktu yang tidak tersinkronkan

Gejala:

Anda mungkin melihat pesan berikut di log cluster sistem:

INFO: task umount:200725 blocked for more than 120 seconds.

Hal ini menjadi masalah bagi server yang tidak menyinkronkan waktu. konfigurasi tidak diterapkan dengan benar dan harus diubah ke namespace lain agar dapat diterapkan dengan benar.

Solusi:

Terapkan langkah-langkah berikut ke semua cluster:

  1. Mencantumkan kebijakan OS yang ada:
    kubectl get ospolicies -n ntp-system

    Output menampilkan admin-ntp-policy atau worker-ntp-policy.

  2. Berdasarkan nama kebijakan, simpan ke file .yaml:
    kubectl get ospolicy/admin-ntp-policy -n ntp-system -o yaml > ntp-ospolicy.yaml
    kubectl get ospolicy/worker-ntp-policy -n ntp-system -o yaml > ntp-ospolicy.yaml
  3. Edit file dengan mengubah metadata.namespace dari ntp-system menjadi gpc-system, dan menghapus status: line dan semua yang ada setelahnya.
  4. Terapkan file yang telah diedit ke cluster:
    kubectl apply -f ntp-ospolicy.yaml
  5. Tunggu beberapa menit hingga pengontrol menerapkan kebijakan OS.
  6. Buat koneksi SSH ke salah satu node yang menerapkan OSPolicy, lalu jalankan cat /etc/chrony.conf. Output menampilkan pesan di awal file bahwa file tersebut dikelola oleh ansible dan server nist.time.gov atau ntp.pool telah dihapus dari konfigurasi.
Pencadangan dan Pemulihan VM 1.12.0

Setelan webhook VM mencegah pengguna memulai prosedur pencadangan dan pemulihan VM

Gejala:

Proses pencadangan dan pemulihan VM tidak dapat dimulai oleh pengguna karena setelan kontrol akses berbasis peran (RBAC) dan skema yang tidak tepat di pengelola VM.
Nama rencana pencadangan VM tidak boleh lebih dari 63 karakter. Misalnya, Anda mungkin melihat pesan error ini:

Internal error occurred: failed calling webhook
"vvirtualmachinebackupplantemplates.virtualmachine.gdc.goog":
failed to call webhook: Post "https://vmm-vm-controller-webhooks.vm-system.svc:443/validate-virtualmachine-gdc-goog-v1-virtualmachinebackupplantemplate?timeout=10s":
context deadline exceeded

Solusi:

Nama rencana pencadangan VM adalah gabungan dari nama VirtualMachineBackupPlanTemplate, jenis resource (yaitu vm atau vm-disk), dan nama resource tersebut. String gabungan ini harus tetap kurang dari 63 karakter.
Untuk melakukannya, buat nama resource ini tetap pendek saat membuatnya. Untuk mengetahui detail tentang pembuatan resource ini, lihat Membuat dan memulai instance VM dan Membuat rencana pencadangan untuk VM.

Layanan Database 1.12.0

Workload Layanan Database beroperasi dalam cluster sistem

Gejala:

Beban kerja Database Service disediakan dan dikonfigurasi dalam project terpisah di cluster sistem Distributed Cloud. Meskipun project digunakan untuk menerapkan batas administratif di Distributed Cloud, project tidak berdampak pada cara dan tempat beban kerja dieksekusi. Oleh karena itu, workload ini dapat berbagi infrastruktur komputasi yang mendasarinya dengan instance database lain dan berbagai sistem bidang kontrol.

Solusi:

Untuk beban kerja database yang memerlukan isolasi tambahan, pengguna dapat meminta pembuatan kumpulan node di cluster sistem. Node pool ini, yang harus dirujuk selama pembuatan project, memastikan workload database disediakan dan dieksekusi di infrastruktur komputasi khusus. Konfigurasi node pool terisolasi harus diselesaikan oleh Operator Infrastruktur.

Layanan Database 1.12.2

DBCluster AlloyDB Omni macet dalam status merekonsiliasi

Gejala:

Untuk AlloyDB Omni versi 15.2.1, jika beberapa cluster AlloyDB Omni dibuat di node yang sama, cluster yang terakhir dibuat akan mengalami error dalam status merekonsiliasi. Mendapatkan log postgresql dengan perintah

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- cat /obs/diagnostic/postgresql.log 
Anda akan melihat database tidak dapat dimulai dengan stacktrace yang mirip dengan berikut ini:

2024-08-19 21:20:15.594 UTC: [9400/walwriter] LOG:  [auxprocess.c:129]  BaseInit started for AuxProcType: walwriter
2024-08-19 21:20:15.595 UTC: [9400/walwriter] LOG:  [auxprocess.c:131]  BaseInit finished for AuxProcType: walwriter
*** SIGABRT received at time=1724102415 on cpu 25 ***
PC: @     0x7f03140a9d3c  (unknown)  (unknown)
2024-08-19 21:20:15.601 UTC: [9399/client backend] alloydbadmin@localhost(33906) [unknown] postgres 66c3b70f.24b7 57P03:FATAL:  [postmaster.c:2601]  the database system is not yet accepting connections
2024-08-19 21:20:15.601 UTC: [9399/client backend] alloydbadmin@localhost(33906) [unknown] postgres 66c3b70f.24b7 57P03:DETAIL:  Consistent recovery state has not been yet reached.
    @     0x5557f3b17e31        208  absl::AbslFailureSignalHandler()
    @     0x7f031405afd0    4677136  (unknown)
    @     0x7f0314e75b20  (unknown)  (unknown)
[PID: 9400] : *** SIGABRT received at time=1724102415 on cpu 25 ***
[PID: 9400] : PC: @     0x7f03140a9d3c  (unknown)  (unknown)
[PID: 9400] :     @     0x5557f3b17f75        208  absl::AbslFailureSignalHandler()
[PID: 9400] :     @     0x7f031405afd0    4677136  (unknown)
[PID: 9400] :     @     0x7f0314e75b20  (unknown)  (unknown)

Solusi:

1. Lakukan shell ke pod database

kubectl --kubeconfig $ORG_SYSTEM_KUBECONFIG exec -ti $DATABASE_POD_NAME -n $SHADOW_NS -- bash 
2. Buat file konfigurasi secara manual di /mnt/disks/pgsql/data/postgresql.conf.d/
echo "enable_lux_wal_writer = off" > /mnt/disks/pgsql/data/postgresql.conf.d/55user.conf
3. Mulai ulang database untuk memuat file konfigurasi
supervisorctl restart postgres
4. Database berhasil dimulai dengan output yang mirip dengan berikut ini:
Chose default config file: /etc/supervisor/supervisord.conf
postgres: ERROR (not running)
postgres: started

Firewall 1.12.0

Firewall bootstrap secret.yaml berisi TO-BE-FILLED

Gejala:

Selama deployment pelanggan, nama pengguna administrator file secret.yaml harus admin. Sebagai gantinya, file berisi TO-BE-FILLED setelah pembuatan pertama. Nama pengguna admin harus digunakan untuk menginisialisasi konfigurasi pertama ke firewall, dan melalui IP loopback admin\admin

Solusi:

Pastikan TO-BE-FILLED tidak ada di kredensial firewall berikut:

  • CELL_ID/CELL_ID-secret.yaml
  • CELL_ID-ab-rack/CELL_ID-secret.yaml
  • CELL_ID-ac-rack/CELL_ID-secret.yaml
  • Pastikan semua akun administrator firewall memiliki nama pengguna admin.

    Firewall 1.12.2

    bm-system-machine-init gagal di node pertama

    Gejala:

    Kebijakan firewall IDPS default tidak mendukung IP kustom organisasi untuk Direct Connect (DX) Interconnect. Akibatnya, pembuatan organisasi dengan IP kustom gagal karena IP kustom tidak dapat terhubung ke Harbor di admin root.

    Solusi:

    Untuk membuka blokir traffic, buat SecurityPolicyRule secara manual untuk IP kustom organisasi dan deploy ke firewall IDPS. Ikuti langkah-langkah dalam runbook FW-G0002 untuk menyelesaikan langkah-langkah berikut:

    1. Buat SecurityPolicyRule ingress di sistem virtual firewall root untuk mengizinkan IP kustom organisasi mengakses Harbor root

        apiVersion: firewall.private.gdc.goog/v1alpha2
        kind: SecurityPolicyRule
        metadata:
          labels:
            firewall.private.gdc.goog/policy-type: idps
          name: root-default-ingress-ORG_NAME-custom
          namespace: root
        spec:
          action: allow
          destination:
            addresses:
            - root-external-group
            zones:
            - vsys1-gpc
          firewallVirtualSystemRef:
            name: vsys1-root
          priority: 150
          profile:
            group: gdch-threat-profile-group
            type: group
          service:
            option: selected
            ports:
            - ports: "123"
              protocol: UDP
            - ports: "1122"
              protocol: TCP
            - ports: "5140"
              protocol: TCP
            - ports: "10443"
              protocol: TCP
          source:
            addresses:
            - org.customIPConfig.externalCIDRs # example: 30.0.0.0/22
            zones:
            - vsys1-cp
        

    2. Buat SecurityPolicyRule ingress di vsys firewall org untuk mengizinkan root mengakses APIServer org.

        apiVersion: firewall.private.gdc.goog/v1alpha2
        kind: SecurityPolicyRule
        metadata:
          labels:
            firewall.private.gdc.goog/policy-type: idps
          name: ORG_NAME-custom-default-ingress-root
          namespace: ORG_NAME # example: gpu-org-1
        spec:
          action: allow
          destination:
            addresses:
            - org.customIPConfig.externalCIDRs # example: 30.0.0.0/22
            zones:
            - ORG_VSYS_ID-gpc # example: vsys3-gpc
          firewallVirtualSystemRef:
             name: ORG_VSYS_ID-ORG_NAME # example: vsys3-gpu-org-1
          priority: 110
          profile:
            group: gdch-threat-profile-group
            type: group
          service:
            option: selected
            ports:
            - ports: "22"
              protocol: TCP
            - ports: "5140"
              protocol: TCP
            - ports: "6443"
              protocol: TCP
            - ports: "10443"
              protocol: TCP
          source:
            addresses:
            - root-external-group
            zones:
            - ORG_VSYS_ID-cp # example: vsys3-cp
        

    3. Picu penggantian konfigurasi firewall untuk men-deploy SecurityPolicyRules.

    Modul keamanan hardware 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Lisensi uji coba HSM yang dinonaktifkan masih dapat dideteksi

    Gejala:

    Karena masalah umum yang ada di CipherTrust Manager, lisensi uji coba yang dinonaktifkan masih dapat terdeteksi dan dapat memicu peringatan kedaluwarsa palsu.

    Solusi:

    Lihat HSM-R0003 untuk memverifikasi lisensi normal yang aktif dan menghapus lisensi uji coba yang dinonaktifkan.

    Modul keamanan hardware 1.12.0

    Modul keamanan hardware berperilaku tidak terduga saat menghapus KMS

    Gejala:

    Hardware Security Module (HSM) berperforma tidak terduga saat menghapus CTMKey KMS. Misalnya, layanan KMS mungkin tidak dimulai untuk organisasi.

    Solusi:

    Pengguna dapat menghapus data secara kriptografis dengan menghapus kunci KMS, bukan kunci root KMS, yang dimanifestasikan sebagai CTMKey.

    Modul keamanan hardware 1.12.0
    1.12.1
    1.12.2

    Rahasia yang dapat dirotasi untuk modul keamanan hardware berada dalam status tidak diketahui

    Gejala:

    Mendapatkan daftar secret yang dapat dirotasi dan tidak diketahui:

    kubectl get rotatablesecret -A | grep -i unknown

    Outputnya mungkin terlihat seperti ini:

    gpc-system     yz-aa-hsm01-kmip-certificate                HSM-0016                                Unknown
    gpc-system     yz-aa-hsm01-nae-certificate                 HSM-0016       3d19h      <invalid>    Unknown
    gpc-system     yz-aa-hsm01-web-certificate                 HSM-0016       2d         <invalid>   Unknown

    Persyaratan:

    1. Akses ke cluster admin root
    2. Alat jq
    3. Ikuti IAM-R0004 untuk membuat KUBECONFIG bagi cluster admin root.
    4. Ikuti IAM-R0005 untuk mendapatkan clusterrole/hsm-admin di cluster admin root.

    Solusi:

    1. Dapatkan daftar alamat IP jaringan data HSM:
      kubectl --kubeconfig ${KUBECONFIG:?} get hsm -A -o json | jq -r '.items[] | "\(.spec.dataNetwork.ip)"'

      Outputnya mungkin terlihat seperti ini:

      10.89.3.2
      10.89.3.3
      10.89.3.4
    2. Untuk setiap alamat IP jaringan data HSM dari langkah sebelumnya:
      1. Ekspor alamat IP ke variabel bernama HSM_DATA_IP:
        export HSM_DATA_IP=HSM_DATA_IP_ADDRESS
      2. Ambil sertifikat server web (port 443), nae (port 9000), dan kmip (port 5696) serta periksa validitas sertifikat:
        openssl s_client -showcerts -connect $HSM_DATA_IP:443 2>/dev/null | openssl x509 -text
        openssl s_client -showcerts -connect $HSM_DATA_IP:9000 2>/dev/null | openssl x509 -text
        openssl s_client -showcerts -connect $HSM_DATA_IP:5696 2>/dev/null | openssl x509 -text

        Outputnya mungkin terlihat seperti ini:

        Validity
                    Not Before: Mar 12 20:36:58 2024 GMT
                    Not After : Jun 16 20:36:58 2026 GMT
    3. Ikuti langkah-langkah dalam runbook HSM T0016 untuk memperpanjang masa berlaku sertifikat server, jika tanggal Not After berada dalam 30 hari dari hari ini.
    Pemantauan 1.12.0

    Sertifikat Node Exporter mungkin tidak siap saat membuat organisasi

    Gejala:

    Sertifikat gagal siap saat membuat organisasi:

    $ kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig get certificate -n mon-system
    NAME                                  READY   SECRET                                     AGE
    mon-node-exporter-backend-consumers   False   mon-node-exporter-backend-consumers-cert   20h
    mon-node-exporter-backend-providers   False   mon-node-exporter-backend-providers-cert   20h

    Secret masih ada karena `SecretForwarder`:

    $ kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig get secret -n mon-system | grep -E "node-exporter.+cert"
    mon-node-exporter-backend-consumers-cert                                            kubernetes.io/tls                          3      20h
    mon-node-exporter-backend-providers-cert                                            kubernetes.io/tls                          3      20h

    Solusi:

    Jeda Lifecycle Manager agar tidak membuat ulang sertifikat dan menghapus sertifikat:

    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n org-1-system-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n user-vm-1-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/org-admin/org-1-admin-kubeconfig annotate subcomponent mon-node-exporter -n user-vm-2-cluster lcm.private.gdc.goog/paused="true"
    kubectl --kubeconfig /root/release/user/org-1-system-user-kubeconfig delete certificate -n mon-system mon-node-exporter-backend-consumers mon-node-exporter-backend-providers

    Perhatikan bahwa node-exporter tidak akan direkonsiliasi di cluster pengguna.

    Pemantauan 1.12.0
    1.12.1
    1.12.2

    Mengonfigurasi webhook ServiceNow akan menyebabkan LCM merekonsiliasi ulang dan mengembalikan perubahan yang dilakukan pada objek ConfigMap dan Secret di namespace mon-system.

    Gejala:

    Mengonfigurasi webhook ServiceNow akan menyebabkan Lifecycle Management (LCM) merekonsiliasi ulang dan mengembalikan perubahan yang dilakukan pada objek ConfigMap mon-alertmanager-servicenow-webhook-backend dan objek Secret mon-alertmanager-servicenow-webhook-backend di namespace mon-system.

    Solusi:

    Jeda subkomponen LCM agar perubahan terjadi tanpa dikembalikan:

    1. Dapatkan jalur ke file kubeconfig dari cluster admin root dan admin org. Simpan jalur di variabel lingkungan ROOT_ADMIN_KUBECONFIG dan ORG_ADMIN_KUBECONFIG.
    2. Jeda subkomponen LCM di salah satu cluster berikut:
      • Jeda subkomponen LCM di cluster admin root:
        kubectl --kubeconfig $ROOT_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n root lcm.private.gdc.goog/paused="true"
      • Jeda subkomponen LCM di cluster admin org:
        kubectl --kubeconfig $ORG_ADMIN_KUBECONFIG annotate subcomponent mon-alertmanager-servicenow-webhook -n org-1-system-cluster lcm.private.gdc.goog/paused="true"
    Pemantauan 1.12.0

    Metrik dari cluster pengguna tidak dikumpulkan.

    Gejala:

    Beberapa metrik dari cluster pengguna tidak dikumpulkan. Masalah ini memengaruhi cluster VM pengguna, tetapi tidak memengaruhi cluster sistem.

    • Anda dapat melihat log berikut dari server Prometheus:
      prometheus-server ts=2024-02-21T16:07:42.300Z caller=dedupe.go:112 component=remote level=warn remote_name=cortex-remote-write url=http://cortex-tenant.mon-system.svc:9009/push msg="Failed to send batch, retrying" err="server returned HTTP status 500 Internal Server Error: 2 errors occurred:"
    • Anda dapat melihat log berikut dari tenant Cortex:
      cortex-tenant time="2024-02-23T18:03:44Z" level=error msg="proc: src=127.0.0.6:55021 lookup cortex.mon-system.svc on 172.25.38.10:53: no such host"

    Solusi:

    Ikuti langkah-langkah berikut untuk menyelesaikan masalah:

    1. Dapatkan jalur ke file kubeconfig cluster. Simpan jalur di variabel lingkungan KUBECONFIG.
    2. Deploy layanan stub di cluster VM pengguna:
            kubectl --kubeconfig $KUBECONFIG apply -f - &lt&ltEOF
            apiVersion: v1
            kind: Service
            metadata:
              labels:
                app: cortex
              name: cortex
            spec:
              ports:
              - protocol: TCP
                targetPort: 9009
                port: 9009
                name: cortex
              type: ClusterIP
              sessionAffinity: ClientIP
            EOF
            
    3. Mulai ulang deployment tenant Cortex:
      kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n mon-system cortex-tenant
    Pemantauan 1.12.0

    Prometheus utama mengirimkan metrik ke tenant Cortex di seluruh batas cluster

    Gejala:

    Metrik yang ditujukan untuk instance Grafana Infrastructure Operator dapat berada di instance Grafana Platform Administrator, dan sebaliknya. Masalah ini disebabkan oleh permintaan load balancing ASM di seluruh batas cluster, yang memiliki tenant default yang berbeda.

    Solusi:

    Solusi ini memerlukan akses ke sumber private-cloud dan kemampuan untuk meluncurkan update komponen. Anda harus mengubah konfigurasi mesh untuk membatasi layanan cortex-tenant agar hanya menerima traffic dari cluster lokal, dan men-deploy komponen ASM.

    1. Buka file manifests/plain/asm/1.19/asm-primary-cluster-operator.yaml.
    2. Memperkenalkan kolom serviceSettings di kolom meshConfig.

      Kolom meshConfig awalnya terlihat seperti contoh berikut:

              ...
              profile: minimal
                revision: 1-19
                meshConfig:
                  localityLbSetting:
                      enabled: false
              ...
            

      Oleh karena itu, Anda harus mengubah kolom meshConfig agar terlihat seperti contoh berikut:

              profile: minimal
                revision: 1-19
                meshConfig:
                  serviceSettings:
                    - settings:
                        clusterLocal: true
                      hosts:
                      - 'cortex-tenant.mon-system.svc.cluster.local'
                  localityLbSetting:
                      enabled: false
            
    3. Luncurkan komponen ASM ke dalam cluster.
    Upgrade 1.12.0

    Upgrade node gagal untuk NodeOSInPlaceUpgradeCompleted

    Gejala:

    Saat mengupgrade dari 1.11.0 ke 1.11.3, upgrade node gagal untuk NodeOSInPlaceUpgradeCompleted.

    ka logs -n gpc-system os-policy-preflight-os-upgrade-bm-86efcc8en8sh2-6h5cn | grep GDCH-OS-ANSIBLE-CHECK -A 50
    [GDCH-OS-ANSIBLE-CHECK]
    {
      "syntax": {
        "success": true,
        "msg": ""
      },
      "apply": {
        "reachablity": {
          "success": true,
          "msg": ""
        },
        "execution": {
          "success": false,
          "msg": "errors found when simluating play execution on host: 10.3.20.9",
          "tasks": [
            {
              "task": "os/upgrade : Copy GRUB file to BOOT location",
              "error": "Source /boot/efi/EFI/ubuntu/grubx64.efi not found"
            }
          ]
        }
      },
      "diff": null
    } 

    Solusi:

    Login ke mesin bare metal yang sedang diupgrade. Periksa apakah fstab memiliki /boot/efi dan direktori telah di-mount:

    # cat /etc/fstab
           LABEL=cloudimg-rootfs   /        ext4   defaults        0 1
           LABEL=UEFI      /boot/efi       vfat    umask=0077      0 1
    lsblk
    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda       8:0    0  3.5T  0 disk
    ├─sda1    8:1    0  3.5T  0 part /
    ├─sda2    8:2    0 64.3M  0 part
    ├─sda14   8:14   0    4M  0 part
    └─sda15   8:15   0  106M  0 part 

    Menjeda nodeupgradetask

    1. Jalankan mount -a dan periksa apakah direktori sudah di-mount:
      # mount -a
      root@mb-aa-bm04:~# ls /boot/efi/
      EFI
    2. Lanjutkan pemeriksaan di sini. Jalankan perintah berikut:
      C
      # Ensure all three cmds prints `Files are identical`
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/shimx64.efi | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/BOOT/BOOTX64.EFI | awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
      
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/grubx64.efi | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/BOOT/grubx64.efi| awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
      
      if [ "$(sha256sum /boot/efi/EFI/ubuntu/grub.cfg | awk '{ print $1 }')" == "$(sha256sum /boot/efi/EFI/ubuntu/grub.cfg | awk '{ print $1 }')" ]; then echo "Files are identical."; else  echo "Files are different."; fi
    3. Jika tidak semua file identik, jalankan perintah ini di komputer, dan ulangi pemeriksaan.
      /usr/local/update-efi-files.sh
    4. Lanjutkan nodeupgradetask
    Upgrade 1.12.0

    Upgrade switch gagal menjalankan perintah install add bootflash://..

    Gejala:

    Upgrade switch gagal menambahkan bootflash:

    Conditions:
      Last Transition Time:  2024-01-10T20:06:30Z
      Message:               exception: add and activate package nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm: nx-api RPC request failed
      with status code 400 and body "{\n\t\"jsonrpc\":\t\"2.0\",\n\t\"error\":\t{\n\t\t\"code\":\t-32602,\n\t\t\"message\":\t\"Invalid params\",\n\t\
      t\"data\":\t{\n\t\t\t\"msg\":\t\"Adding the patch (/nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm)\\n\\n[###                 ]  10%\\n[#│ #                 []  10%\\n[#####               ]  20%\\n[#######             ]  30%\\n[#########           ]  40%\\n[#########           ]  4
      0%\\n[####################] 100%\\n[####################] 100%\\nInstall operation 21 failed because this patch already exists. at Wed Jan 10 2
      1:00:06 2024\\n\\n\"\n\t\t}\n\t},\n\t\"id\":\t1\n}" for requests "install add bootflash:///nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm
      activate forced"   

    Solusi:

    Login ke switch yang gagal dan jalankan perintah install activate dari switch pada paket:

    install activate nxos.CSCwh72780-n9k_ALL-1.0.0-9.3.10.lib32_n9000.rpm
    Upgrade 1.12.1, 1.12.2, 1.12.4

    Saat mengupgrade dari 1.11.x ke 1.12.1, upgrade node macet dengan error MaintenanceModeHealthCheckReady undrain

    Gejala:

    Upgrade cluster terhenti selama lebih dari satu jam. Status dan spesifikasi mode pemeliharaan mesin bare metal tidak cocok. Misalnya, perintah:

    kubectl get baremetalmachines -A  -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,MaintenanceMode:.spec.maintenanceMode,Status:.status.underMaintenance

    menampilkan:

    root        10.252.135.4   false             true

    Tugas pemeriksaan awal mesin bare metal menampilkan pesan error berikut:

    The error was: 'dict object' has no attribute 'stdout'\n\nThe error appears to be in '/playbook/roles/machine_check_common/tasks/main.yaml': line 215, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Check if bypass the time check in node agent mode\n  ^ here\n"}

    Solusi:

    Gunakan perintah berikut:

    export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
       kubectl get cluster -A
    kubectl annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE} "baremetal.cluster.gke.io/bypass-check=ntp"
    OS Node 1.11.3

    Node VM mengalami masalah saat dimulai ulang setelah solusi manual untuk pod os-policy

    Gejala:

    Tugas mulai ulang VM gagal setelah solusi manual untuk pod os-policy. Pesan berikut akan ditampilkan:

    ko logs os-policy-preflight-os-reboot-vm-b1fb94147x8r9-nqmvp -n gpc-system
    
    playbook: server-reboot.yaml
    {
        "custom_stats": {},
        "global_custom_stats": {},
        "plays": [
            {
                "play": {
                    "duration": {
                        "end": "2024-01-12T03:50:52.749714Z",
                        "start": "2024-01-12T03:50:42.694226Z"
                    },
                    "id": "5251f140-5a01-5cce-6150-000000000006",
                    "name": "Run OS Upgrade Tasks"
                },
                "tasks": [
                    {
                        "hosts": {
                            "172.20.128.10": {
                                "action": "setup",
                                "changed": false,
                                "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out",
                                "unreachable": true
                            }
                        },
                        "task": {
                            "duration": {
                                "end": "2024-01-12T03:50:52.749714Z",
                                "start": "2024-01-12T03:50:42.704562Z"
                            },
                            "id": "5251f140-5a01-5cce-6150-00000000000b",
                            "name": "os/reboot : Gather OS distribution information"
                        }
                    }
                ]
            }
        ],
        "stats": {
            "172.20.128.10": {
                "changed": 0,
                "failures": 0,
                "ignored": 0,
                "ok": 0,
                "rescued": 0,
                "skipped": 0,
                "unreachable": 1
            }
        }
    }
    [GDCH-OS-ANSIBLE-CHECK]
    {
      "syntax": {
        "success": true,
        "msg": ""
      },
      "apply": {
        "reachablity": {
          "success": false,
          "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out"
        },
        "execution": {
          "success": false,
          "msg": "",
          "tasks": null
        }
      },
      "diff": null
    }
    [GDCH-OS-ANSIBLE-CHECK]
    Error: reachability err: Failed to connect to the host via ssh: ssh: connect to host 172.20.128.10 port 22: Connection timed out

    Solusi:

    Menghentikan dan memulai VM akan menyelesaikan masalah ini. Ikuti petunjuk di memulai dan menghentikan VM.

    Jaringan atas 1.12.0

    Cluster VM pengguna mengalami masalah pada status ContainerCreating dengan peringatan FailedCreatePodSandBox

    Gejala:

    Cluster VM pengguna mengalami masalah, yang menjelaskan bahwa pod yang memiliki status ContainerCreating menampilkan peringatan berikut:

    # kubectl --kubeconfig path/to/usercluster_kubeconfig describe pods/bm-system-machine-preflight-check-172.204c807f67d2cab60d5d8q58q -n user-vm-1-cluster
    Events:
      Type     Reason                  Age                  From     Message
      ----     ------                  ----                 ----     -------
      Warning  FailedCreatePodSandBox  108s (x62 over 79m)  kubelet  (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "ec4d2021ae9d76adf49a6d3c88d678b3b5d9
    50990daa6ffee3fcfeed8291dfa8": plugin type="cilium-cni" name="cilium" failed (add): Unable to create endpoint: [PUT /endpoint/{id}][429] putEndpointIdTooManyRequests 

    Solusi:

    Ikuti langkah-langkah dalam runbook NET-P0001 untuk memulai ulang anetd di cluster sistem.

    Registry artefak sistem 1.12.1

    Harbor mengalami loop error setelah upgrade ABM

    Gejala:

    Saat mengupgrade organisasi root dari 1.11.1 ke 1.12.1, upgrade mungkin gagal pada tahap add-on dengan error penarikan Helm:

    harbor-system                   harbor-harbor-harbor-core-657d86bcf8-zl8d2                        1/1     Running             0                 14h
    harbor-system                   harbor-harbor-harbor-core-7d66b4c7c-7g6t4                         0/1     CrashLoopBackOff    155 (76s ago)     12h

    Solusi:

    Kirim permintaan dukungan. Lihat Meminta dukungan untuk mengetahui detailnya.

    Upgrade 1.12.0

    Beberapa pod dalam cluster sistem mungkin macet dalam status TaintToleration

    Gejala:

    Selama upgrade, subkomponen pemilah komunikasi OPA tidak diinstal di cluster sistem. Namun, batasan diinstal dan webhook untuk menerapkannya juga diinstal.

    Beberapa pod dalam cluster sistem mungkin macet dalam status TaintToleration:

    mon-system                              mon-cortex-pre-upgrade-job-mn29x                              0/1     TaintToleration     0                96m    <none>          zb-aa-bm07    <none>           <none>
    mon-system                              mon-kube-state-metrics-backend-d49b868dc-fmp62                0/2     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    mon-system                              primary-prometheus-shard1-replica0-0                          0/3     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    netapp-trident                          netapp-trident-controller-7ffb4c5f89-rvwjj                    0/5     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              alertmanager-0                                                0/2     TaintToleration     0                98m    <none>          zb-aa-bm07    <none>           <none>
    obs-system                              audit-logs-loki-io-0                                          0/3     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    obs-system                              log-audit-backend-failure-detector-6lgsq                      0/1     TaintToleration     0                105m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              meta-alertmanager-0                                           0/1     TaintToleration     0                102m   <none>          zb-aa-bm07    <none>           <none>
    obs-system                              meta-alertmanager-servicenow-webhook-5679f48895-ggkg6         0/2     TaintToleration     0                102m   <none>          zb-aa-bm07    <none>           <none>
    platform-obs-obs-system                 grafana-proxy-server-7b6b79f787-2x92t                         0/2     TaintToleration     0                103m   <none>          zb-aa-bm07    <none>           <none>
    vm-system                               gdch-rocky-yum-repo-distributor-zfwp6                         0/1     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    vm-system                               gdch-rocky-yum-repo-server-568768c97b-c9hm2                   0/2     TaintToleration     0                97m    <none>          zb-aa-bm07    <none>           <none>
    Istio 1.12.1

    Pod dalam status ImagePullBackOff dengan peristiwa Back-off pulling image "auto"

    Gejala:

    Pod dengan nama penampung istio-proxy belum siap dan memiliki status ImagePullBackOff dengan peristiwa Back-off pulling image "auto".

    Solusi:

    1. Verifikasi bahwa webhook mutating istio-revision-tag-default ada di cluster. Jika tidak, tunggu sekitar 10 menit untuk melihat apakah sistem pulih secara otomatis. Jika tidak, eskalasikan masalah ini.
    2. Jika webhook mutating ada, hapus pod yang bermasalah dan verifikasi bahwa pod tersebut kembali aktif. .spec.containers[].image tidak boleh berupa auto, harus terlihat seperti gambar sebenarnya yang mirip dengan berikut: gcr.io/gke-release/asm/proxyv2:<image version>.
    Logging 1.12.1

    ValidatingWebhookConfigurations, MutatingWebhookConfigurations, dan MonitoringRules yang di-deploy oleh komponen Log mungkin gagal diupgrade

    Gejala:

    Saat mengupgrade dari 1.11.1 ke 1.12.1, ValidatingWebhookConfigurations, MutatingWebhookConfigurations, dan MonitoringRules yang di-deploy oleh komponen Log mungkin gagal diupgrade.

    Solusi:

    1. Pastikan Anda memiliki kubectl dan dapat mengakses buku pedoman IAM-R0004 untuk mendapatkan KUBECONFIG bagi cluster admin root.

    2. Hapus ValidatingWebhookConfiguration root-admin-private-logging-validation-webhook dari cluster admin root:

      kubectl delete validatingwebhookconfiguration root-admin-private-logging-validation-webhook
    3. Hapus MutatingWebhookConfiguration root-admin-private-logging-defaulter-webhook dari cluster admin root:

      kubectl delete mutatingwebhookconfiguration root-admin-private-logging-defaulter-webhook
    4. Hapus ValidatingWebhookConfiguration root-admin-logging-webhook dari cluster admin root:

      kubectl delete validatingwebhookconfiguration root-admin-logging-webhook
    5. Hapus MonitoringRule operational-logs-alerts dari namespace infra-obs di cluster admin root:

      kubectl delete monitoringrule operational-logs-alerts -n infra-obs
    6. Hapus MonitoringRules audit-logs-alerts, audit-logs-sli-syslog-prober, audit-logs-sli-filelog-prober, audit-logs-sli-fluentbit-to-loki, audit-logs-sli-fluentbit-to-splunk, audit-logs-sli-fluentbit-backlog, audit-logs-sli-loki-ingester-failed-rate, audit-logs-sli-loki-io-up, dan audit-logs-sli-loki-pa-up dari infra-obs namespace di cluster admin root:

      kubectl delete monitoringrule audit-logs-alerts audit-logs-sli-syslog-prober audit-logs-sli-filelog-prober audit-logs-sli-fluentbit-to-loki audit-logs-sli-fluentbit-to-splunk audit-logs-sli-fluentbit-backlog audit-logs-sli-loki-ingester-failed-rate audit-logs-sli-loki-io-up audit-logs-sli-loki-pa-up -n infra-obs
    7. Pastikan subkomponen log-admin siap di cluster admin root:

      export RECONCILING="`kubectl get subcomponent log-audit -n root -o json | jq '.status.conditions | .[] | select(.type == "Reconciling") | .status'`" ; if [[ $RECONCILING =~ "False" ]]; then echo "log-audit is ready"; else echo "log-audit is not ready"; fi

      Jika berhasil, perintah akan mencetak log-audit is ready. Jika tidak, outputnya adalah log-audit is not ready.

    8. Pastikan subkomponen log-admin siap di cluster admin root:

      export RECONCILING="`kubectl get subcomponent log-operational -n root -o json | jq '.status.conditions | .[] | select(.type == "Reconciling") | .status'`" ; if [[ $RECONCILING =~ "False" ]]; then echo "log-operational is ready"; else echo "log-operational is not ready"; fi

      Jika berhasil, perintah akan mencetak log-operational is ready. Jika tidak, outputnya adalah log-operational is not ready.

    Logging 1.12.1

    Log audit dan log operasional tidak dikumpulkan

    Karena ada masalah dalam tugas log-infra-backend-preinstall, log audit dan log operasional Lokis tidak diinstal dan log tidak dikumpulkan.

    Gejala:

    Anda mungkin melihat CrashLoopBackoff di cluster sistem:

    obs-system                      anthos-log-forwarder-5ghbm                                        2/3     CrashLoopBackOff              135 (3m52s ago)   15h
    Logging 1.12.1

    Pod cortex-ingester menampilkan status OOMKilled

    Gejala:

    Anda mungkin melihat status OOMKilled untuk pod di namespace mon-system:

    NAMESPACE          NAME                           READY   STATUS      RESTARTS         AGE
    mon-system         cortex-ingester-0              1/2     OOMKilled   6 (3h5m ago)     11h
          

    Solusi:

    Tingkatkan memori pada setiap pengumpul data, tingkatkan jumlah pengumpul data, atau keduanya. Anda dapat melakukannya dengan men-deploy SubcomponentOverride di cluster admin org, seperti yang ditunjukkan dalam contoh berikut:

    apiVersion: lcm.private.gdc.goog/v1
    kind: SubcomponentOverride
    metadata:
      name: mon-cortex-ingester-override
      namespace: org-1-system-cluster
    spec:
      backend:
        operableParameters:
          ingester:
            resourcesLimit:
              memory: "6Gi" # 6Gi is the default, increase to add more memory to each ingester
            replicas: 4     # 4 is the default, increase to create more ingester instances.
      subComponentRef: mon-cortex
          
    Upgrade 1.12.1

    Saat mengupgrade dari 1.11.x ke 1.12.1, node cluster mungkin tidak keluar dari mode pemeliharaan karena kegagalan health check untuk registy_mirror

    Gejala:

    Saat mengupgrade dari 1.11.x ke 1.12.1, upgrade node gagal dengan pesan error berikut:

    {
        "lastTransitionTime": "2024-02-13T22:53:36Z",
        "message": "following checks failed, ['check_registry_mirror_reachability_pass']",
        "observedGeneration": 3,
        "reason": "JobStatus",
        "status": "False", <----
        "type": "MaintenanceModeHealthCheckReady"
      },
      

    Solusi:

    Gunakan perintah berikut:

    kubectl --kubeconfig=${ROOT_OR_ORG_ADMIN_KUBECONFIG} annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE}  "baremetal.cluster.gke.io/maintenance-mode-ignore-healthcheck=true"
    Upgrade 1.12.1, 1.12.2, 1.12.4

    OrganizationUpgrade terhenti di tahap anthosBareMetal, addOn, atau node dengan kegagalan pemeriksaan check_registry_mirror_reachability_pass.

    Gejala:

    1. OrganizationUpgrade macet di tahap anthosBareMetal, addOn, atau node yang menampilkan status Unknown untuk kondisi Succeeded.

    kubectl --kubeconfig=${ROOT_ADMIN_KUBECONFIG} get organizationupgrade -n gpc-system ${ORG_NAME} -o yaml
        addOn: {}
        anthosBareMetal:
          conditions:
          - lastTransitionTime: "2024-09-12T12:10:55Z"
            message: 'UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn''t
              after 39h18m50.606521473s, last message was: Cluster upgrade for root-admin
              cluster: in-progress'
            observedGeneration: 1
            reason: ABMUpgradeTimeout
            status: Unknown
            type: Succeeded
          startTime: "2024-09-12T12:10:55Z"
        node:{}
      
    2. Status baremetalmachine menampilkan kegagalan pemeriksaan check_registry_mirror_reachability_pass.
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get baremetalmachines -A -o json | jq '.items[] | select(.status.underMaintenace != .spec.maintenanceMode) | .metadata.name as $name | .status.underMaintenace as $statm | .spec.maintenanceMode as $specm | .status.conditions[] | select(.status == "False") | select(.type == "MaintenaceModeHealthCheckReady")'
        {
          "lastTransitionTime": "2024-02-13T19:17:27Z",
          "message": "following checks failed, ['check_registry_mirror_reachability_pass']",
          "observedGeneration": 3,
          "reason": "JobStatus",
          "status": "False",
          "type": "MaintenaceModeHealthCheckReady" 
        },

    Solusi:

    Gunakan perintah berikut:

    export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
    kubectl get cluster -A
    kubectl annotate cluster ${CLUSTER_NAME} -n=${CLUSTER_NAMESPACE}  "baremetal.cluster.gke.io/maintenance-mode-ignore-healthcheck=true"
    Upgrade 1.12.1, 1.12.2, 1.12.4

    OrganizationUpgrade macet di tahap anthosBareMetal, addOn, atau node dengan error health check yang menemukan netutil.

    Gejala:

    1. OrganizationUpgrade macet di tahap anthosBareMetal, addOn, atau node yang menampilkan status Unknown untuk kondisi Succeeded.

    kubectl --kubeconfig=${ROOT_ADMIN_KUBECONFIG} get organizationupgrade -n gpc-system ${ORG_NAME} -o yaml
        addOn: {}
        anthosBareMetal:
          conditions:
          - lastTransitionTime: "2024-09-12T12:10:55Z"
            message: 'UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn''t
              after 39h18m50.606521473s, last message was: Cluster upgrade for root-admin
              cluster: in-progress'
            observedGeneration: 1
            reason: ABMUpgradeTimeout
            status: Unknown
            type: Succeeded
          startTime: "2024-09-12T12:10:55Z"
        node:{}
      
    2. HealthChecks menampilkan error tidak ada netutil.
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get healthchecks -n kube-system -o json | jq '.items[].status | select(.lastHealthcheck.lastStatus == "Error")'
    {
      "lastHealthcheck": {
        "error": {
          "code": "500",
          "reason":  "[Errno 2] No such file or directory: /usr/local/bin/abm-tools10.5.23.4/netutil"
        },
        "lastCompletedTime": "2024-09-14T05:11:39Z",
        "lastStatus": "Error",
        "monitoredComponentVersion": "1.28.900-gke.112",
        "version": "1.28.900-gke.112"
      },
      "lastScheduledTime": "2024-09-14T05:26:00Z"
      }

    Solusi:

    Hapus Tugas Kubernetes yang sesuai dengan HealthCheck yang gagal

    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} get job -A -l Command=machine-health-check --field-selector status.successful=0
    NAMESPACE   NAME                                    COMPLETIONS   DURATION   AGE
    root        bm-system-10.200.0.2-machine-28771464   0/1           67m        67m
    root        bm-system-10.200.0.2-machine-28771524   0/1           7m33s      7m33s
    kubectl --kubeconfig=${ROOT_ADMIN_OR_ORG_ADMIN_KUBECONFIG} delete job -A -l Command=machine-health-check --field-selector status.successful=0
    job.batch "bm-system-10.200.0.2-machine-28771464" deleted
    job.batch "bm-system-10.200.0.2-machine-28771524" deleted
    Pengelola VM 1.12.1

    Saat mengupgrade dari 1.11.x ke 1.12.x, VM mungkin tidak siap karena terlalu banyak pod

    Gejala:

    Saat mengupgrade dari 1.11.x ke 1.12.x, VM mungkin tidak siap karena terlalu banyak pod, yang memblokir pengurasan node bare metal.

    Solusi:

    Mulai ulang VM.

    Server fisik 1.12.1

    NodeUpgrade berisi beberapa versi untuk model hardware yang sama, sehingga memblokir verifikasi upgrade firmware

    Gejala:

    Saat mengupgrade dari 1.11.x ke 1.12.1, NodeUpgrade berisi beberapa versi untuk model hardware yang sama, sehingga memblokir verifikasi upgrade firmware.

    Solusi:

    Lakukan langkah-langkah berikut untuk mengubah NodeUpgrade CR spec:

    1. Jika upgrade ditujukan untuk server HPE Gen10 (GDC-4D), hapus firmware model ilo6. Jika tidak, hapus firmware model ilo5.
    2. Bagian untuk mempertahankan entri dengan redfishVersion terbaru untuk setiap deskripsi.
      Misalnya, jika kedua entri berikut ada, hanya simpan entri yang memiliki 2.98 Oct 10 2023:
      - description: SystemBMC
              model: ilo5
              redfishVersion: 2.98 Oct 10 2023
            - description: SystemBMC
              model: ilo5
              redfishVersion: 2.95 Jul 19 2023
    Server fisik 1.12.1

    Server mengalami masalah dalam status penyediaan

    Gejala:

    Ironic mencapai waktu tunggu habis saat menunggu server diaktifkan. Status berubah dari status cleaning menjadi clean failed menjadi available:

    2024-02-23 18:53:00.659 1 DEBUG ironic.api.method [req-3a22ed15-d5cd-4d77-bb0b-0e7a3042e793 - - - - -] Client-side error: Node facc133f-898c-46d4-974b-92e3560892d5 is locked by host 10.128.120.2, please retry after the current operation is completed. format_exception /usr/lib/python3.6/site-packages/ironic/api/method.py:124

    Tentukan apakah tombol diaktifkan:

    curl -kqs -u ${ILO_USER}:${ILO_PASS} https://${ILO_IP}/redfish/v1/Systems/1 | jq '.PowerState'

    Jika tombol diaktifkan, output akan menampilkan "On".

    Solusi:

    Hapus blokir image dari server yang bermasalah dan tunggu hingga server kembali ke status tersedia. Setelah tersedia, tambahkan kembali blok image.

    Server fisik 1.12.2

    Bootstrap server gagal

    Gejala:

    Anda mungkin melihat pesan debug yang terlihat seperti ini:

    [DEBUG] GET https://172.22.240.103/redfish/v1/
                2024/03/22 21:46:46 [DEBUG] GET https://172.22.240.111/redfish/v1/Systems/1/
                panic: runtime error: invalid memory address or nil pointer dereference

    Masalah ini terjadi saat error iLO diabaikan dan respons HTTP dibaca, bukan langsung ditampilkan, sehingga terjadi dereferensi pointer nol.

    Registry artefak sistem 1.12.1

    Saat mengupgrade dari 1.11.x ke 1.12.1, status cluster Harbor mungkin unhealthy

    Gejala:

    Saat mengupgrade dari 1.11.1 ke 1.12.1, status cluster Harbor mungkin menjadi unhealthy dengan error berikut:

    root@abc-bootstrapper:/home/ubuntu# ka get harborclusters -A
    NAMESPACE       NAME     PUBLIC URL                    STATUS
    harbor-system   harbor   https://10.252.119.11:10443   unhealthy

    Langkah-langkah untuk mendiagnosis:

    1. Periksa status harborclusters:

      root@abc-bootstrapper:/home/ubuntu# ka get harborclusters -A
      NAMESPACE       NAME     PUBLIC URL                    STATUS
      harbor-system   harbor   https://10.252.119.11:10443   unhealthy
    2. Jika tidak sehat, periksa status komponen Harbor:

      root@abc-bootstrapper:~# ka get pods -n harbor-system
      NAME                                               READY   STATUS    RESTARTS   AGE
      harbor-harbor-harbor-core-68d9764d8c-rgg4h         0/1     Running   0          3d2h
      harbor-harbor-harbor-exporter-54d559fdb8-nzjk7     1/1     Running   0          3d2h
      harbor-harbor-harbor-jobservice-6f5db4779-sqmlc    1/1     Running   0          3d2h
      harbor-harbor-harbor-portal-8458c847dc-z2l6n       1/1     Running   0          3d4h
      harbor-harbor-harbor-registry-7577f5d9d6-qp45c     3/3     Running   0          3d4h
      harbor-operator-harbor-operator-755b5cfc96-x2bxh   1/1     Running   0          3d4h
      harbor-operator-redisoperator-bf96ffc59-5d457      1/1     Running   0          3d4h
      harbor-operator-redisoperator-bf96ffc59-tbd8j      1/1     Running   0          3h38m
      harbor-operator-redisoperator-bf96ffc59-vlqfl      1/1     Running   0          3h38m
      pg-harbor-db-0                                     0/3     Pending   0          3h37m
      pg-harbor-db-monitor-776b946c74-c7pt9              0/1     Pending   0          3h38m
      rfr-harbor-redis-0                                 1/1     Running   0          3d4h
      rfr-harbor-redis-1                                 1/1     Running   0          3d4h
      rfr-harbor-redis-2                                 1/1     Running   0          3h37m
      rfs-harbor-redis-64d9d8df4f-fds79                  1/1     Running   0          3d4h
      rfs-harbor-redis-64d9d8df4f-p9l9h                  1/1     Running   0          3d3h
      rfs-harbor-redis-64d9d8df4f-x5x8c                  1/1     Running   0          3h38m
    3. Jika harbor-core dan pg-harbor-db belum siap, periksa status harbor-db:

      root@abc-bootstrapper:~# ka get dbclusters.postgresql.dbadmin.gdc.goog harbor-db -n harbor-system
      NAME        PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
      harbor-db   172.20.0.146      InProgress     DBClusterReconciling
    4. Jika harbor-db dalam mode InProgress, periksa apakah ada node root-admin-control-plane dalam mode UNDERMAINTENANCE.

      root@abc-bootstrapper:~# ka get nodepool -A
      NAMESPACE   NAME                            READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
      org-1       admin-control-plane-node-pool   0       0             0         0                  0
      root        root-admin-control-plane        3       0             0         1                  0

      Node diharapkan berada dalam mode pemeliharaan selama upgrade. Jika satu node sedang dalam pemeliharaan, Anda mungkin tidak memiliki cukup resource untuk menjadwalkan harbor-db.

    Solusi:

    Untuk memperbaiki masalah ini, lakukan langkah-langkah berikut:

    1. Setel KUBECONFIG

      :
      export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    2. Turunkan skala pengontrol dbs:

      kubectl scale --replicas=0 deployment -n dbs-fleet-system fleet-controller-manager
      kubectl scale --replicas=0 deployment -n dbs-postgres-system pg-controller-manager
    3. Tetapkan nama class prioritas ke system-cluster-critical atau system-node-critical dalam template pod:

      kubectl patch statefulset pg-harbor-db -n harbor-system --type='json' \
        -p='[{"op": "add", "path": "/spec/template/spec/priorityClassName", "value": "system-cluster-critical"}]'
    4. Mulai ulang pod pg-harbor-db:

      kubectl delete pods -n harbor-system pg-harbor-db-0
    5. Setelah memverifikasi bahwa harborcluster dalam kondisi baik, naikkan kembali skala pengontrol dbs:

            kubectl scale --replicas=1 deployment -n dbs-fleet-system fleet-controller-manager
            kubectl scale --replicas=1 deployment -n dbs-postgres-system pg-controller-manager
    Registry artefak sistem 1.12.2

    Pod layanan tugas belum siap

    Gejala:

    Pod layanan tugas mengalami masalah saat siap:

    Events:
      Type     Reason     Age                       From     Message
      ----     ------     ----                      ----     -------
      Warning  Unhealthy  35m (x8153 over 3d16h)    kubelet  Readiness probe failed: Get "https://172.16.1.142:8443/api/v1/stats": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
      Warning  Unhealthy  10m (x60 over 13h)        kubelet  Readiness probe failed: Get "https://172.16.1.142:8443/api/v1/stats": context deadline exceeded
      Normal   Pulled     5m47s (x1733 over 3d16h)  kubelet  Container image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7" already present on machine
      Warning  BackOff    43s (x21352 over 3d16h)   kubelet  Back-off restarting failed container jobservice in pod harbor-harbor-harbor-jobservice-6f59fbf974-q9h9g_harbor-system(51ab9697-98b9-4315-9ab9-f67b19a28d0a)

    Solusi:

    1. Mulai ulang pod layanan tugas.
      kubectl delete pod POD_NAME -n NAMESPACE

      Outputnya akan terlihat seperti ini:

      Events:
        Type    Reason     Age    From               Message
        ----    ------     ----   ----               -------
        Normal  Scheduled  2m20s  default-scheduler  Successfully assigned harbor-system/harbor-harbor-harbor-jobservice-6f59fbf974-p872s to zx-ab-bm02
        Normal  Pulling    2m15s  kubelet            Pulling image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7"
        Normal  Pulled     2m12s  kubelet            Successfully pulled image "gcr.io/private-cloud-staging/goharbor/harbor-jobservice:v2.8.4-gke.7" in 3.25s (3.25s including waiting)
        Normal  Created    2m12s  kubelet            Created container jobservice
        Normal  Started    2m12s  kubelet            Started container jobservice
    2. Di bootstrapper, dapatkan status organisasi:
      kubectl get org -A

      Outputnya mungkin terlihat seperti ini:

      NAMESPACE    NAME    CURRENT VERSION   DESIRED VERSION   READY
      gpc-system   org-1   1.12.1-gdch.402   1.12.1-gdch.402   True
      gpc-system   org-2   1.12.1-gdch.402   1.12.1-gdch.402   True
      gpc-system   root    1.12.1-gdch.402   1.12.1-gdch.402   True
    Pemantauan 1.12.1

    Saat mengupgrade dari 1.11.x ke 1.12.1, penghapusan bucket Cortex mungkin gagal

    Gejala:

    Saat mengupgrade dari 1.11.1 ke 1.12.1, penghapusan bucket Cortex mungkin gagal dengan error berikut:

            upgrade_post_root_org_validation.go:74: unable to create cortex client to check metrics creating Cortex client failed: can't make a metrics API because of an error getting the Cortex pod: unable to find any matching cortex pods using list options / label selector: {TypeMeta:{Kind: APIVersion:} LabelSelector:app=cortex FieldSelector: Watch:false AllowWatchBookmarks:false ResourceVersion: ResourceVersionMatch: TimeoutSeconds: Limit:0 Continue: SendInitialEvents:}
            upgrade_post_root_org_validation.go:117: Bucket(s) not ready: 3 errors occurred:
                    * Bucket "obs-system/cortex-metrics-alertmanager" not ready
                    * Bucket "obs-system/cortex-metrics-blocks" not ready
                    * Bucket "obs-system/cortex-metrics-ruler" not ready

    Solusi:

    Lakukan langkah-langkah berikut untuk menghapus bucket secara paksa:

    1. Selesaikan langkah-langkah dalam tugas berat MON-R0017 untuk mendapatkan akses ke UI StorageGRID.
    2. Buka bucket di UI.
    3. Klik tombol Hapus objek dalam bucket untuk menghapus data.
    Pemantauan 1.12.0
    1.12.1
    1.12.2

    Kelas penyimpanan metrik salah ditentukan dalam konfigurasi

    Gejala:

    Objek StatefulSet Prometheus dikonfigurasi secara salah dengan class penyimpanan standard, bukan standard-rwo. Masalah ini menyebabkan kegagalan startup objek StatefulSet Anthos Prometheus dari komponen pemantauan.

    Masalah ini terjadi karena rekonsiliator ObservabilityPipeline hanya menetapkan nilai ini pada penginstalan pertama, dan rekonsiliator ObsProjectInfra memantau resource kustom cluster.

    Solusi:

    Mulai ulang deployment fleet-admin-controller di cluster admin org untuk mengatasi masalah ini.

    Pemantauan 1.12.2

    Subkomponen mon-common tidak men-deploy Telemetri Istio

    Gejala:

    Subkomponen mon-common harus men-deploy objek Telemetri Istio di cluster admin org untuk mencegah audit mencatat semua permintaan untuk Cortex. Namun, file manifes tidak disertakan dalam file build.

    Solusi:

    Ikuti langkah-langkah berikut untuk men-deploy objek Telemetri Istio di cluster admin org:

    1. Buat file YAML yang menentukan resource kustom (CR) Telemetri Istio di namespace mon-system cluster admin org:

      # Disable access logging from workloads internal to GDCH.
      # Telemetry CR to disable Istio access logs from obs-system namespace.
      apiVersion: telemetry.istio.io/v1alpha1
      kind: Telemetry
      metadata:
        name: disable-audit-logging
        namespace: mon-system
      spec:
        accessLogging:
          - providers:
            - name: otel
            disabled: true
    2. Terapkan file manifes ke cluster admin org di namespace mon-system:

      kubectl apply -f disable-audit-logging.yaml
    Pemantauan 1.12.0
    1.12.1
    1.12.2

    ConfigMap mon-prober-backend-prometheus-config direset

    Gejala:

    • Notifikasi MON-A0001 dipicu.
    • ConfigMap mon-prober-backend-prometheus-config direset agar tidak menyertakan tugas probe, misalnya:
            apiVersion: v1
            data:
              prometheus.yaml: |
                remote_write:
                - url: http://cortex-tenant.mon-system.svc:9009/push
                  name: cortex-tenant
            kind: ConfigMap
            metadata:
              creationTimestamp: "2024-06-26T14:55:07Z"
              name: mon-prober-backend-prometheus-config
              namespace: mon-system
              resourceVersion: "6606787"
              uid: 1a495af0-1fdc-40b8-845b-4976e3b0f899
            

    Solusi:

    Ikuti langkah-langkah berikut untuk menyelesaikan masalah ini:

    1. Tetapkan variabel lingkungan berikut:
      • KUBECONFIG: jalur ke file kubeconfig di cluster.
      • TARGET_CLUSTER: nama cluster tempat Anda menyelesaikan masalah.
    2. Jeda subkomponen mon-prober di semua cluster:
            kubectl --kubeconfig $KUBECONFIG annotate subcomponent mon-prober -n $TARGET_CLUSTER lcm.private.gdc.goog/paused=true
            

      Contoh:

            kubectl --kubeconfig ~/root-admin-kubeconfig annotate subcomponent mon-prober -n my-org lcm.private.gdc.goog/paused=true
            
    3. Mulai ulang pengontrol administrator MON di setiap cluster admin:
            kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n obs-system mon-admin-backend-controller
            

      Prober ConfigMap diisi saat setiap probe didaftarkan.

    4. Ikuti runbook MON-R2009 untuk menonaktifkan suara notifikasi MON-A0001, Blackbox monitoring metrics pipeline down, karena notifikasi ini akan terus muncul.
    Platform node 1.12.1

    Saat mengupgrade dari 1.11.x ke 1.12.x, pod download image switch mungkin macet dalam status ErrImagePull

    Gejala:

    Saat mengupgrade dari 1.11.x ke 1.12.x, pod download gambar switch mungkin macet dalam status ErrImagePull dengan peringatan berikut:

     Warning  Failed   145m (x4 over 169m)   kubelet  Failed to pull image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to pull and unpack image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to resolve reference "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to do request: Head "https://10.252.119.4:5000/v2/library/private-cloud-staging/switch-image-downloader/manifests/1.12.1-gdch.330?ns=gcr.io": dial tcp 10.252.119.4:5000: connect: no route to host
      Warning  Failed   45m (x262 over 25h)   kubelet  Failed to pull image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to pull and unpack image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": failed to resolve reference "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330": pulling from host 10.252.119.11:10443 failed with status code [manifests 1.12.1-gdch.330]: 401 Unauthorized
      Normal   Pulling  40m (x287 over 26h)   kubelet  Pulling image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330"
      Normal   BackOff  22s (x6504 over 25h)  kubelet  Back-off pulling image "gcr.io/private-cloud-staging/switch-image-downloader:1.12.1-gdch.330"

    Solusi:

    Untuk memperbaiki masalah ini, beri ulang tag pada gambar pnet-core-switch-image-downloader menjadi switch-image-downloader.

    Platform node 1.12.1

    Saat mengupgrade dari 1.11.x ke 1.12.1, firewall host memblokir download gambar peralihan

    Gejala:

    Saat mengupgrade dari 1.11.x ke 1.12.1, firewall host memblokir download image switch karena ketidakcocokan antarmuka yang digunakan oleh firewall host.

    Solusi:

    Terapkan solusi berikut sebelum mengupgrade, hanya jika Anda mengupgrade dari 1.11.x ke 1.12.x.

    1. Perbarui cluster admin root dan admin org.
      1. Dapatkan nama dan namespace nodepool untuk node bare metal admin root dan node bare metal admin org. Untuk cluster root-admin, gunakan kubeconfig root-admin. Perintah berikut mencantumkan inventaris mesin dan memfilter daftar menurut mesin bare metal:
        kubectl --kubeconfig=KUBECONFIG  get inventorymachines -l cluster.private.gdc.goog/provisioner=baremetal-provisioner.cluster.private.gdc.goog -o json | jq -c -r '.items[].spec.nodePoolRef | [.name, .namespace] | @csv | sub("\"";"";"g")' | sort | uniq
        Output menampilkan nama dan namespace nodepool:
        admin-control-plane-node-pool,org-1
        root-admin-control-plane,root

        Nilai dalam output sesuai dengan berikut ini:

        • ORG_ADMIN_NODEPOOL_NAME: admin-control-plane-node-pool
        • ORG_ADMIN_NODEPOOL_NAMESPACE: org-1
        • ROOT_ADMIN_NODEPOOL_NAME: root-admin-control-plane
        • ROOT_ADMIN_NODEPOOL_NAMESPACE: root
      2. Buat objek berikut di cluster root-admin dan org-admin untuk mengganti nama eth0 menjadi mgmt0 di node:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${ORG_ADMIN_NODEPOOL_NAME}
            namespace: ${ORG_ADMIN_NODEPOOL_NAMESPACE}
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${ROOT_ADMIN_NODEPOOL_NAME}
            namespace: ${ROOT_ADMIN_NODEPOOL_NAMESPACE}
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
              
      3. Kolom NODEPOOL_NAME dan NODEPOOL_NAMESPACE diisi dengan daftar semua kumpulan node di cluster masing-masing saat file YAML sebelumnya di-deploy.

        Contoh file yaml untuk cluster admin root dengan nama nodepool admin root dan nodepool admin org yang sebenarnya mungkin terlihat seperti ini:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: admin-control-plane-node-pool
            namespace: org-1
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: root-admin-control-plane
            namespace: root
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
      4. Terapkan file yaml ke cluster admin root:
        kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    2. Update cluster sistem:
      1. Dapatkan inventaris komputer dan filter daftar menurut komputer bare metal:
        kubectl --kubeconfig=_ORG_ADMIN_KUBECONFIG  get inventorymachines -l cluster.private.gdc.goog/provisioner=baremetal-provisioner.cluster.private.gdc.goog -o json | jq -c -r '.items[].spec.nodePoolRef | [.name, .namespace] | @csv | sub("\"";"";"g")' | sort | uniq
        Output-nya akan terlihat seperti ini:
        worker-node-pool-o1-highgpu1-48-gdc-metal,org-1-system-cluster

        Nilai dalam output sesuai dengan berikut ini:

        • SYSTEM_CLUSTER_NODEPOOL_NAME: worker-node-pool-o1-highgpu1-48-gdc-metal
        • SYSTEM_CLUSTER_NODEPOOL_NAMESPACE: org-1-system-cluster
      2. Kolom NODEPOOL_NAME dan NODEPOOL_NAMESPACE diisi dari daftar output perintah sebelumnya.

      3. Buat objek berikut di cluster sistem untuk mengganti nama eth0 menjadi mgmt0 di node dan mengupdate kebijakan OS:
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: ${SYSTEM_CLUSTER_NODEPOOL_NAME}
            namespace: ${SYSTEM_CLUSTER_NODEPOOL_NAMESPACE}
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename

        Contoh file yaml untuk cluster sistem dengan nama nodepool sebenarnya mungkin terlihat seperti ini:

        apiVersion: system.private.gdc.goog/v1alpha1
        kind: AnsiblePlaybook
        metadata:
          name: eth0-to-mgmt0-int-rename
          namespace: gpc-system
        spec:
          playbook: |
            - name: Rename interface from eth0 to mgmt0
              hosts: all
              gather_facts: no
              tasks:
              - name: Rename interface in netplan file
                ansible.builtin.lineinfile:
                  path: /etc/netplan/50-cloud-init.yaml
                  regexp: '^(.*)set-name: eth0(.*)$'
                  line: '\1set-name: mgmt0\2'
                  backrefs: true
                register: netplan
              - name: Disable cloud-init network configuration
                ansible.builtin.lineinfile:
                  path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
                  line: 'network: {config: disabled}'
                  state: present
                  create: true
              - name: Restart netplan
                command: netplan apply
                when: netplan.changed
        ---
        apiVersion: system.private.gdc.goog/v1alpha1
        kind: OSPolicy
        metadata:
          name: interface-renaming
          namespace: gpc-system
          labels:
            ospolicy.system.private.gdc.goog/override-maintenance: "true"
        spec:
          interval:
            period: 1m
          inventory:
          - apiVersion: baremetal.cluster.gke.io/v1
            kind: NodePool
            name: worker-node-pool-o1-highgpu1-48-gdc-metal
            namespace: org-1-system-cluster
          policy:
            installPlaybook:
              name: eth0-to-mgmt0-int-rename
      4. Terapkan file YAML ke cluster admin org:
        kubectl --kubeconfig=ORG_ADMIN_KUBECONFIG  -f YAML_FILE_NAME
    Jaringan yang lebih rendah 1.12.2

    Switch jaringan yang sudah dimuat sebelumnya dengan versi yang lebih rendah dari 9.3.10 dapat gagal melakukan bootstrap

    Gejala:

    Switch jaringan yang sudah dimuat sebelumnya dengan versi yang lebih rendah dari 9.3.10 gagal melakukan bootstrap karena versi switch yang diharapkan adalah 10.3(4a).

    Solusi:

    Upgrade firmware switch secara manual dari 9.3.5 ke 9.3.10, lalu dari 9.3.10 ke 10.3.4a.

    Jaringan yang lebih rendah 1.12.2

    Beberapa koneksi ke node org-admin mengalami waktu tunggu habis

    Gejala:

    Koneksi terputus di switch karena switch tidak memiliki konfigurasi terbaru karena masa berlaku sertifikat di switch telah berakhir.

    Solusi:

    1. Rotasi sertifikat pada switch.
    2. Aktifkan sertifikat baru:
      1. nxapi certificate httpskey keyfile bootflash:api-private-key.pem
      2. nxapi certificate httpscrt certfile bootflash:api-certificate.pem
      3. nxapi certificate enable
    Penyimpanan file dan blok 1.12.1
    1.12.2
    1.12.4

    Saat mengupgrade dari 1.11.1 ke 1.12.1, 1.12.2, atau 1.12.4, peluncuran subkomponen file-netapp-trident mungkin gagal

    Gejala:

    Subkomponen Linux Unified Key Setup (LUKS) tidak di-deploy ulang selama upgrade. Untuk memeriksa subkomponen file-netapp-trident:

    1. Menetapkan alias:
      alias ka='kubectl --kubeconfig=/path/to/root-admin/root-admin-kubeconfig' 
      alias ko='kubectl --kubeconfig=/path/to/org-admin/org-admin-kubeconfig'
    2. Dapatkan subkomponen:
      ka get subcomponent -n root file-netapp-trident -o yaml
      ko get subcomponent -n root file-netapp-trident -o yaml

    Outputnya mungkin terlihat seperti ini:

    conditions:
      - lastTransitionTime: "2024-03-28T01:37:20Z"
        message: 'Reconciliation error: E0100 - deploy: failed to install chart: release
          file-netapp-trident-backend failed, and has been uninstalled due to atomic being
          set: cannot patch "standard-rwo" with kind StorageClass: StorageClass.storage.k8s.io
          "standard-rwo" is invalid: parameters: Forbidden: updates to parameters are
          forbidden. && cannot patch "standard-block" with kind StorageClass: StorageClass.storage.k8s.io
          "standard-block" is invalid: parameters: Forbidden: updates to parameters are
          forbidden.'
        observedGeneration: 1
        reason: ReconciliationError
        status: "True"
        type: Reconciling 

    Dalam contoh ini, dua class penyimpanan gagal: standard-rwo dan standard-block.

    Solusi:

    1. Hapus StorageClasses yang gagal dibuat oleh tugas, seperti standard-rwo, standard-block, standard-rwo-non-luks, dan standard-block-non-luks.
    2. Picu pembuatan ulang StorageClasses dengan memulai ulang oclcm-backend-controller untuk cluster Anda (root-admin controller untuk cluster admin root dan org, org-admin controller untuk cluster sistem dan pengguna).
    3. Untuk versi 1.12.4, pastikan class penyimpanan yang diinstal memiliki anotasi disk.gdc.goog/luks-encrypted: yang ditetapkan ke benar (tidak termasuk class penyimpanan non-luks). Jika anotasi tidak disetel ke benar (true), ulangi langkah 1 dan 2.
    4. Mulai ulang deployment netapp-trident dan netapp-trident DaemonSet di cluster.
    5. Verifikasi bahwa rahasia LUKS telah dibuat untuk resource PersistentVolumeClaim (PVC) Anda. Setiap PVC harus memiliki secret dalam format g-luks-$pvc_name.
    6. Pastikan subkomponen file-netapp-trident tidak memiliki error dalam status.
    Penyimpanan objek 1.12.2

    Bucket penyimpanan objek mungkin belum siap setelah upgrade organisasi root

    Gejala:

    Setelah mengupgrade organisasi root dari 1.12.1 ke 1.12.x, validasi pasca-upgrade gagal dengan error berikut:

    upgrade_post_root_org_validation.go:121: Bucket(s) not ready: 8 errors occurred:
                    * Bucket "atat-system/invoice-export-bucket" not ready
                    * Bucket "mon-system/cortex-metrics-alertmanager" not ready
                    * Bucket "mon-system/cortex-metrics-blocks" not ready
                    * Bucket "mon-system/cortex-metrics-ruler" not ready
                    * Bucket "obs-system/audit-logs-loki-io" not ready
                    * Bucket "obs-system/cortex-metrics-alertmanager" not ready
                    * Bucket "obs-system/cortex-metrics-blocks" not ready
                    * Bucket "obs-system/cortex-metrics-ruler" not ready
          

    Solusi:

    Tambahkan finalizer secara manual sebelum memulai upgrade.

    Pengelolaan cluster 1.12.1, 1.12.2

    Cluster pengguna dengan Kubernetes versi 1.27.x mungkin memiliki kumpulan node yang gagal diinisialisasi

    Gejala:

    Node pool dalam cluster pengguna yang berjalan di Kubernetes versi 1.27.x mungkin tidak diinisialisasi, sehingga menyebabkan cluster pengguna tidak dapat menangani workload container.

    Solusi:

    Jangan membuat cluster pengguna dengan Kubernetes versi 1.27.x.

    Mesin virtual 1.12.0

    Terjemahan gambar gagal mengambil paket saat gambar sumber memiliki nilai default

    Gejala:

    Impor image VM gagal pada langkah terjemahan image jika image sumber Ubuntu berisi sumber APT default di sources.list.

    Solusi:

    Pastikan direktori /var/lib/apt/lists/ kosong di gambar sumber.

    Mesin virtual 1.12.2

    Pod pengimpor gagal atau macet

    Gejala:

    Mendapatkan daftar pod pengimpor:

    kubectl get pods -A | grep import 

    Outputnya mungkin terlihat seperti ini:

    user-vm-1-cluster               importer-vm-1b19e25c-disk-8dwzz                                   0/1     ContainerCreating      0                2d9h
    user-vm-1-cluster               importer-vm-72b96d39-disk-frv4f                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-1-cluster               importer-vm-c7a7a320-disk-qjgt2                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-06ca7e94-disk-b66fz                                   0/1     CreateContainerError   124 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-7e63b71b-disk-jxqfz                                   0/1     CreateContainerError   116 (43h ago)    2d9h
    user-vm-2-cluster               importer-vm-e0651556-disk-k8scf                                   0/1     CreateContainerError   123 (43h ago)    2d9h

    Log mungkin menampilkan peristiwa seperti berikut:

    Events:
      Type     Reason              Age                      From                     Message
      ----     ------              ----                     ----                     -------
      Warning  FailedAttachVolume  2m14s (x1630 over 2d9h)  attachdetach-controller  AttachVolume.Attach failed for volume "pvc-2000efe0-b4a0-4856-899b-7e0c9fd33405" : rpc error: code = Unknown desc = error publishing ontap-san driver: problem mapping LUN /vol/trident_pvc_2000efe0_b4a0_4856_899b_7e0c9fd33405/lun0: results: {http://www.netapp.com/filer/admin results}
    status,attr: failed
    reason,attr: No such LUN exists
    errno,attr: 9017
    lun-id-assigned: nil

    Solusi:

    1. Dapatkan nama PersistentVolumeClaim (PVC) dari pesan error, seperti pvc-2000efe0-b4a0-4856-899b-7e0c9fd33405.
    2. Cari PersistentVolume (PV) dengan nama ini dan catat spec.csi.volumeAttributes.internalName untuk digunakan nanti.
    3. Buat koneksi SSH ke cluster penyimpanan menggunakan langkah-langkah dalam runbook FILE-A0006.
    4. Tampilkan volume dan catat nama vserver yang ditampilkan perintah:
      volume show -volume INTERNAL_NAME
    5. Menonaktifkan volume offline:
      volume offline -volume INTERNAL_NAME -vserver VSERVER_NAME
    6. Hapus volume:
      volume delete -volume INTERNAL_NAME -vserver VSERVER_NAME
    Mesin virtual 1.12.1
    1.12.2

    VMRuntime mungkin belum siap karena kegagalan penginstalan network-controller-manager

    Gejala:

    VMRuntime di cluster target (dapat berupa cluster admin atau sistem) memiliki status VMRuntime.ready = false dan network-controller-manager di namespace kube-system tertunda

    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} get vmruntime vmruntime
    
    apiVersion: virtualmachine.private.gdc.goog/v1
    kind: VMRuntime
    metadata:
      ...
    spec:
      ...
    status:
      ready: false
    
          
    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} describe deploy network-controller-manager -n kube-system
    
    ...
    Events:
      Type     Reason       Age                      From     Message
      ----     ------       ----                     ----     -------
      Warning  FailedMount  3m36s (x122 over 3h55m)  kubelet  MountVolume.SetUp failed for volume "cert" : secret "network-webhook-server-cert" not found
          

    Solusi:

    Menghapus deployment network-controller-manager akan otomatis membuat ulang deployment dengan sertifikat yang diperlukan oleh operator VMM. Deployment akan memasuki status Running dan selanjutnya status VMRuntime akan berubah menjadi ready=true.

    kubectl --kubeconfig=${TARGET_CLUSTER_KUBECONFIG} delete deploy network-controller-manager -n kube-system
    Mesin virtual 1.12.2

    Waktu penyediaan yang lama untuk disk virtual machine

    Gejala:

    Pod pengimpor VM mengalami loop error dan volume data macet dalam status mengimpor selama lebih dari 90 menit. Status pod mungkin terlihat seperti ini:

    test-vm-project                           importer-disk-ops-test-vm-boot-disk-tbdtz                     0/1     CrashLoopBackOff   14 (47s ago)     90m     172.16.20.94    zb-aa-bm08    <none>           <none>
    test-vm-project                            importer-test-vm-1-boot-disk-plsxk         1/1     Running            1 (2m53s ago)    8m59s   172.16.22.244   zb-ab-bm09   <none>           <none>
    test-vm-project                            importer-test-vm-2-boot-disk-npjc8                          1/1     Running            6 (12m ago)      40m     172.16.22.180   zb-ab-bm09    <none>           <none>

    Semua impor disk akhirnya selesai dalam waktu tiga jam.

    Upgrade 1.12.2

    Saat mengupgrade dari 1.11.1 ke 1.12.2, subkomponen unet-nodenetworkpolicy-infra gagal merekonsiliasi

    Gejala:

    Pesan kegagalan mungkin terlihat seperti ini:

         message: 'Reconciliation error: E0111 - upgrade chart: release unet-nodenetworkpolicy-infra-assets
          failed, and has been rolled back due to atomic being set: cannot patch "mgmt-network"
          with kind Network: admission webhook "vnetwork.networking.gke.io" denied the
          request: Network.networking.gke.io "mgmt-network" is invalid: Spec.NodeInterfaceMatcher:
          Forbidden: Field is immutable'
          observedGeneration: 2

    Solusi:

    1. Jika kegagalan terjadi di root, pada langkah-langkah berikut, ganti KUBECONFIG dengan kubeconfig admin root.
    2. Jika kegagalan terjadi di org, ganti KUBECONFIG dengan kubeconfig admin org pada langkah-langkah berikut.
    3. Jalankan perintah berikut:
               alias k="kubectl --kubeconfig=KUBECONFIG"
               k get networks mgmt-network -o json | jq '.spec.nodeInterfaceMatcher.interfaceName'
    4. Jika outputnya adalah eth0, jalankan:
      k patch network mgmt-network -p '{"metadata":{"finalizers":null}}' --type=merge
    5. Hapus mgmt-network.
      k delete network mgmt-network
    6. Pastikan status untuk unet-nodenetworkpolicy-infra tidak memiliki error.

      Contoh:

               alias k="kubectl kubeconfig=KUBECONFIG"
               k get subcomponent unet-nodenetworkpolicy-infra -n org-1

      Outputnya akan terlihat seperti:

               NAME                           AGE   STATUS
               unet-nodenetworkpolicy-infra   34d   ReconciliationCompleted

    Upgrade 1.12.2

    Cluster sistem gagal selama upgrade dari 1.11.x ke 1.12.2

    Gejala:

    Selama atau setelah upgrade dari 1.11.x ke 1.12.2, tugas dengan nama bm-system-add-ons-* mungkin gagal dengan error berikut:

       E0326 17:04:22.997270       1 main.go:180] configdrift: Config drift health check failed
    
       F0326 17:04:22.997365       1 main.go:184] One or more checks failed.

    Solusi:

    Terapkan anotasi berikut ke semua cluster Kubernetes sebelum memulai upgrade dari 1.11 ke 1.12.2.

          # To bypass preflight check errors:
          baremetal.cluster.gke.io/bypass-check="vip_subnet"

    Misalnya, di cluster admin root, gunakan:

       kubectl annotate -n root cluster root-admin baremetal.cluster.gke.io/bypass-check="vip_subnet" --kubeconfig=ROOT_ADMIN_KUBECONFIG
       

    Upgrade 1.12.2

    Subkomponen file-observability gagal di org-1-system-cluster

    Gejala:

    Masalah ini terjadi saat mengupgrade dari 1.11.1 ke 1.12.2.

    Lihat file .yaml untuk subkomponen file-observability :

    kubectl get subcomponent file-observability -n org-1-system-cluster -o yaml

    File mungkin memiliki pesan berikut di bagian backendStatus.

    message: 'E0100 - deploy: failed to install chart: release file-observability-backend
            failed, and has been uninstalled due to atomic being set: deployments.apps
            "file-observability-backend-controller" not found'

    Solusi:

    1. Periksa namespace file-system untuk memverifikasi bahwa namespace tersebut tidak berhenti di org-admin cluster:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG get namespace file-system
    2. Jika berhenti, hapus target pemantauan apa pun di namespace file-system:
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG delete monitoringtarget -n file-system --all
    3. Jeda subkomponen file-observability hingga subkomponen mon-admin aktif, dengan menambahkan anotasi berikut ke subkomponen:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG annotate -n org-1 subcomponent file-observability lcm.private.gdc.goog/paused='true'
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG annotate -n org-1-system-cluster subcomponent file-observability lcm.private.gdc.goog/paused='true'
    4. Hapus anotasi untuk menjeda subkomponen setelah upgrade selesai:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG annotate -n org-1 subcomponent file-observability lcm.private.gdc.goog/paused-
      kubectl --kubeconfig ORG_ADMIN_KUBECONFIG annotate -n org-1-system-cluster subcomponent file-observability lcm.private.gdc.goog/paused-
    Upgrade 1.12.2

    HSMupgrade gagal karena hsmcluster belum siap

    Gejala:

    Masalah ini terjadi saat mengupgrade dari 1.11.1 ke 1.12.2.

    Setelah semua langkah upgrade untuk hsmupgraderequest dan ctmclusterupgraderequest selesai, error berikut akan muncul:

    HSMCluster "hsmcluster" is not ready. 

    Contoh:

     - lastTransitionTime: "2024-04-08T15:18:45Z" message: HSMCluster "hsmcluster" is not ready observedGeneration:
       2 reason: ziabhsm01PostUpgradeCheckFailed status: "False" type: AllComplete

    Solusi:

    1. Pastikan upgrade selesai di HSM dan dapatkan alamat IP setiap HSM:
      kubectl get hsm -A --kubeconfig=ROOT_ADMIN_KUBECONFIG

      Outputnya akan terlihat seperti ini:

      NAMESPACE    NAME          AGE   IP              READY   REASON
      gpc-system   zi-aa-hsm01   11d   10.252.96.192   True    ReconcileHSMSuccess
      gpc-system   zi-ab-hsm01   11d   10.252.97.192   True    ReconcileHSMSuccess
      gpc-system   zi-ac-hsm01   11d   10.252.98.192   True    ReconcileHSMSuccess
    2. Download dan konfigurasi ksctl.
    3. Jalankan ksctl system info get --url=https://HSM_MANAGEMENT_IP untuk memverifikasi bahwa semua versi HSM telah diupgrade ke .Spec.TargetVersion ctmclusterupgraderequest:

      Outputnya akan terlihat seperti ini:

            ksctl system info get
          {
            "name": "zi-aa-hsm01",
            "version": "2.13.1+10196",
            "model": "CipherTrust Manager k570",
            "vendor": "Thales Group",
            "crypto_version": "1.7.0",
            "uptime": "0 days, 1 hours, 20 minutes",
            "system_time": "2024-04-08T19:51:27Z"
          }

    4. Perbarui kolom Status.FirmwareVersion setiap HSM ke versi yang diupgrade seperti yang diperoleh pada langkah sebelumnya:

      Contoh:

          kubectl edit-status hsm HSM_NAME -n gpc-system
    5. Perbarui status kondisi terakhir ctmclusterupgraderequest.status.conditions dari False menjadi True. Setelah itu, status kondisi terakhir hsmupgraderequest.status.conditions juga menjadi benar.

      Contoh:

         kubectl edit-status ctmclusterupgraderequest CTM_VERSION -n gpc-system
         kubectl get ctmclusterupgraderequest CTM_VERSION -n gpc-system -o yaml

    Upgrade 1.12.2
    1.12.4

    IP pengelolaan tidak dapat dijangkau

    Selama upgrade IP pengelolaan server tidak dapat dijangkau, khususnya setelah upgrade OS switch.

    Dengan Rocky Linux, saat rute statis ditambahkan, IP tujuan yang digunakan untuk mencapai rute statis harus dapat dijangkau sebelum rute statis ditambahkan. Jika switch melakukan booting ulang setelah upgrade OS, IP pengelolaan tersebut mungkin tidak dapat dijangkau untuk sementara.

    Solusi:

    Buat koneksi SSH ke server menggunakan alamat IP data dan mulai ulang layanan jaringan untuk membuat ulang rute statis yang hilang:

    systemctl restart NetworkManager.service
    Sistem tiket 1.12.2

    Sinkronisasi pusat informasi sistem penjualan tiket gagal

    Gejala:

    Selama sinkronisasi pusat informasi, Anda mungkin melihat error berikut:

    Error: Article creation request failed status:400, body:map[error:map[detail:Rejected large REST payload with content-length = 10725676 bytes. Max allowed: 10485760 bytes. 

    Solusi:

    Tambahkan properti sistem untuk meningkatkan panjang maksimum:

    1. Di platform ServiceNow, masukkan sys_properties.list di filter navigasi.
    2. Klik New.
    3. Di kolom Name, masukkan glide.rest.max_content_length.
    4. Di kolom Type, pilih string.
    5. Di kolom Nilai, masukkan 15.
    6. Klik Kirim.
    7. Sinkronkan pusat informasi lagi.
    Sistem tiket 1.12.2

    Sistem tiket tidak memiliki upstream yang responsif

    Gejala:

    Saat men-deploy organisasi gdchservices secara manual, sistem tiket tidak memiliki upstream yang berfungsi, tidak ada VM yang dibuat, dan pod midserver tidak berfungsi di cluster gdchservices-system dalam namespace support.

    Solusi:

    Buat resource kustom TicketingSystem baru dengan image VM yang benar di cluster gdchservices-admin:

    apiVersion: ticketing.private.gdc.goog/v1
    kind: TicketingSystem
    metadata:
      name: as-replacement
      namespace: support
    spec:
      replicas: 2
      spec:
        image: ts-controller-app-server-2024-02-07-231907
        imagenamespace: vm-system
        memory: 12G
        size: 100G
        vcpus: 8
      version:
        name: glide-vancouver-07-06-2023__patch5-12-01-2023_12-11-2023_2006.zip
    Upgrade 1.12.2

    SSH untuk VM dengan IP pengelolaan dan log cilium gagal

    Gejala:

    Akses login tidak berfungsi di VM dengan IP pengelolaan. Anda mungkin melihat error yang terlihat seperti ini di log pod anetd:

    Unable to create endpoint:[PUT /endpoint/{id}][400] putEndpointIdInvalid failed setting up layer2 interface

    Solusi:

    Hapus pod virt-launcher untuk VM.

    Upgrade 1.12.2

    Subkomponen mz-etcd memperbarui spec.deployTarget dan spec.Namespace sehingga menyebabkan upgrade dari 1.11.x ke 1.12.x gagal

    Gejala:

    Selama upgrade dari 1.11x ke 1.12.x, Anda mungkin melihat error yang terlihat seperti ini:

          kubectl --kubeconfig PATH_TO_ROOT_ADMIN_KUBECONFIG get subcomponent -n root mz-etcd -o yaml
          kubectl --kubeconfig PATH_TO_ROOT_ADMIN_KUBECONFIG get subcomponent -n org-1 mz-etcd -o yaml

    Subkomponen mz-etcd memiliki spesifikasi berikut sebelum upgrade:

                  spec:
              crds:
                helmManifestSpec:
                  chartURL: gcr.io/mz-etcd-crds:1.11.1-gdch.260
                  upgradeHookPolicy: OnVersionChange
              deployTarget: Local
              namespace: ""

    Solusi:

    1. Hapus subkomponen berikut di cluster admin root:
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n root mz-etcd
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG delete subcomponent -n org-1 mz-etcd
    2. Periksa subkomponen di namespace root dan org:
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subcomponent -n root mz-etcd -o yaml
            kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get subcomponent -n org-1 mz-etcd -o yaml
    3. Subkomponen baru harus memiliki spesifikasi berikut dan chatURL harus menampilkan versi yang sudah diupgrade oleh cluster:
                backend:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-backend:1.12.2-gdch.785
          ...
            dash:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-dash:1.12.2-gdch.785
          ...
            deployTarget: Remote
            namespace: mz-system
            mon:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-mon:1.12.2-gdch.785
                upgradeHookPolicy: OnVersionChange
          ...
            targetClusterName: root-admin
            targetClusterNamespace: root
            webhooks:
              helmManifestSpec:
                chartURL: gcr.io/mz-etcd-webhooks:1.12.2-gdch.785
                upgradeHookPolicy: OnVersionChange
    Upgrade 1.12.2

    Upgrade penyimpanan objek menampilkan error selama pemeriksaan postflight atau preflight

    Gejala:

    Pemeriksaan pra-penerbangan atau pemeriksaan pasca-penerbangan gagal dengan error. Periksa log:

    kubectl logs -n gpc-system upgrade-managed-check-objectstorageupgrade-87698-rrjhrW0410

    Error mungkin terlihat seperti ini:

     03:42:05.701163       1 upgrade_check.go:276] 1 error occurred:
          * Group "/rbac.sysstd.role.vm-system.wtwf7txfmbhvujhpxrfampnrkdwqsvzro6i7rmo5tsfst4wbxldq" not ready for RBAC resource {Role vm-system g-vm-image-bucket-reader    }
    
       Error: check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
          * Bucket "gpc-system/range-read-internal" not ready
    
      F0410 03:42:05.701901       1 main.go:80] check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
          * Bucket "gpc-system/range-read-internal" not ready

    Solusi:

    Jika error terjadi selama pemeriksaan setelah penerbangan dan semua pemeriksaan lainnya selesai tanpa error, lewati pemeriksaan setelah penerbangan. Saat upgrade dimulai ulang, Anda juga harus melewati pemeriksaan pra-penerbangan menggunakan kubeconfig admin root:

     kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-postflight-check=ok && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-preflight-check=ok

    Misalnya, jika error terjadi di org-1, perintahnya akan terlihat seperti ini:

     kubectl delete organizationupgrade -n gpc-system org1 && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-postflight-check=ok && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-preflight-check=ok

    Jika error terjadi selama pemeriksaan pra-peluncuran dan semua pemeriksaan pra-peluncuran lainnya selesai tanpa error, lewati pemeriksaan pra-peluncuran:

    kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-preflight-check=ok

    Misalnya, jika error terjadi di org-1, perintahnya akan terlihat seperti ini:

    kubectl delete organizationupgrade -n gpc-system org-1 && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-preflight-check=ok

    Anda mungkin perlu menerapkan solusi ini lebih dari sekali jika gagal diterapkan.

    Portofolio ATAT 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Portofolio gagal disinkronkan

    Gejala:

    Error ConfigSync dengan pesan:

     KNV2009: failed to apply Portfolio.atat.config.google.com, atat-system/***: failed to create typed patch object (atat-system/***; atat.config. ││ google.com/v1alpha1, Kind=Portfolio): .spec.portfolioName: field not declared in schema. 

    Solusi:

    Skema Portfolio telah berubah di GDC versi 1.12. Kolom portfolioName telah difaktorkan ulang ke portfolioID. Temukan file YAML yang berisi resource kustom portofolio yang disebutkan dalam pesan error. Ganti nama kolom portfolioName menjadi portfolioID.

    Upgrade 1.12.2

    Kegagalan NTP OSPolicy memblokir semua OSPolicies lainnya agar tidak berjalan

    Gejala:

    Berikut adalah kemungkinan alasan mengapa tugas yang sedang berjalan tidak dibuat untuk tugas patch yang hanya menyelesaikan tugas pra-penerbangan:

    1. Kegagalan NTP mencegah semua tugas patch lainnya dijalankan.
    2. Node dalam status tidak sehat.
    3. Agen Konfigurasi OS tidak berjalan.
    4. Agen Konfigurasi OS tidak dapat berkomunikasi dengan layanan Konfigurasi OS.
    5. Terjadi masalah pada layanan OS Config.

    Solusi:

    1. Periksa CR `NodeTargetPolicy` node.
    2. Cari `.spec.osPolicies` CR `NodeTargetPolicy` yang memiliki `ref.name=admin-ntp-policy` dan `type: Ready` dengan status salah:
            # Enter the node InventoryMachine name.
            NAME=
            kubectl get nodetargetpolicy -n gpc-system $NAME -ojsonpath="{.spec.osPolicies}" | jq
    3. Outputnya akan terlihat seperti ini:
       - conditions:
                - lastTransitionTime: "2024-04-19T19:12:01Z"
                  message: ""
                  observedGeneration: 7
                  reason: Complete
                  status: "True"
                  type: PolicyPreflightCompleted
                - lastTransitionTime: "2024-04-19T19:12:01Z"
                  message: ""
                  observedGeneration: 7
                  reason: None
                  status: "True"
                  type: PolicyConflictNone
                - lastTransitionTime: "2024-04-19T19:56:35Z"
                  message: ""
                  observedGeneration: 7
                  reason: Reconciled
                  status: "True"
                  type: Ready
                diff: os-policy-preflight-admin-ntp-policymf2w4-dpbxw
                playbookName: server-ntp-config
                ref:
                  name: admin-ntp-policy
                  namespace: gpc-system
    4. Hapus semua kondisi `osPolicies` ini dan hanya pertahankan bagian berikut:
      - conditions:
                diff: os-policy-preflight-admin-ntp-policymf2w4-dpbxw
                playbookName: server-ntp-config
                ref:
                  name: admin-ntp-policy
                  namespace: gpc-system
    Upgrade 1.12.3
    1.12.4

    NodeUpgrade menampilkan Rocky Linux

    Gejala:

    CR NodeUpgrade menyebutkan version: rocky-86-xyz dalam spesifikasinya, meskipun node yang diupgrade adalah Ubuntu.

    Solusi:

    Anda tidak memerlukan solusi karena informasi ini tidak berbahaya. Node diupgrade dengan benar ke Ubuntu versi yang lebih baru.

    SIEM 1.12.0
    1.12.1
    1.12.2
    1.12.3
    1.12.4

    Kegagalan Tugas Pra-penginstalan SIEM

    Gejala:

    Tugas siem-*-preinstall di namespace root dan org-1 pada cluster admin root berulang kali gagal.

    Solusi:

    Tugas akan gagal jika gerbang fitur SIEMComponent dinonaktifkan. Kegagalan tidak menunjukkan bahwa komponen rusak. Penyelesaian komponen SIEM dapat dijeda jika gangguan terlalu mengganggu, tetapi umumnya disarankan untuk membiarkan komponen diaktifkan jika memungkinkan. Jika rekonsiliasi komponen dijeda, maka harus diaktifkan kembali secara manual saat penginstalan komponen SIEM tidak lagi dibatasi dalam upgrade mendatang.

    Upgrade node 1.12.0
    1.12.1
    1.12.2

    Upgrade node gagal karena file lvm.conf sudah tidak berlaku

    Gejala:

    Mungkin ada masalah dengan vgs, blkid, dan gather_facts Ansible tidak merespons. Masalah ini memengaruhi OS Rocky dan Ubuntu.

    Lakukan langkah-langkah berikut jika node sudah diupgrade. Proses untuk memperbarui file lvm.conf terdiri dari langkah-langkah berikut:

    1. Dapatkan daftar semua node agar perbaikan ini dapat diterapkan ke semua node.
    2. Buat file kebijakan OS & playbook Ansible.
    3. Terapkan perbaikan ke node.
    4. Periksa apakah perbaikan telah diterapkan.

    Prasyarat:

    1. Ikuti langkah-langkah dalam runbook IAM-R0004 untuk membuat ROOTCONFIG untuk cluster admin root dan ORGCONFIG untuk cluster admin org.
    2. Ikuti langkah-langkah dalam runbook IAM-R0005 untuk mendapatkan peran berikut di organisasi.

    Solusi:

    1. Identifikasi InventoryMachines yang sesuai dengan cluster:
      kubectl --kubeconfig=$ROOTCONFIG get inventorymachines
          kubectl --kubeconfig=$ORGCONFIG get inventorymachines

      Pisahkan output. Perbaiki satu cluster dalam satu waktu. Output-nya mungkin terlihat seperti ini:

          NAME
          bm-2bca8e3f
          bm-4caa4f4e
    2. Buat file playbook & kebijakan:
      apiVersion: system.private.gdc.goog/v1alpha1
          kind: AnsiblePlaybook
          metadata:
            name: lvm-conf-device-filter-node-update
            namespace: gpc-system
          spec:
            playbook: |
              - name: Add a device filter to /etc/lvm/lvm.conf
                hosts: all
                gather_facts: no
                tasks:
                  # Change lvm.conf
                  - name: Configure lvm for filtering out "dm" and "sg" devices
                    ansible.builtin.lineinfile:
                      path: /etc/lvm/lvm.conf
                      insertafter: '^(\s+|)devices(\s+|)\{'
                      line: '  filter = [ \"r|/dev/dm.|\", \"r|/dev/sg.|\" ]'
      
          ---
          apiVersion: system.private.gdc.goog/v1alpha1
          kind: OSPolicy
          metadata:
            name: lvm-conf-device-filter-node-update
            namespace: gpc-system
          spec:
            interval:
              period: 1m
            inventory:
               # this is the inventory from step 1 above,
               # see the syntex below
            policy:
              installPlaybook:
                name: lvm-conf-device-filter-node-update
    3. Bagian inventaris sebelumnya harus diisi seperti contoh ini. Tambahkan satu paragraf per node yang ditemukan di Langkah 1. Anda akan melakukan satu cluster dalam satu waktu, jadi isi bagian inventaris dengan node untuk satu cluster.
      inventory:
            # Node: bm-2bca8e3f
            - apiVersion: baremetal.cluster.gke.io/v1
              kind: InventoryMachine
              name: bm-2bca8e3f
      
            # Node: bm-4caa4f4e
            - apiVersion: baremetal.cluster.gke.io/v1
              kind: InventoryMachine
              name: bm-4caa4f4e
    4. Terapkan perbaikan ke cluster admin root:
      kubectl --kubeconfig=$ROOTCONFIG apply -f PRECEDING_FILENAME_WITH_ROOT_NODES
    5. Terapkan perbaikan ke cluster admin org:
      kubectl --kubeconfig=$ORGCONFIG  apply -f PRECEDING_FILENAME_WITH_ORG_NODES
    6. Mulai ulang server agar setelan baru diterapkan.
    7. Ikuti langkah-langkah dalam runbook OS-P0005 untuk memvalidasi bahwa node telah diupdate.
    8. Setelah mengonfirmasi bahwa kebijakan berhasil diselesaikan, hapus kebijakan menggunakan alat k9s:
      1. Buka kebijakan OS seperti :ospolicies.
      2. Temukan dan pilih kebijakan lvm-conf-device-filter-node-update.
      3. Tekan Ctrl + d.
      4. Konfirmasi penghapusan.

    Untuk meningkatkan masalah ini, ajukan tiket menggunakan runbook SUPP-G0008. Tiket harus menyertakan informasi berikut:

    1. Perintah yang dijalankan dan pesan keluarannya
    2. Detail seperti InventoryMachineName dan cluster
    3. Pesan log
    Sistem operasi (OS) 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Rocky OS salah dipilih untuk cluster atau organisasi baru

    Gejala:

    Masalah ini terjadi jika lingkungan sebelumnya di-deploy dengan 1.11 lalu diupgrade ke 1.12. Saat membuat cluster atau organisasi baru di versi 1.12.x, Rocky OS, bukan Ubuntu OS, dipilih untuk penyediaan node virtual machine dan bare metal karena versi Rocky OS yang ditentukan dalam CR ReleaseMetadata dan Userclustermetadata.

    Solusi:

    Terapkan solusi sementara berikut sebelum membuat organisasi baru:

    1. Periksa apakah ada CR OrganizationUpgrade yang tidak dalam status Succeeded: true:
      for item in $(kubectl --kubeconfig=KUBECONFIG get OrganizationUpgrade -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace --no-headers); do
        NAME=$(echo $item | awk '{print $1}')
        NAMESPACE=$(echo $item | awk '{print $2}')
        STATUS=$(kubectl --kubeconfig=KUBECONFIG get organizationupgrade ${NAME} -n ${NAMESPACE} -o json | jq '.status.conditions[] |  select(.type=="Succeeded") | .status')
        if [[ "$STATUS" != "True" ]]; then
           echo "Not in Succeeded: true state, stop following operations"
        fi
      done

      Jika demikian, eskalasikan masalah ini kepada tim engineering sebelum melanjutkan ke langkah berikutnya.

    2. Hapus semua CR OrganizationUpgrade yang ada untuk menghindari upgrade OS node yang tidak disengaja:
      for item in $(kubectl --kubeconfig=KUBECONFIG get OrganizationUpgrade -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace --no-headers); do
        NAME=$(echo $item | awk '{print $1}')
        NAMESPACE=$(echo $item | awk '{print $2}')
        echo "Deleting OrganizationUpgrade $NAME in namespace $NAMESPACE"
        kubectl --kubeconfig=KUBECONFIG delete OrganizationUpgrade $NAME -n $NAMESPACE
      done
    3. Tentukan versi GDC target untuk pembuatan organisasi baru. Harus ada ReleaseMetadata yang sesuai untuk versi target ini:
      TARGET_RELEASE=
    4. Identifikasi CR OSImageMetadata terbaru untuk target Ubuntu OS di cluster admin root dan tentukan variabel OS_VERSION:
      OS_VERSION=$(kubectl --kubeconfig=KUBECONFIG get osimagemetadata --sort-by=.metadata.creationTimestamp | grep -wv rocky | tail -1 |  awk '{print $1}' |  sed 's/gdch-node-os-//g')
      
      echo $OS_VERSION

      Outputnya mungkin terlihat seperti ini:

      1.12.4-gdch.4

      Pastikan variabel menggunakan versi major.minor.patch yang sama, seperti 1.12.4, dengan TARGET_RELEASE. Jika tidak, eskalasikan ke tim engineering sebelum melanjutkan ke langkah berikutnya.

    5. Perbarui target ReleaseMetadata untuk menggunakan OS_VERSION Ubuntu di cluster admin root:
      kubectl --kubeconfig=KUBECONFIG patch releasemetadata "${TARGET_RELEASE}" --type='json' -p='[{"op": "replace", "path": "/spec/adminCluster/bmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/adminCluster/vmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/systemCluster/bmNodeImage", "value": '"${OS_VERSION}"'}, {"op": "replace", "path": "/spec/systemCluster/vmNodeImage", "value": '"${OS_VERSION}"'}]'
    6. Identifikasi daftar UserclusterMetadata yang dipetakan untuk ReleaseMetadata target:
      UCMS=$(kubectl --kubeconfig=KUBECONFIG get releasemetadata  "${TARGET_RELEASE}" -o json | jq -r '.spec.userClusters[].name')
    7. Perbarui target UserclusterMetadata untuk menggunakan OS_VERSION Ubuntu di cluster admin root dan cluster admin org untuk setiap org. Jalankan perintah berikut untuk setiap cluster:
      for UCM in ${UCMS}; do
        echo "Updating UserclusterMetadata $UCM"
        kubectl --kubeconfig=KUBECONFIG patch userclustermetadata.upgrade.private.gdc.goog "${UCM}" --type='json' -p='[{"op": "replace", "path": "/spec/vmNodeImage", "value": '"${OS_VERSION}"'}]'
      done
    Mesin virtual 1.12.1
    1.12.2
    1.12.4

    Impor image BYO gagal untuk image qcow2 dan raw

    Gejala:

    Saat image VM lokal diimpor menggunakan CLI gdcloud compute images import, status impor akan berhenti di WaitingForTranslationVM atau ImportJobNotCreated. Hal ini karena disk sementara yang dibuat untuk menerjemahkan atau mengimpor menggunakan ukuran yang sama persis dengan image qcow2 atau raw tetapi LUKS menambahkan overhead beberapa MiB yang menyebabkan penyediaan disk gagal.

    Solusi:

    Buat VirtualMachineImageImport baru secara manual dengan nama gambar yang sama, tetapi dengan spec.minimumDiskSize yang lebih besar. Misalnya, jika perintah berikut digunakan untuk mengimpor gambar:

    gdcloud compute images import $IMPORT_NAME --project $PROJECT --source-file=$LOCAL_FILENAME --os=$OS

    Jika VirtualMachineImageImport asli yang dibuat secara otomatis oleh CLI memiliki minimumDiskSize sebagai X Gi, buat yang baru dengan X+1 Gi. Nilai didasarkan pada ukuran gambar yang diimpor. Dalam kasus qcow2, ukurannya adalah ukuran virtual, misalnya 20Gi harus diganti dengan 21Gi.

    Ganti nilai placeholder berdasarkan cara CLI dipanggil.

    1. Temukan VirtualMachineImageImport:
      kubectl get virtualmachineimageimport $IMPORT_NAME -n $PROJECT -o yaml

      Jika objek tidak ada, picu perintah gdcloud compute images import ... lagi. Setelah output konsol bertransisi dari Uploading image to ... ke Image import has started for ..., tekan CTRL + C agar image lokal diupload ke penyimpanan objek dan VirtualMachineImageImport dipertahankan untuk referensi guna membuat yang baru.

    2. Buat VirtualMachineImageImport baru dengan minimumDiskSize yang lebih besar:
      apiVersion: virtualmachine.gdc.goog/v1
      kind: VirtualMachineImageImport
      metadata:
        name: $IMPORT_NAME_NEW
        namespace: $NAMESPACE
      spec:
        imageMetadata:
          minimumDiskSize: $NEW_SIZE
          name: $IMAGE_NAME
          operatingSystem: $OS
        source:
           objectStorage:
            bucketRef:
              name: vm-images-bucket
            objectName: $LOCAL_FILENAME
    Mesin virtual 1.12.0
    1.12.1
    1.12.2
    1.12.3

    Impor gambar terhenti di TranslationInProgress

    Gejala:

    Pod importer-image-import-$VMII di namespace project cluster sistem mengalami error dengan error berikut: Unable to process data: Unable to transfer source data to target file: unable to write to file: stream error: stream ID 1; NO_ERROR; received from peer`). Objek VMII VirtualMachineImageImport memiliki kondisi Type Ready dengan Status False dan Reason TranslationInProgress setelah 2 jam memulai impor.

    Solusi:

    Untuk meningkatkan kecepatan, ubah ukuran disk minimum image menjadi 200 GiB sebagai berikut:

    kubectl get validatingwebhookconfiguration vmm-image-controller-v1-webhook -oyaml > /tmp/vmm-image-controller-v1-webhook.yaml
    kubectl delete validatingwebhookconfiguration vmm-image-controller-v1-webhook
    kubectl patch virtualmachineimageimport $VMII -n $PROJECT -p '{"spec": {"imageMetadata": {"minimumDiskSize": "200Gi"}}}'
    kubectl apply -f /tmp/vmm-image-controller-v1-webhook.yaml

    Perhatikan bahwa untuk menghapus dan menerapkan ValidatingWebhookConfiguration, Anda memerlukan kubeconfig admin cluster untuk cluster admin org. Anda bisa mendapatkan runbook berikut IAM-R0004.

    Jika Anda menggunakan gdcloud untuk memulai impor, perhatikan bahwa tidak ada cara untuk memberikan parameter minimumDiskSize. Anda harus membuat objek VMII, dan mengubah VMII seperti yang ditunjukkan pada perintah sebelumnya.

    Proses VirtualMachineImageImport berlanjut, tetapi macet lagi di langkah berikutnya. Di namespace project dalam cluster sistem, Anda melihat tugas image-import-$VMII terus gagal dengan error: error: stream error: stream ID x; NO_ERROR; received from peer. Pada tahap ini, impor gambar selesai. Gambar akhir diupload ke penyimpanan objek, tetapi VirtualMachineImage tidak ada. Anda dapat membuat VirtualMachineImage secara manual sebagai berikut:

    kubectl apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineImage
    metadata:
      name: $NAME
      namespace: $PROJECT
    spec:
      minimumDiskSize: 200Gi
      operatingSystem:
        name: $OS_NAME
    EOF

    `$NAME` harus cocok dengan `VMII.ImageMetadata.Name`, dan `$OS_NAME` dapat berupa salah satu dari [`ubuntu-2004`, `ubuntu-2204`, `windows-2019`, `rhel-8`] dan harus cocok dengan jenis image yang diimpor.

    Istio 1.12.4

    Deployment istio-eastwestgateway di namespace istio-system terhenti

    Gejala:

    Deployment istio-eastwestgateway di namespace istio-system mengalami masalah, dengan peristiwa pod yang menampilkan error Back-off pulling image "auto" dari kubelet.

    Untuk mendiagnosis masalah, periksa apakah mutatingwebhookconfiguration bernama istio-revision-tag-default ada di cluster yang sama dengan deployment gateway yang macet.

    kubectl --kubeconfig=KUBECONFIG get mutatingwebhookconfiguration istio-revision-tag-default

    Solusi:

    • Jika konfigurasi ada, mulai ulang deployment istio-eastwestgateway di namespace istio-system.
      kubectl --kubeconfig=KUBECONFIG rollout restart deployment/istio-eastwestgateway -n istio-system
    • Jika konfigurasi tidak ada, tunggu hingga webhook ada, yang akan terjadi segera karena berada dalam loop rekonsiliasi.
    Pemantauan 1.12.2

    cortex-store-gateway memulai ulang dengan error batas slice di luar rentang

    Gejala:

    Pod cortex-store-gateway dimulai ulang dengan pesan error berikut di log:

    panic: runtime error: slice bounds out of range

    Solusi:

    1. Jeda subkomponen mon-cortex di cluster sistem.
      kubectl --kubeconfig $ORG_ADMIN_CONFIG annotate subcomponent mon-cortex -n $SYSTEM_CLUSTER_NAMESPACE lcm.private.gdc.goog/paused=true
    2. Ubah configMap cortex-config di cluster sistem dan tetapkan waktu tunggu untuk memcached dalam index_cache ke dua detik sehingga konfigurasi index_cache terlihat seperti ini:
       index_cache:
            backend: memcached
            memcached:
              addresses: dnssrvnoa+_memcached._tcp.cortex-index-memcached.mon-system.svc.cluster.local
              timeout: 2s
    3. Mulai ulang pod cortex-store-gateway di cluster sistem agar menggunakan konfigurasi yang diupdate.
    Upgrade 1.12.4

    Mulai ulang node admin root selama upgrade menyebabkan kegagalan subkomponen

    Gejala:

    Node bare metal muncul sebagai NotReady dan server macet di layar booting dengan pesan terakhir yang mengatakan Retrieving encryption keys.

    Solusi:

    1. Mulai ulang iLO.
    2. Setelah iLO aktif kembali, mulai ulang server.
    Upgrade 1.12.4

    Nomor versi untuk storagecluster tidak ditampilkan selama upgrade

    Gejala:

    Setelah upgrade, CR StorageCluster tidak menampilkan nilai untuk kolom status StorageVersion. Periksa versi:

    kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get StorageCluster -n gpc-system
    Ikuti langkah-langkah dalam solusi, jika kolom versi kosong.

    Solusi:

    Mulai ulang deployment file-storage-backend-controller:

    kubectl --kubeconfig  ROOT_ADMIN_KUBECONFIG rollout restart deployment -n file-system file-storage-backend-controller

    Infrastruktur Operations Suite (OI) 1.12.4

    Jalur penginstal Fluent Bit salah

    Gejala:

    Lokasi penginstal fluent-bit diubah menjadi operations_center\bin\fluent-bit-win64.msi. Copy-ConfigHostFiles.ps1 mengharapkan penginstal klien fluent-bit agar cocok dengan pola fluent-bit-*-win64.*. Penginstal gagal menemukan penginstal karena pola tersebut tidak lagi cocok.

    Solusi:

    1. Buka file Copy-ConfigHostFiles.ps1.
    2. Temukan baris berikut:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-*-win64.*').FullName
    3. Edit baris sebelumnya untuk menambahkan lokasi penginstal yang benar:
      $(Get-Item -Path 'H:\operations_center\bin\fluent-bit-win64.*').Name
    Infrastruktur Operations Suite (OI) 1.12.4

    Jalur penginstal Nessus salah

    Gejala:

    Lokasi penginstal Nessus diubah menjadi operations_center\bin\NessusAgent-x64.msi. Copy-ConfigHostFiles.ps1 mengharapkan penginstal klien cocok dengan nama file /NessusAgent-10.4.1-x64.msi. Penginstal gagal menemukan penginstal karena pola tersebut tidak lagi cocok.

    Solusi:

    1. Buka file Copy-ConfigHostFiles.ps1.
    2. Temukan baris berikut:
      [pscustomobject]@{source = "H:\operations_center\bin\Nessus-10.4.1-x64.msi"; destination = "C:\config\nessus_mgr\Nessus-10.4.1-x64.msi" }
      [pscustomobject]@{source = "H:\operations_center\bin\Nessus-10.4.1-x64.msi"; destination = "C:\config\nessus_oob\Nessus-10.4.1-x64.msi" }
    3. Edit baris sebelumnya untuk menambahkan lokasi penginstal yang benar, mengubah Nessus-10.4.1-x64.msi menjadi NessusAgent-x64.msi:
      [pscustomobject]@{source = "H:\operations_center\bin\NessusAgent-x64.msi"; destination = "C:\config\nessus_mgr\NessusAgent-x64.msi" }
      [pscustomobject]@{source = "H:\operations_center\bin\NessusAgent-x64.msi"; destination = "C:\config\nessus_oob\NessusAgent-x64.msi" }
    Penyimpanan objek 1.12.4

    Pembuatan organisasi baru macet di status VMImageDistributing

    Gejala:

    Anda mungkin melihat pesan seperti ini:

    Reason:                NamespaceCreated
    Status:                True
    Type:                  ObjectNamespaceReady
    Last Transition Time:  2024-07-12T00:49:29Z
    Message:               awaiting images distribution to be finished
    Observed Generation:   1
    Reason:                VMImageDistributing
    Status:                Unknown
    Type:                  Ready  

    Masalah ini disebabkan oleh konfigurasi endpoint S3 yang tidak ada untuk organisasi baru.

    Solusi:

    Buat grup HA secara manual untuk organisasi baru.

    1. Melalui prosedur break glass, dapatkan kubeconfig cluster admin root yang memiliki akses baca ke resource berikut:
      • Organisasi
      • ObjectStorageAdminNode
      • SubnetClaim
      • ObjectStorageSite
      • Rahasia
    2. Catat nama organisasi:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get Organization -A
    3. Catat alamat IP klien ObjectStorageAdminNode CR di cluster admin root.
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode

      Untuk setiap CR AdminNode:

      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get ObjectStorageAdminNode NODE_NAME -o jsonpath='{.spec.network.clientIP}'
    4. Catat rentang alamat IP yang tersedia dan IP yang dicadangkan dalam rentang tersebut:
      kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG_ABSOLUTE_PATH get SubnetClaim -n root external-objectstorage-client-lif-subnet -o jsonpath='{.status.ipv4SubnetStatus}'
    5. Ambil kredensial login UI Pengelolaan StorageGRID dari secret gpc-system/objectstorage-breakglass-root-level1 di cluster root-admin.
    6. Login ke UI Pengelolaan StorageGRID dengan kredensial dari langkah sebelumnya. URL dalam status ObjectStorageSite:
      kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig get ObjectStorageSite -n gpc-system mb-obj-site-1 -o jsonpath='{.status.managementAPIEndpointURL}'
    7. Buka tab Konfigurasi, lalu klik Grup Ketersediaan Tinggi.
    8. Buka tampilan detail setiap grup HA dan catat alamat IP Virtual (VIP).
    9. Buat grup HA baru:
      1. Nama Grup: Pola nama adalah ORGANIZATION_NAME-ha . Dalam hal ini, nilainya adalah org-2-ha.
      2. Deskripsi Grup: Gunakan grup HA yang ada untuk pola deskripsi.
      3. Antarmuka: Pilih semua eth2.
      4. Urutan prioritas: Antarmuka utama harus memiliki prioritas tertinggi.
      5. SubnetCIDR: Kolom ini diisi secara otomatis oleh StorageGRID. Pastikan subnet cocok dengan status.ipv4SubnetStatus.cidrBlock di SubnetClaim external-objectstorage-client-lif-cidr.
      6. IP virtual: IP berikutnya dalam rentang IP yang tersedia. IP tidak boleh berkonflik dengan IP yang dicadangkan, IP klien Admin Node, dan VIP grup HA yang ada.
    10. Merotasi kredensial break glass StorageGRID.
    Upgrade 1.12.4

    Rekonsiliasi berkelanjutan di subkomponen

    Gejala:

    Saat mengupgrade org root dari 1.12.2 ke 1.12.4, subkomponen iac-gitlab memiliki status rekonsiliasi yang sedang berlangsung. Untuk mendiagnosis masalah, periksa log prometheus, misalnya:

    kubectl logs gitlab-prometheus-server-5d6d9599f-l2l7s -n gitlab-system -c prometheus-server

    Log mungkin mencakup error seperti ini:

    unexpected fault address 0x7f217cf26000
    fatal error: fault
    [signal SIGBUS: bus error code=0x2 addr=0x7f217cf26000 pc=0x46c302]
    
    goroutine 1 [running]:
    runtime.throw({0x3018bed?, 0x0?})
        /usr/local/go/src/runtime/panic.go:992 +0x71 fp=0xc000a3b098 sp=0xc000a3b068 pc=0x438431

    Solusi:

    1. Jalankan sleep 3600 untuk mendapatkan shell di container yang sedang berjalan, misalnya.
      kubectl exec --stdin --tty POD_NAME -n gitlab-system -c prometheus-server -- /bin/sh
      /prometheus $ df -h

      Ganti POD_NAME dengan nama pod, seperti gitlab-prometheus-server-d7969c968-hppsl.

    2. Periksa output untuk melihat apakah folder /data penuh:
      Filesystem                Size      Used Available Use% Mounted on
      overlay                 866.4G    147.1G    719.3G  17% /
      tmpfs                    64.0M         0     64.0M   0% /dev
      tmpfs                    94.3G         0     94.3G   0% /sys/fs/cgroup/dev/mapper/luks-trident_pvc_6fb4dc48_72df_4bf1_825f_267818e3fefd
                                7.8G      7.3G         0 100% /data
    3. Jika masalah ini terjadi selama upgrade, hapus tugas migrasi karena memiliki waktu tunggu 3600 detik, lalu lanjutkan upgrade:
      kubectl delete job gitlab-migrations-1-fe7-2 -n gitlab-system
    Upgrade 1.12.4

    Pemeriksaan awal IAM gagal

    Gejala:

    Untuk mendiagnosis masalah, periksa log upgrade IAM, misalnya:

    kubectl logs -n gpc-system upgrade-managed-check-iamupgrade-qbdm5-tl264 

    Outputnya mungkin terlihat seperti ini:

    I0724 21:57:20.456782       1 upgrade_check.go:39] IAM preflight check failed after 60000000000: Org iam-system deployments not ready: Deployment iam-authzpdp-backend-server is not ready; ready replicas 2,replicas 3

    Solusi:

    1. Lihat pesan error sebelumnya dan catat namespace dan nama deployment. Dalam contoh ini, NAME adalah iam-authzpdp-backend-server dan NAMESPACE adalah iam-system.
    2. Dapatkan daftar pod:
      kubectl get pods -n NAMESPACE | grep NAME
    3. Perhatikan hasil dalam format berikut:
      iam-authzpdp-backend-server-6875654c4b-64h4t            2/2     Running   0             29h
      iam-authzpdp-backend-server-6875654c4b-pvscg            1/2     Running   0             29h
      iam-authzpdp-backend-server-6875654c4b-v7jnl            2/2     Running   0             29h

      Perhatikan pod yang tidak memiliki semua container yang siap. Dalam hal ini POD_NAME adalah iam-authzpdp-backend-server-6875654c4b-pvscg yang memiliki salah satu dari dua penampung yang belum siap, yang ditunjukkan oleh status 1/2. Jika ada lebih dari satu pod seperti ini, ulangi langkah berikutnya untuk setiap pod yang terpengaruh.

    4. Hapus pod yang tidak sepenuhnya responsif:
      kubectl delete pod -n NAMESPACE POD_NAME>
    5. Jalankan kembali perintah dari Langkah 2. Perhatikan bahwa semua pod seharusnya sudah sehat sekarang. Langkah ini mungkin memerlukan waktu beberapa menit.
    6. Jika pod yang dihapus tidak digantikan oleh pod yang responsif, buka tiket dukungan.
    Upgrade 1.12.1
    1.12.2
    1.12.4

    Status OrganizationUpgrade adalah Unknown

    Gejala:

    Status OrganizationUpgrade adalah Unknown, setelah upgrade selesai.

    Solusi:

    Jika kolom versi di Organization cocok dengan kolom targetVersion, Anda dapat mengabaikan status Tidak diketahui.

    Upgrade 1.12.4

    Kegagalan upgrade subkomponen untuk opa gatekeeper

    Gejala:

    Selama upgrade organisasi tenant dari 1.12.2 ke 1.12.4, upgrade subkomponen opa gatekeeper gagal dengan ReconciliationError.

    Solusi:

    1. Edit objek mutatingwebhookconfiguration edr-sidecar-injector-webhook-cfg cluster pengguna yang terpengaruh. Jika ada lebih dari satu cluster pengguna yang terpengaruh, ulangi langkah-langkah untuk setiap cluster pengguna yang terpengaruh:
           kubectl edit mutatingwebhookconfiguration edr-sidecar-injector-webhook-cfg
    2. Edit bagian webhooks > (edr-sidecar-injector.gpc-system.internal) > namespaceSelector > matchExpressions > (key: kubernetes.io/metadata.name) > values untuk menambahkan dua nilai berikut ke dalamnya:
      • opa-system
      • cert-manager

      Objek yang diperbarui akan terlihat seperti:

                  apiVersion: admissionregistration.k8s.io/v1
              kind: MutatingWebhookConfiguration
              ...
              webhooks:
              - admissionReviewVersions:
                name: edr-sidecar-injector.gpc-system.internal
                namespaceSelector:
                  matchExpressions:
                  - key: kubernetes.io/metadata.name
                    operator: NotIn
                    values:
                    - kube-system
                    - opa-system
                    - cert-manager
              ...

    3. Perubahan mungkin memerlukan waktu hingga satu jam untuk menyelesaikan masalah ini.
    Upgrade 1.12.4

    ansibleplaybook tidak diupgrade sebagai bagian dari upgrade cluster

    Gejala:

    Saat mengupgrade dari 1.12.2 ke 1.12.4, ansibleplaybook tidak diupgrade sebagai bagian dari upgrade cluster. Perbaikan yang diupdate di ansibleplaybook tidak diterapkan dan memblokir os-policy yang menjalankan ansibleplaybook versi sebelumnya.

    Solusi:

    1. Hapus tugas Kubernetes create-ansible-playbooks:
            JOB_NAME=create-ansible-playbooks-xxx
            JOB_NAMESPACE=xxx
            kubectl delete job $JOB_NAME -n JOB_NAMESPACE --kubeconfig=/path/to/admin-cluster-config 
    2. Mulai ulang deployment os-core-controller.
    3. Tindakan ini akan memicu ulang tugas dan memperbarui playbook.
    DNS 1.12.4

    Pembuatan org gagal karena traffic DNS ke node admin root sudah tidak berlaku

    Gejala:

    Saat membuat organisasi baru, Anda mungkin melihat waktu tunggu habis untuk subkomponen core-dns di log:

    [INFO] 192.0.2.0:60741 - 40400 "A IN objectstorage-tenant-mgmt.gdch.example.com. udp 72 false 1232" - - 0 2.000828817s
    [ERROR] plugin/errors: 2 objectstorage-tenant-mgmt.gdch.example.com. A: read udp 10.244.4.184:59927->192.0.2.1:53: i/o timeout
    [INFO] 192.0.2.0:51401 - 5813 "AAAA IN objectstorage-tenant-mgmt.gdch.example.com. udp 72 false 1232" - - 0 2.000585231s
    [ERROR] plugin/errors: 2 objectstorage-tenant-mgmt.gdch.example.com. AAAA: read udp 10.244.4.184:48542->192.0.2.1:53: i/o timeout

    Solusi:

    1. Perbarui layanan gpc-coredns-forwarder-udp dan layanan gpc-coredns-forwarder-tcp cluster admin root, lalu tambahkan rentang IP baru Anda di rentang sumber load balancer.
    2. Jika perubahan CR diganti, jeda subkomponen dns-core dengan anotasi lcm.private.gdc.goog/paused="true".
    Penyimpanan file dan blok 1.12.4

    Subkomponen file-netapp-trident gagal di cluster root

    Gejala:

    Saat mengupgrade dari 1.12.2 ke 1.12.4, subkomponen file-netapp-trident mengalami masalah saat menghapus StorageClasses. Status berikut ditampilkan:

          status:
      backendStatus:
        conditions:
        - lastTransitionTime: "2024-05-02T06:04:14Z"
          message: 'E0121 - rollback chart: no StorageClass with the name "standard-rwo-non-luks"
            found'
          observedGeneration: 2
          reason: ReconciliationError
          status: "True"
          type: Reconciling
        - lastTransitionTime: "2024-04-08T00:12:53Z"
          message: Successfully pulled chart
          observedGeneration: 2
          reason: ChartPullDone
          status: "True"
          type: ChartPull
        - lastTransitionTime: "2024-05-01T10:10:08Z"
          message: Fetched parameters from default, runtime
          observedGeneration: 2
          reason: ParametersDone
          status: "True"
          type: Parameters
        - lastTransitionTime: "2024-05-02T06:04:04Z"
          message: 'E0121 - rollback chart: no StorageClass with the name "standard-rwo-non-luks"
            found'
          observedGeneration: 2
          reason: DeployError
          status: "False"
          type: Deployed
        - lastTransitionTime: "2024-04-23T06:50:12Z"
          message: Readiness check job passed
          observedGeneration: 1
          reason: ReadinessCheckDone
          status: "True"
          type: Ready
        deploymentFinished: false
        lastDeployTimestamp: "2024-05-02T06:03:16Z"
        readyAfterDeploy: true
        version: ""
      conditions:
      - lastTransitionTime: "2024-05-02T06:04:14Z"
        message: 'Reconciliation error: E0121 - rollback chart: no StorageClass with the
          name "standard-rwo-non-luks" found'
        observedGeneration: 2
        reason: ReconciliationError
        status: "True"
        type: Reconciling
      crdsStatus:
        conditions:
        - lastTransitionTime: "2024-04-07T08:02:33Z"
          message: Successfully pulled chart
          observedGeneration: 2
          reason: ChartPullDone
          status: "True"
          type: ChartPull
        - lastTransitionTime: "2024-04-07T08:02:33Z"
          message: No parameters to fetch
          observedGeneration: 2
          reason: ParametersDone
          status: "True"
          type: Parameters
        - lastTransitionTime: "2024-04-07T08:02:34Z"
          message: Readiness source is empty
          observedGeneration: 2
          reason: ReadinessCheckSkipped
          status: "True"
          type: Ready
        - lastTransitionTime: "2024-05-01T18:37:52Z"
          message: Ready
          observedGeneration: 2
          reason: ReconciliationCompleted
          status: "False"
          type: Reconciling
        deploymentFinished: true
        lastDeployTimestamp: "2024-05-02T06:04:03Z"
        readyAfterDeploy: true
        version: 1.12.3-gdch.312

    Solusi:

    1. Jeda subkomponen file-netapp-trident:
            ## Set KUBECONFIG to root-admin KUBECONFIG
            export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
            kubectl annotate subcomponent file-netapp-trident -n $cluster_namespace lcm.private.gdc.goog/paused=true
    2. Hapus StorageClasses yang gagal dibuat oleh tugas, seperti standard-rwo, standard-block, standard-rwo-non-luks, dan standard-block-non-luks:
            kubectl delete storageclass $(kubectl get storageclasses -o jsonpath='{.items[?(@.provisioner=="csi.trident.netapp.io")].metadata.name}
    3. Picu pembuatan ulang StorageClasses dengan memulai ulang oclcm-backend-controller untuk cluster Anda (pengontrol root-admin untuk cluster admin org. dan root, pengontrol admin org. untuk cluster sistem dan pengguna):
            kubectl rollout restart deployment oclcm-cm-backend-controller -n oclcm-system
    4. Mulai ulang deployment netapp-trident dan netapp-trident DaemonSet di cluster:
            kubectl rollout restart deployment netapp-trident-controller -n netapp-trident
            kubectl rollout restart daemonset netapp-trident-node-linux -n netapp-trident
    5. Verifikasi bahwa rahasia LUKS telah dibuat untuk resource PersistentVolumeClaim (PVC) Anda. Setiap PVC harus memiliki secret dalam format g-luks-$pvc_name.
            kubectl get secret -n $pvc_namespace g-luks-$pvc_name
    6. Pastikan subkomponen file-netapp-trident tidak memiliki error dalam status:
            kubectl get subcomponent -n $cluster_namespace file-netapp-trident -o jsonpath='{.status}' | jq
      Catatan: Tidak boleh ada error dalam pesan dan `backendStatus`. `crdStatus` harus menampilkan `deploymentFinished: true`
    7. Lanjutkan subkomponen agar penggantian diterapkan.
    Server fisik 1.12.4

    Bootstrap server gagal

    Gejala:

    Saat mem-bootstrap server, Anda mungkin melihat pesan seperti ini di log bare metal:

    Conditions:
        Last Transition Time:  2024-08-12T17:10:23Z
        Message:               Introspection timeout
        Observed Generation:   2
        Reason:                FailedProvision
        Status:                True
        Type:                  BaremetalFailure
        Last Transition Time:  2024-08-10T12:23:30Z
        Message:
        Observed Generation:   2
        Reason:                KeyManagerConfigurationSucceeded
        Status:                True
        Type:                  KeyManagerConfigured
        Last Transition Time:  2024-08-10T12:11:17Z
        Message:               The server is powered off or unknown
        Observed Generation:   2
        Reason:                NotPoweredOn
        Status:                False
        Type:                  Ready

    Solusi:

    1. Untuk setiap fase yang macet, ikuti petunjuk dalam runbook berikut:
      1. SERV-R0006
      2. SERV-R0007
      3. SERV-R0008
    2. Jika masalah masih belum terselesaikan, ikuti langkah-langkah dalam runbook SERV-R0001.
    3. Jika masalah masih belum terselesaikan, buka tiket dukungan.
    Upgrade 1.12.0
    1.12.1
    1.12.2
    1.12.4

    Pod Prometheus utama tidak dibersihkan selama upgrade

    Gejala:

    Pod primary-prometheus-shardX-replicaX terlihat di namespace obs-system dan namespace mon-system. Jika primary-prometheus-shardX-replicaX hanya ada di namespace obs-system setelah upgrade 1.12, berarti masalahnya tidak diketahui dan solusi sementara tidak boleh dilakukan.

    Perilaku yang dimaksud adalah primary-prometheus-shardX-replicaX hanya ada di namespace mon-system setelah upgrade 1.12 selesai.

    Solusi:

    1. Hapus primary-prometheus-shardX-replicaX StatefulSet secara manual di namespace obs-system.
    2. Jangan menghapus StatefulSet primary-prometheus-shardX-replicaX di namespace mon-system.
    Jaringan 1.12.4

    PodCIDR tidak ditetapkan ke node meskipun ClusterCIDRConfig dibuat

    Gejala:

    ClusterCIDRConfig adalah objek yang diperlukan untuk menetapkan PodCIDRs. Meskipun ClusterCIDRConfig dibuat, PodCIDRs tidak ditetapkan. Masalah ini terjadi jika ClusterCIDRConfig dibuat pada saat yang sama dengan saat pod ipam-controller melakukan bootstrapping. Pembuatan cluster macet dalam status merekonsiliasi:

    1. Periksa apakah objek ClusterCIDRConfig dibuat di cluster:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get clustercidrconfigs -oyaml

      Outputnya mungkin terlihat seperti ini:

      apiVersion: v1
          items:
          - apiVersion: networking.gke.io/v1alpha1
            kind: ClusterCIDRConfig
            metadata:
              annotations:
                baremetal.cluster.gke.io/managed: "true"
                kubectl.kubernetes.io/last-applied-configuration: |
                  {"apiVersion":"networking.gke.io/v1alpha1","kind":"ClusterCIDRConfig","metadata":{"annotations":{"baremetal.cluster.gke.io/managed":"true"},"creationTimestamp":null,"name":"root-admin-control-plane"},"spec":{"ipv4":{"cidr":"172.24.0.0/21","perNodeMaskSize":23},"ipv6":{"cidr":"fd00:1::2:0/112","perNodeMaskSize":119}},"status":{}}
              creationTimestamp: "2024-06-17T05:27:55Z"
              finalizers:
              - networking.kubernetes.io/cluster-cidr-config-finalizer
              generation: 1
              name: root-admin-control-plane
              resourceVersion: "2172"
              uid: d1216fe3-04ed-4356-a105-170d72d56c90
            spec:
              ipv4:
                cidr: 172.24.0.0/21
                perNodeMaskSize: 23
              ipv6:
                cidr: fd00:1::2:0/112
                perNodeMaskSize: 119
          kind: List
          metadata:
            resourceVersion: ""
    2. Jalankan describe untuk salah satu objek node cluster yang macet dalam proses rekonsiliasi dan periksa apakah ada peristiwa CIDRNotAvailable pada objek node:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG describe node NODE_NAME

      Peristiwa output mungkin terlihat seperti ini:

      Type     Reason            Age                   From             Message
            ----     ------            ----                  ----             -------
            Normal   CIDRNotAvailable  3m22s (x96 over 21h)  cidrAllocator    Node gpc-adhoc-4f533d50vm-worker-node2-zone1 status is now: CIDRNotAvailable
            Warning  ReconcileError    3m22s (x96 over 21h)  ipam-controller  CIDRAssignmentFailed, retrying: failed to get cidrs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, unable to get clusterCIDRs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, no available CIDRs

    Solusi:

    1. Mulai ulang pod ipam-controller-manager:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG -n kube-system rollout restart ds ipam-controller-manager
    2. Setelah pod ipam-controller-manager dalam status berjalan, periksa apakah podCIDR ditetapkan ke node:
      kubectl --kubeconfig=CLUSTER_KUBECONFIG get nodes -oyaml | grep podCIDR

      Outputnya mungkin terlihat seperti ini:

      podCIDR: 172.24.4.0/23
          podCIDRs:
          podCIDR: 172.24.2.0/23
          podCIDRs:
          podCIDR: 172.24.0.0/23
          podCIDRs:
    Vertex AI 1.12.0
    1.12.1
    1.12.2
    1.12.4

    API terlatih menampilkan status Enabling di antarmuka pengguna

    MonitoringTarget menampilkan status Not Ready saat cluster pengguna sedang dibuat, sehingga API yang telah dilatih sebelumnya terus menampilkan status Enabling di antarmuka pengguna.

    Solusi:

    1. Buka menu di browser Chrome Anda (ikon tiga titik).
    2. Klik Alat lainnya > Alat developer untuk membuka konsol.
    3. Klik tab Network di konsol.
    4. Temukan permintaan ai-service-status.
    5. Klik tab Response dalam permintaan ai-service-status untuk menampilkan konten permintaan tersebut.
    6. Pastikan semuanya sudah siap kecuali komponen MonitoringTarget dan LoggingTarget.
    Penyimpanan objek 1.12.4

    Beberapa peringatan upgrade penyimpanan objek dapat diabaikan

    Gejala:

    Saat mengupgrade penyimpanan objek, Anda mungkin melihat peringatan seperti ini:

     Type     Reason          Age                From                              Message
      ----     ------          ----               ----                              -------
      Warning  ReconcileError  55m (x2 over 55m)  ObjectStorageAdminNodeReconciler  Reconcile error, retrying: error storing the ssh creds: 500 Internal Server Error:ErrorMessage: {"text":"The GDU service is currently busy. Try again later. Contact technical support if the issue persists.","key":"maintenance.gdu.gdu_server_locked

    Solusi:

    1. Pastikan setiap node memiliki kredensial SSH yang sesuai dan disimpan dalam secret.
      1. Periksa node admin:
        kubectl get objectstorageadminnodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; done
      2. Periksa node penyimpanan:
        kubectl get objectstoragestoragenodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; done

      Output yang berhasil akan terlihat seperti contoh berikut untuk node penyimpanan:

      NAME                                      TYPE     DATA   AGE
      gpcstgecn01-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h
      NAME                                      TYPE     DATA   AGE
      gpcstgecn02-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h
      NAME                                      TYPE     DATA   AGE
      gpcstgecn03-gce-gpcstgesite01-ssh-creds   Opaque   2      3d23h

      Jika secret tidak ditemukan, error akan terlihat seperti ini:

      Error from server (NotFound): secrets "gpcstgeadm02-gce-gpcstgesite01-ssh-creds" not found
    2. Jika perintah tidak menampilkan error apa pun, Anda dapat mengabaikan error yang dilaporkan oleh rekonsiliator dengan aman.
    Vertex AI 1.11.x
    1.12.x

    Pod dan layanan frontend Terjemahan gagal diinisialisasi

    Gejala:

    Selama upgrade, cluster DB Terjemahan dibuat ulang, yang menyebabkan secret cluster sistem ODS secret-store menjadi tidak berlaku dan tidak sinkron. Oleh karena itu, pod dan layanan frontend Terjemahan gagal diinisialisasi.

    Solusi:

    Hapus secret di cluster sistem:

    kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG delete secret postgres-secret-store -n ai-translation-system

    Ganti SYSTEM_CLUSTER_KUBECONFIG dengan jalur ke file kubeconfig di cluster sistem.

    Pengontrol akan membuat ulang secret secara otomatis dan menyinkronkannya kembali dengan cluster DB.

    Server fisik 1.12.4

    Server tidak dapat terhubung ke pengelola kunci

    Gejala:

    Server tidak dapat terhubung ke pengelola kunci, sehingga status server tidak dapat tersedia. Masalah ini menyebabkan tugas server-encrypt-and-create-logical-drive gagal dan cluster admin tidak siap. Anda mungkin melihat error dalam log tugas seperti ini:

    Error: Error during command execution: ansible-playbook error: one or more host failed
    Command executed: /usr/local/bin/ansible-playbook --extra-vars {"server_generation":"gen10","ssa_crypto_pwd":"vf{kXgbL?VFcV]%0","ssa_master_key":"ten-admin-org-2"} --inventory 192.0.2.0, --private-key /etc/ssh-key/id_rsa --become serve
    r/encrypt_and_create_logical_drive.yaml
    exit status 2   

    Solusi:

    Lakukan AuxCycle dan periksa apakah iLO dapat terhubung ke pengelola kunci.

    Logging 1.12.4

    Log write-ahead mengisi volume persisten

    Gejala:

    Loki hanya memiliki satu volume persisten (PV) untuk write-ahead log (WAL) dan indeks. WAL dapat mengisi PV jika pod Loki tidak dapat terhubung ke bucket penyimpanan selama berjam-jam. Jika PV tidak memiliki ruang yang tersisa, Loki tidak dapat dipulihkan kecuali jika Anda menghapus PV dan memulai ulang StatefulSet.

    Solusi:

    Untuk memulihkan pod Loki dari status ini, Anda harus menurunkan skala StatefulSet yang sesuai dan menghapus PV tanpa ruang yang tersisa.

    Ikuti langkah-langkah berikut untuk memulihkan pod Loki:

    1. Pastikan IO Tool Container diinstal di workstation. Untuk mengetahui detailnya, lihat panduan pengoperasian OOPS-P0065.
    2. Untuk mendapatkan izin yang Anda perlukan untuk mengedit resource, minta Admin Keamanan Anda untuk memberi Anda peran berikut:
      • observability-viewer
      • observability-admin
    3. Tetapkan variabel lingkungan KUBECONFIG dengan jalur ke file kubeconfig di cluster admin root. Untuk mengetahui detailnya, lihat buku pedoman IAM-R0004.
    4. Tetapkan variabel lingkungan ORG_NAME dengan nama organisasi yang terpengaruh.
    5. Simpan konten berikut dalam file YAML bernama log-admin-overrides.yaml:
      apiVersion: lcm.private.gdc.goog/v1
      kind: SubcomponentOverride
      metadata:
        name: log-admin-overrides
      spec:
        subComponentRef: log-admin
        backend:
          operableParameters:
            controller:
              disableReconcilers: "LoggingPipelineReconciler"
    6. Nonaktifkan LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    7. Tetapkan variabel lingkungan KUBECONFIG dengan jalur ke file kubeconfig di cluster tempat pod Loki yang terpengaruh berjalan. Untuk mengetahui detailnya, lihat buku pedoman IAM-R0004.
    8. Tetapkan variabel lingkungan LOKI_POD_NAME dengan nama pod Loki yang terpengaruh.
    9. Dapatkan nama Loki StatefulSet:
      export LOKI_STATEFULSET_NAME=$(kubectl get pod $LOKI_POD_NAME -n obs-system -o json | jq -r '.metadata.labels.app')
    10. Dapatkan nama PVC Loki:
      export LOKI_PVC_NAME=$(kubectl get pod $LOKI_POD_NAME -n obs-system -o json | jq -r '.spec.volumes[] | select(.persistentVolumeClaim != null) | .persistentVolumeClaim.claimName')
    11. Dapatkan replika StatefulSet Loki:
      export LOKI_STATEFULSET_REPLICAS=$(kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system -o json | jq -r '.status.replicas')
    12. Perkecil skala Loki StatefulSet:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=0
    13. Pastikan tidak ada pod StatefulSet yang berjalan:
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      Output harus terlihat seperti contoh berikut:

      NAME                      READY   AGE
      audit-logs-loki-io        0/0     4d3h
    14. Hapus PVC yang terpengaruh:
      kubectl delete pvc $LOKI_PVC_NAME -n obs-system
    15. Tingkatkan skala Loki StatefulSet:
      kubectl scale statefulset $LOKI_STATEFULSET_NAME -n obs-system --replicas=${LOKI_STATEFULSET_REPLICAS}
    16. Tetapkan variabel lingkungan KUBECONFIG dengan jalur ke file kubeconfig di cluster admin organisasi yang terpengaruh. Untuk mengetahui detailnya, lihat buku pedoman IAM-R0004.
    17. Edit konten dalam file YAML log-admin-overrides.yaml sebagai berikut:
      apiVersion: lcm.private.gdc.goog/v1
      kind: SubcomponentOverride
      metadata:
        name: log-admin-overrides
        namespace: root
      spec:
        subComponentRef: log-admin
        backend:
          operableParameters:
            controller:
              disableReconcilers: ""
    18. Aktifkan LoggingPipelineReconciler:
      kubectl apply -f log-admin-overrides.yaml -n ${ORG_NAME}
    19. Pastikan semua pod StatefulSet berjalan dan responsif:
      kubectl get statefulset $LOKI_STATEFULSET_NAME -n obs-system

      Output harus terlihat seperti contoh berikut:

      NAME                 READY   AGE
      audit-logs-loki-io   5/5     2d5h

      Dalam hal ini, StatefulSet memiliki lima dari lima replika (5/5) yang tersedia.

    Upgrade 1.12.4

    Tugas dijadwalkan secara berkelanjutan

    Gejala:

    Tugas dijadwalkan secara berkelanjutan. Segera setelah tugas dihentikan, tugas baru dijadwalkan. Tugas yang dijadwalkan secara berkelanjutan adalah:

    • unet-networkpolicy-assets-parameter
    • unet-nodenetworkpolicy-assets-parameter
    • unet-nodenetworkpolicy-assets-readiness
    • unet-userclusterpolicy-assets-parameter
    • unet-clustermesh-backend-parameter
    • unet-clustermesh-backend-readiness

    Solusi:

    1. Jeda subkomponen berikut:
      • unet-networkpolicy
      • unet-nodenetworkpolicy
      • unet-nodenetworkpolicy
      • unet-userclusterpolicy
      • unet-clustermesh
    2. Lanjutkan subkomponen setiap kali ada perubahan pada rahasia fleet-info di cluster admin root. Masalah ini terjadi saat ada perubahan pada switch pengelolaan instance, seperti kr get managementswitches -A atau perubahan pada cidrclaim di namespace Organisasi.
    3. Lanjutkan subkomponen setiap kali ada perubahan pada resource NodePool di cluster admin org. Batalkan jeda subkomponen sebelum memulai.
    Upgrade 1.12.4

    Upstream yang sehat untuk ServiceNow tidak tersedia

    Gejala:

    1. Saat mengupgrade dari 1.12.2 ke 1.12.4, upstream yang berfungsi baik untuk ServiceNow tidak tersedia. Anda mungkin melihat pesan berikut: failed to stage volume: LUKS passphrase cannot be empty.
    2. Class penyimpanan system-performance-rwo tidak diaktifkan untuk LUKS. Lampiran volume menunjukkan bahwa PVC diaktifkan LUKS.
    3. Reconciler akan menelusuri secret dengan frasa sandi LUKS. Karena lampiran volume menyatakan bahwa volume tersebut diaktifkan LUKS dan kelas penyimpanan tidak diaktifkan LUKS, frasa sandi rahasia tidak dibuat.

    Solusi:

    1. Dapatkan Kubeconfig untuk cluster root atau org-admin tempat masalah muncul:
            export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
    2. Hapus class penyimpanan system-performance-rwo dan buat ulang:
            kubectl delete storageclass system-performance-rwo
            kubectl apply -f system-performance-rwo.yaml
    3. Buat yaml baru untuk class penyimpanan system-performance-rwo dan aktifkan LUKS:
                 # kubectl get sc system-performance-rwo -o yaml
           allowVolumeExpansion: true
           apiVersion: storage.k8s.io/v1
           kind: StorageClass
           metadata:
             annotations:
               disk.gdc.goog/luks-encrypted: "true"
               helm.sh/resource-policy: keep
               lcm.private.gdc.goog/claim-by-force: "true"
               meta.helm.sh/release-name: file-netapp-trident-backend
               meta.helm.sh/release-namespace: netapp-trident
               storageclass.kubernetes.io/is-default-class: "false"
             labels:
               app.kubernetes.io/managed-by: Helm
             name: system-performance-rwo
           parameters:
             backendType: ontap-san
             csi.storage.k8s.io/node-expand-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-expand-secret-namespace: ${pvc.namespace}
             csi.storage.k8s.io/node-publish-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-publish-secret-namespace: ${pvc.namespace}
             csi.storage.k8s.io/node-stage-secret-name: g-luks-${pvc.name}
             csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace}
             fsType: ext4
             selector: tier=performance
           provisioner: csi.trident.netapp.io
           reclaimPolicy: Delete
           volumeBindingMode: Immediate
    Upgrade 1.12.4

    Upgrade subkomponen file-netapp-trident memiliki status Reconciliation ongoing

    Gejala:

    Anda mungkin melihat status subkomponen file-netapp-trident berubah-ubah dari Reconciling ke ReconciliationCompleted.

    Solusi:

    Rekonsiliasi yang sedang berlangsung aman untuk diabaikan jika kondisi berikut terpenuhi:

    1. TridentBackend adalah online.
    2. Konfigurasi TridentBackend adalah bound.
    3. Deployment netapp-trident-controller responsif.
    4. DaemonSet netapp-trident-node-linux dalam kondisi baik.
    Upgrade 1.12.4

    Upgrade node pekerja cluster sistem gagal menghasilkan delta antara manifest dan snapshot

    Gejala:

    Saat mengupgrade dari 1.12.2 ke 1.12.4, upgrade organisasi akan terhenti di tahap NodeUpgrade dan tugas upgrade node akan menampilkan error berikut:

          Message: failed to generate delta between manifest and snapshot: failed to create or update delta configmap: failed to calculate delta between snapshot and manifest: failed to get valid OS distribution for delta comparison, distribution:

    Untuk mengonfirmasi masalah, lakukan langkah-langkah berikut:

    1. Dapatkan Kubeconfig untuk cluster root atau org-admin tempat upgrade node gagal dan periksa apakah nodeupgradetask telah gagal:
           export KUBECONFIG=${ROOT_OR_ORG_ADMIN_KUBECONFIG}
           kubectl get nodeupgradetask -A -ojsonpath='{.items[*].status.conditions[?(@.status != "True")]}' | jq 
    2. Pastikan pesan cocok dengan pesan error sebelumnya:
            Message: failed to generate delta between manifest and snapshot: failed to create or update delta configmap: failed to calculate delta between snapshot and manifest: failed to get valid OS distribution for delta comparison, distribution:
    3. Periksa apakah osartifactsnapshot memiliki distribusi yang tidak ada:
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    4. Pastikan ada setidaknya satu snapshot yang dicetak, yang tidak memiliki setelan distribusi.

    Solusi:

    1. Dapatkan Kubeconfig untuk cluster tempat node berada:
           export KUBECONFIG=${CLUSTER_KUBECONFIG}
           kubectl rollout restart -n os-system os-core-controller 
    2. Pastikan bahwa snapshot kini memiliki distribusi. (Perintah ini mungkin memerlukan waktu beberapa menit):
            kubectl get osartifactsnapshots.system.private.gdc.goog -A -o json | jq '.items[] | select(.status.distribution == "") | .metadata.name'
    3. Perintah ini tidak akan menampilkan hasil. Jika Anda masih melihat distribusi yang tidak ada, buka permintaan dukungan.
    Upgrade 1.12.4

    kubelet gagal menghapus cgroup untuk pod dengan log spam

    Gejala:

    1. kubelet terus mencetak log spam berikut:
      May 22 23:08:00 control-1--f1c6edcdeaa9e08-e387c07294a9d3ab.lab.anthos kubelet[3751]: time="2024-05-22T23:08:00Z" level=warning msg="Failed to remove cgroup (will retry)" error="rmdir /sys/fs/cgroup/freezer/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podea876418628af89ec2a74ea73d4a6023.slice/cri-containerd-d06aacfec2b399fcf05a187883341db1207c04be3698ec058214a6392cfc6148.scope: device or resource busy"
      ……
      May 22 23:09:04 control-1 kubelet[3751]: time="2024-05-22T23:09:04Z" level=warning msg="Failed to remove cgroup (will retry)" error="rmdir /sys/fs/cgroup/net_cls,net_prio/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podea876418628af89ec2a74ea73d4a6023.slice/cri-containerd-d06aacfec2b399fcf05a187883341db1207c04be3698ec058214a6392cfc6148.scope: device or resource busy"
    2. Proses runc init dibekukan, sehingga mencegah kubelet menghapus pod cgroup.

    Solusi:

    1. Gunakan skrip berikut untuk menemukan proses yang memblokir penghapusan cgroup:
           # Find matching cgroup directories
      MATCHING_CGROUPS=$(find /sys/fs/cgroup -type d -name "*74353c*")
      
      
      if [ -z "$MATCHING_CGROUPS" ]; then
       echo "No cgroups found containing 'd06aac'."
       exit 0
      fi
      
      
      echo "Matching cgroups:"
      
      
      for cgroup in $MATCHING_CGROUPS; do
       echo "- $cgroup"  # Print cgroup path
      
      
       # Check if cgroup.procs exists
       if [ -f "$cgroup/cgroup.procs" ]; then
         echo "  Processes:"
      
      
         # List PIDs in cgroup.procs
         for pid in $(cat "$cgroup/cgroup.procs"); do
           # Get process details
           ps -o pid,comm,cmd --no-headers $pid 2>/dev/null  # Suppress errors if process doesn't exist
         done
       else
         echo "  No cgroup.procs file found."  # Handle cases where cgroup.procs is missing
       fi
      
      
       echo  # Add a newline for better readability
       done
    2. Periksa status freezer menggunakan cat freezer.state. Statusnya harus FROZEN.
    3. Echo "THAWED" > freezer.state
    4. cgroup berhasil dihapus. Kubelet berhenti mengirim spam ke log.
    Performa 1.12.4

    Subkomponen perf-ptaas dengan error rekonsiliasi

    Gejala:

    Subkomponen perf-ptaas menampilkan kode error berikut, sehingga mencegah deployment PTaaS:

    Reconciliation error: E0100 - deploy: failed to transfer ownership of conflicting resources for install: these resources need to be force claimed, but they are not annotated: [Resource: "resourcemanager.gdc.goog/v1, Resource=projects", GroupVersionKind: "resourcemanager.gdc.goog/v1, Kind=Project"

    Solusi:

    PTaaS di-deploy di organisasi gdchservices.

    1. Periksa anotasi dan label project PTaaS gdch-perftest dan bucket perftest-bucket-reports di namespace perftest gdch-perftest. Bucket mungkin tidak memiliki label: app.kubernetes.io/managed-by=Helm dan anotasi: meta.helm.sh/release-name=perf-ptaas-assets dan meta.helm.sh/release-namespace=gdch-perftest. Tambahkan label dan anotasi ini secara manual:
      kubectl --kubeconfig gdchservices-admin-kubeconfig label buckets -n gdch-perftest perftest-bucket-reports app.kubernetes.io/managed-by=Helm
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports meta.helm.sh/release-name=perf-ptaas-assets
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports meta.helm.sh/release-namespace=gdch-perftest
      Pastikan OCLCM mengklaim bucket secara paksa:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate buckets -n gdch-perftest perftest-bucket-reports lcm.private.gdc.goog/claim-by-force=true
    2. Periksa anotasi project PTaaS gdch-perftest. Project mungkin salah dikonfigurasi dengan anotasi: meta.helm.sh/release-name=perf-ptaas-assets. Ubah anotasi ini menjadi meta.helm.sh/release-name=perf-ptaas-backend:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate projects -n gpc-system gdch-perftest meta.helm.sh/release-name=perf-ptaas-backend --overwrite=true
      Pastikan OCLCM mengklaim project secara paksa:
      kubectl --kubeconfig gdchservices-admin-kubeconfig annotate projects -n gpc-system gdch-perftest lcm.private.gdc.goog/claim-by-force=true
    3. Verifikasi bahwa subkomponen direkonsiliasi di cluster root-admin:
      kubectl get subcomponent -n gdchservices perf-ptaas