Dalam deployment multi-zona, zona diupgrade satu per satu dan secara independen. Tidak ada orkestrasi upgrade global di seluruh zona. IO harus melakukan upgrade di setiap zona untuk organisasi yang ingin diupgrade ke versi baru. Akibatnya, organisasi di zona yang berbeda dapat menggunakan versi yang berbeda pada waktu tertentu.
Urutan upgrade yang diuraikan di halaman ini adalah mengupgrade org root serta semua org tenant dalam satu zona sebelum beralih ke zona lain. Resource global diupgrade di akhir, setelah semua zona diupgrade.
Halaman ini menjelaskan langkah-langkah untuk melanjutkan upgrade multi-zona Google Distributed Cloud (GDC) air-gapped dengan memberikan jenis informasi berikut:
- Akses yang diperlukan dan cara mendapatkannya.
- Alat yang Anda butuhkan.
- Langkah-langkah yang harus dilakukan sebelum Anda melakukan upgrade.
- Cara dan urutan melakukan upgrade untuk berbagai komponen Distributed Cloud.
Daftar berikut menentukan setiap komponen upgrade:
Versi target: Gunakan versi target yang sama untuk semua zona.
Satu per satu: Upgrade satu zona dalam satu waktu. Sebelum upgrade dipicu di satu zona, pastikan tidak ada zona lain yang menjalankan upgrade.
Resource global: Ditentukan sebagai resource Kubernetes yang di-deploy di kube-apiserver global, bukan resource zonal yang memiliki satu salinan per zona. Resource global mengikuti siklus proses yang berbeda. Perhatikan bahwa mereka perlu diupgrade di akhir, hanya satu kali.
Persiapan
URL disediakan untuk mengakses di luar lingkungan yang terisolasi dari internet.
Sebelum memulai upgrade, siapkan hal berikut:
Jalur ke file
kubeconfigyang Anda peroleh dengan menjalankangdcloud auth loginke cluster admin root.Artefak rilis baru, didownload dan ditransfer dengan aman ke komputer Anda. Ikuti langkah-langkah yang diberikan di Mengirim artefak ke container registry.
Mesin host untuk menjalankan upgrade manual, dengan file
kubeconfigcluster admin root di mesin.Setiap Masalah Umum untuk upgrade DARI versi tersebut akan diatasi sebelum memulai upgrade. Khusus untuk upgrade dari 1.13.1, pastikan masalah berikut telah diselesaikan:
Membuat laporan kepatuhan
Laporan kepatuhan mencantumkan Organisasi yang:
- tidak lagi didukung
- tidak menginstal patch keamanan penting
Pembuatan laporan kepatuhan adalah langkah opsional dan memerlukan IO yang diautentikasi yang memiliki organization-admin role. Untuk membuat laporan, jalankan perintah berikut:
gdcloud system upgrade report-compliance
Untuk mengetahui informasi selengkapnya tentang persyaratan persiapan, lihat bagian Prasyarat.
Identity and Access Management
Sebelum memulai upgrade, di setiap zona:
Dapatkan file kubeconfig dengan menjalankan gdcloud auth login ke cluster admin root dan semua cluster admin org.
Ikuti petunjuk dalam runbook Proses elevasi akses dan hak istimewa IAM-R0005 untuk menambahkan:
ClusterRoleBindingdengan cluster-adminClusterRoledi cluster admin root setiap zona- org admin cluster sehingga akses admin sementara diperoleh.
Menjeda upgrade resource global di semua zona
Gunakan file kubeconfig yang diperoleh untuk menjeda semua upgrade resource global di setiap zona.
# Pause upgrades to global root admin resources.
kubectl patch kubeapiserver global-root-admin -n global-kube-system -p='{"spec":{"deploymentPolicy":"LocalOnly"}}' --type=merge --kubeconfig=ROOT_ADMIN_KUBECONFIG
# Pause upgrades to global org admin resources.
kubectl patch kubeapiserver global-org-admin -n global-kube-system -p='{"spec":{"deploymentPolicy":"LocalOnly"}}' --type=merge --kubeconfig=ORG_MGMT_API_KUBECONFIG
Mengupgrade org root global
Mengupgrade org root global pada tingkat tinggi mencakup langkah-langkah berikut:
Upgrade org root di semua zona. Setiap zona diupgrade satu per satu.
Periksa apakah zona saat ini adalah zona primer. Perintah berikut menampilkan "true" di zona utama dan tidak menampilkan apa pun di zona non-utama.
kubectl get ObjectStorageAdminNode -o jsonpath='{.items[*].status.isPrimary}' --kubeconfig=ROOT_ADMIN_KUBECONFIG; echoUpgrade komponen yang memerlukan koordinasi lintas zona.
Mengupgrade resource admin root global.
Pemeriksaan sebelum upgrade
Upgrade zona satu per satu. Sebelum memulai upgrade org di satu zona, hubungkan ke semua zona lainnya dan jalankan perintah berikut untuk memastikan perintah menampilkan status siap di semua zona. Jika ada zona yang melaporkan bahwa zona tersebut belum siap, jangan lanjutkan upgrade. Periksa org di zona tersebut untuk mendiagnosis masalah.
ORG_NAME=root
[[ $(kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG get org ${ORG_NAME} -n gpc-system -ojsonpath='{.status.conditions[?(@.type=="Ready")].status}') == 'True' ]] && echo ready || echo not ready
1. Mendownload dan menyalin paket update
Petunjuk ini menjelaskan cara memulai:
- Download paket update ke perangkat yang dapat diakses internet untuk disalin ke drive USB.
- Salin paket update dari drive USB ke lingkungan yang terisolasi dari internet.
Untuk konteks tambahan, lihat Mendownload file untuk mendownload detail distribusi Distributed Cloud, dan Transfer download untuk mengetahui informasi tentang perangkat penyimpanan portabel yang Anda gunakan untuk mentransfer file ke lingkungan yang terisolasi.
Bekerja sama dengan POC Google Anda untuk memutuskan apakah upgrade ditujukan untuk deployment Distributed Cloud yang dioperasikan partner, sehingga harus menggunakan file rilis model partner.
PARTNER_OPERATED="IS_PARTNER_OPERATED" if [[ ${PARTNER_OPERATED:?} == "true" ]]; then RELEASE_SUFFIX="_partner" export GCS_BUCKET=private-cloud-release-partner else RELEASE_SUFFIX="" export GCS_BUCKET=private-cloud-release fiDownload paket update ke drive USB Anda dari komputer yang dapat mengakses internet. Gunakan detail versi dan ringkasan yang diberikan oleh kontak Google Anda.
- Jalankan
gcloud auth loginuntuk mengakses bucket Cloud Storage. Jalankan skrip dengan
--skip-unzipuntuk mengambil paket update dan skrip downloader ke direktori saat ini, seperti/home/download.VERSION=VERSION DOWNLOADER=gdch-downloader-prod${RELEASE_SUFFIX}-$VERSION.sh gcloud storage cp "gs://${GCS_BUCKET:-private-cloud-release}/$VERSION/$DOWNLOADER*" . PUBLIC_KEY=$(cat <<-PUBEND -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEn46iVSyFXsvuKLZ4dVOr2AqlXDnR 5cKztkpraexHDxn/ozq03EvrdkRmZkSACFfcaEFyitpraidgAx8sPjvzXQ== -----END PUBLIC KEY----- PUBEND ) echo "${PUBLIC_KEY}" > "key.pub" openssl dgst -sha256 -verify "key.pub" -signature "${DOWNLOADER}.sig" ${DOWNLOADER} && chmod +x $DOWNLOADER && ./$DOWNLOADER --skip-unzipJika Anda mengupgrade dengan file rilis model partner, ikuti petunjuknya untuk menyiapkan paket software bagi distribusi model partner.
- Jalankan
Salin skrip downloader dan direktori
gdchke USB drive Anda.Salin update ke OCIT dari drive USB Anda. Tempatkan file di tempat yang serupa seperti
/home/download/.Tentukan ulang variabel ini di OCIT dan ekstrak pembaruan:
cd /root VERSION=VERSION DOWNLOADER=gdch-downloader-prod${RELEASE_SUFFIX}-$VERSION.sh PUBLIC_KEY=$(cat <<-PUBEND -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEn46iVSyFXsvuKLZ4dVOr2AqlXDnR 5cKztkpraexHDxn/ozq03EvrdkRmZkSACFfcaEFyitpraidgAx8sPjvzXQ== -----END PUBLIC KEY----- PUBEND ) echo "${PUBLIC_KEY}" > "key.pub" openssl dgst -sha256 -verify "key.pub" -signature "${DOWNLOADER}.sig" ${DOWNLOADER} && chmod +x $DOWNLOADER && ./$DOWNLOADER --skip-downloadPengunduh akan mengekstrak rilis ke
gdch/full-release-1.2.0-gdch.243(mis./home/download/gdch/full-release-1.2.0-gdch.243). Tetapkan variabel ini ke jalur lengkap:export ARTIFACTS_ROOT='/home/download/gdch/full-release-RELEASE_VERSION'-gdch.BUILD_NUMBER'
2. Mengonfigurasi upgrade artifact registry
Agar berhasil melakukan upgrade, Anda harus menyelesaikan hal berikut:
Kirim artefak ke container registry
Tetapkan
KUBECONFIGke file kubeconfig untuk cluster admin root.export KUBECONFIG=ROOT_ADMIN_KUBECONFIGBuat
ClusterRoleBindingsyang diperlukan:kubectl create clusterrolebinding io-upgrade-admin --clusterrole=upgrade-admin-dc --user=USER_EMAIL kubectl create clusterrolebinding io-upgrade-debugger --clusterrole=upgrade-debugger --user=USER_EMAILBuat
RoleBindingsyang diperlukan:kubectl create rolebinding io-system-artifact-management-secrets-admin --role=system-artifact-management-secrets-admin --user=USER_EMAIL -n anthos-creds kubectl create rolebinding io-system-artifact-management-admin --role=system-artifact-management-admin --user=USER_EMAIL -n gpc-system kubectl create rolebinding io-dnssuffix-viewer --role=dnssuffix-viewer --user=USER_EMAIL -n gpc-systemBuat
RoleBindingsyang diperlukan untuk mengirimkan paket OCI:kubectl create rolebinding infrastructure-operator-sar-harbor-admin --user=gdch-infra-operator-USER_EMAIL --role=sar-harbor-admin -n gpc-systemOutput-nya akan terlihat seperti ini:
rolebinding.rbac.authorization.k8s.io/infrastructure-operator-sar-harbor-admin createdGunakan petunjuk di Mengubah ukuran penyimpanan Artifact Registry untuk melakukan hal berikut:
- Periksa penggunaan penyimpanan Artifact Registry di cluster admin dan pastikan ada ruang yang cukup untuk artefak yang ingin Anda kirim.
- Jika Anda perlu menambah ruang yang tersedia, gunakan langkah-langkah yang diberikan dalam artikel Mengubah ukuran penyimpanan Artifact Registry.
Siapkan konfigurasi Docker:
cp ${ARTIFACTS_ROOT}/docker-credential-gdcloud /usr/binKonfigurasi Docker agar memercayai paket trust-store.
REGISTRY=$(kubectl get harborcluster harbor -n harbor-system -o jsonpath='{.spec.externalURL}' 2>/dev/null); if [[ -z "$REGISTRY" ]]; then echo "Harbor external URL not found" >&2; exit 1; fi; HOST=$(echo "$REGISTRY" | sed 's#https://##'); if [[ -z "$HOST" ]]; then echo "Invalid registry URL" >&2; exit 1; fi; DIR="/etc/docker/certs.d/$HOST"; FILE="$DIR/ca.crt"; mkdir -p "$DIR"; chmod 755 "$DIR"; if [[ ! -f "$FILE" ]]; then CERT=$(kubectl get secret trust-store-internal-only -n istio-system -o jsonpath='{.data.ca\.crt}' 2>/dev/null); if [[ -z "$CERT" ]]; then echo "Certificate secret not found" >&2; exit 1; fi; echo "$CERT" | base64 -d > "$FILE"; chmod 644 "$FILE"; else echo "Certificate $FILE already exists"; fiMuat artefak ke dalam registry artefak di cluster admin root:
export VERSION=VERSION export KUBECONFIG=KUBECONFIG_PATH export ARTIFACTS_ROOT=/home/download/gdch/full-release-VERSION export PACKAGE_VALIDATION_ROOT_CERT=PACKAGE_VALIDATION_ROOT_CERT_PATH ${ARTIFACTS_ROOT}/gdcloud auth configure-docker ${ARTIFACTS_ROOT}/gdcloud system container-registry load-oci ${ARTIFACTS_ROOT}/oci --pv-root-cert-path=PACKAGE_VALIDATION_ROOT_CERT_PATH --kubeconfig=KUBECONFIG_PATH --use-ip-port=true --show-progress=falseGanti kode berikut:
VERSION: versi rilis Distributed Cloud. Contoh,1.x.y-gdch.z.KUBECONFIG_PATH: jalur ke filekubeconfigyang Anda peroleh dengan menjalankangdcloud auth logindi cluster admin root.PACKAGE_VALIDATION_ROOT_CERT_PATH: jalur ke sertifikat root validasi paket. Anda harus menggunakan jalur default${ARTIFACTS_ROOT}/staging_root_ca_certificate.crt. Pencantuman jalur ini memvalidasi sertifikat kunci rilis yang digunakan oleh validasi paket.
Jika perintah berhasil, output Anda di akhir akan terlihat mirip dengan contoh ini:
I0911 04:05:01.755927 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-bg4ck, starting time: 04:05:01. │······· I0911 04:05:02.002637 3463529 monitor.go:100] [2/2] artifacts distributed and [0/0/0] inProgress/failed/stopped after 246.689693ms │······· I0911 04:05:02.002723 3463529 monitor.go:38] Monitoring DistributionPolicy 10.5.23.4-1.12.4.96-jv5p9, starting time: 04:05:02. │······· I0911 04:05:02.039545 3463529 monitor.go:44] Created after 36.820059ms. │······· I0911 04:05:02.039599 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-jv5p9, starting time: 04:05:02. │······· I0911 04:05:02.045964 3463529 monitor.go:100] [3/3] artifacts distributed and [0/0/0] inProgress/failed/stopped after 6.360571ms │······· I0911 04:05:02.045997 3463529 monitor.go:38] Monitoring DistributionPolicy 10.5.23.4-1.12.4.96-bhckh, starting time: 04:05:02. │······· I0911 04:05:02.077418 3463529 monitor.go:44] Created after 31.408176ms. │······· I0911 04:05:02.077464 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-bhckh, starting time: 04:05:02. │······· I0911 04:05:02.239086 3463529 monitor.go:100] [2/2] artifacts distributed and [0/0/0] inProgress/failed/stopped after 161.610475ms │······· I0911 04:05:02.239138 3463529 monitor.go:38] Monitoring DistributionPolicy 10.5.23.4-1.12.4.96-xvlbt, starting time: 04:05:02. │······· I0911 04:05:02.248366 3463529 monitor.go:44] Created after 9.220575ms. │······· I0911 04:05:02.248415 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-xvlbt, starting time: 04:05:02. │······· I0911 04:05:02.532191 3463529 monitor.go:100] [1/1] artifacts distributed and [0/0/0] inProgress/failed/stopped after 283.756574ms │······· I0911 04:05:02.532236 3463529 monitor.go:38] Monitoring DistributionPolicy 10.5.23.4-1.12.4.96-7k4s4, starting time: 04:05:02. │······· I0911 04:05:02.544529 3463529 monitor.go:44] Created after 12.282657ms. │······· I0911 04:05:02.544579 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-7k4s4, starting time: 04:05:02. │······· I0911 04:05:02.641252 3463529 monitor.go:100] [1/1] artifacts distributed and [0/0/0] inProgress/failed/stopped after 96.652179ms │······· I0911 04:05:02.641332 3463529 monitor.go:38] Monitoring DistributionPolicy 10.5.23.4-1.12.4.96-dpj7n, starting time: 04:05:02. │······· I0911 04:05:02.645509 3463529 monitor.go:44] Created after 4.169293ms. │······· I0911 04:05:02.645575 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-dpj7n, starting time: 04:05:02. │······· I0911 04:05:02.839587 3463529 monitor.go:100] [3/3] artifacts distributed and [0/0/0] inProgress/failed/stopped after 194.004999ms │······· I0911 04:05:02.839639 3463529 monitor.go:38] Monitoring DistributionPolicy 10.5.23.4-1.12.4.96-fn94p, starting time: 04:05:02. │······· I0911 04:05:02.844001 3463529 monitor.go:44] Created after 4.361378ms. │······· I0911 04:05:02.844034 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-fn94p, starting time: 04:05:02. │······· I0911 04:05:03.041615 3463529 monitor.go:100] [2/2] artifacts distributed and [0/0/0] inProgress/failed/stopped after 197.567981ms │······· I0911 04:05:03.041675 3463529 monitor.go:38] Monitoring DistributionPolicy 10.5.23.4-1.12.4.96-4cxxf, starting time: 04:05:03. │······· I0911 04:05:03.047192 3463529 monitor.go:44] Created after 5.499407ms. │······· I0911 04:05:03.047292 3463529 monitor.go:94] Monitoring ManualDistribution 10.5.23.4-1.12.4.96-4cxxf, starting time: 04:05:03. │······· I0911 04:05:03.241688 3463529 monitor.go:100] [76/76] artifacts distributed and [0/0/0] inProgress/failed/stopped after 194.395913msJika output Anda tidak menyerupai contoh ini, ikuti langkah-langkah berikut untuk menyelesaikan masalah yang paling umum:
- Jika output Anda menyertakan pesan
Package validation root certificate requires upgrade!, ganti sertifikat root dengan mengikuti langkah-langkah yang dijelaskan di Mengganti sertifikat validasi paket. - Jika
load-ocigagal, jalankan kembali operasi. Jika error masih berlanjut, periksa solusi lain yang ditawarkan dalam daftar ini. - Jika output Anda menyertakan pesan
Error: unable to create k8sclient: Unauthorized, Anda harus melakukan autentikasi lagi. Ulangi langkah persiapan untuk memverifikasi file kubeconfig atau jalankan perintah${ARTIFACTS_ROOT}/gdcloud auth logindan coba lagi operasiload-oci. - Jika output Anda menyertakan pesan
UNAUTHORIZED: unauthorized to access repository, berarti Anda tidak memiliki izin yang diperlukan untuk menjalankan perintahload-oci. Naikkan masalah ini untuk mendapatkan peran yang diperlukan untuk menjalankan perintah ini, atau minta pengguna yang memiliki peran yang diperlukan untuk menjalankan perintah ini atas nama Anda.
Untuk upgrade dengan file rilis model partner SAJA, ikuti petunjuk untuk memuat paket software untuk distribusi model partner.
Verifikasi bahwa objek
ReleaseMetadatauntuk versi rilis baru ada di cluster admin root:kubectl get releasemetadata.artifact.private.gdc.goog VERSIONGanti
VERSIONdengan versi rilis Distributed Cloud. Contoh,1.x.y-gdch.z.Contoh output:
NAME AGE 1.x.y-gdch.z 2mPastikan versi baru ada dalam daftar upgrade yang tersedia untuk organisasi root yang akan diupgrade:
ROOT_NAME=root kubectl get organization -n gpc-system ${ROOT_NAME} -ojsonpath='{.status.availableUpgrades}{"\n"}'Misalnya,
1.x.y-gdch.z, kita mengharapkan output berikut:["1.x.y-gdch.z"]
Setelah organisasi root diupgrade ke versi baru, versi tersebut akan tersedia untuk upgrade organisasi tenant.
3. Mengupgrade org root
3.1. Pra-upgrade
Tetapkan
KUBECONFIGke file kubeconfig untuk cluster admin root.export KUBECONFIG=ROOT_ADMIN_KUBECONFIGBuat
ClusterRoleBindingsyang diperlukan:kubectl create clusterrolebinding io-organization-admin --clusterrole=organization-admin --user=USER_EMAILVerifikasi bahwa organisasi root dalam kondisi baik, yang ditunjukkan oleh respons
True:kubectl get organization -n gpc-system root \ -ojsonpath='{.status.conditions[?(@.type=="Ready")].status}{"\n"}'Contoh output:
TrueIkuti petunjuk di runbook HSM-P0003 untuk memulai ulang semua HSM.
3.2. Melakukan upgrade otomatis organisasi root
Upgrade harus melalui proses IaC. Upgrade dipicu dengan memperbarui kolom versi di objek OrganizationZonalConfig yang sesuai dari organisasi di zona.
Perbarui versi dalam file YAML
OrganizationZonalConfig. Hapus bagianspec.capacities.workloadServersdalam file jika ada.ORG_NAME=root ZONE=$(kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get controlplane cp -n mz-system -ojsonpath='{.spec.zone}') sed -i 's/version: .*$/version: VERSION/' IAC_REPO_PATH/iac/infrastructure/global/orgs/${ORG_NAME}/${ORG_NAME}-${ZONE}.yamlSiapkan dan commit perubahan file.
git add "IAC_REPO_PATH/iac/infrastructure" git commitBuat permintaan penggabungan.
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin ${USERNAME1}-branch
Saat upgrade dimulai, objek OrganizationUpgrade akan dibuat. Pastikan objek OrganizationUpgrade root dibuat di cluster admin root di zona.
kubectl get -n gpc-system organizationupgrade root -o yaml --kubeconfig ROOT_ADMIN_KUBECONFIG
Jika OrganizationUpgrade tidak ditemukan, ikuti runbook IAC-R0001 untuk memecahkan masalah.
3.3. Pemeriksaan pasca-upgrade
Verifikasi hasil upgrade:
Periksa objek
Organizationuntuk organisasi root. Pastikan Anda melihat kondisi statusREADYadalahTrue:kubectl -n gpc-system get organization rootContoh output:
NAME READY root TruePastikan
Organization.Status.Versionmenampilkan string1.x.y-gdch.zyang sama persis:kubectl -n gpc-system get organization root -o jsonpath='{.status.version}{"\n"}'Contoh output untuk verifikasi:
1.13.3-gdch.5548
Periksa kegagalan subkomponen di organisasi root:
Periksa subkomponen yang menampilkan status
ReconciliationErroratauReconciling. Arahkan kubeconfig keROOT_ADMIN_KUBECONFIG:export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig export CLUSTER_NAMESPACE=root echo "Subcomponents with failures" kubectl get subcomponent -n ${CLUSTER_NAMESPACE} -o json | jq -r '.items[] | select(.status.conditions[]?.reason == "ReconciliationError") | select(.status.featureDisabled != true) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"' echo "Subcomponents still reconciling" kubectl get subcomponent -n ${CLUSTER_NAMESPACE} -o json | jq -r '.items[] | select(.status.conditions[]?.reason == "Reconciling") | select(.status.featureDisabled != true) | select( "\(.status)" | contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'Untuk mengetahui error, periksa catatan rilis dan masalah umum untuk mengetahui solusinya , atau hubungi Distributed Cloud untuk mendapatkan pemecahan masalah.
Jika pemeriksaan pra-penerbangan atau pemeriksaan pasca-penerbangan dilewati, hapus anotasi setelah upgrade selesai:
Contoh:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate -n gpc-system organization ORG_NAME \ upgrade.private.gdc.goog/skip-preflight-check-export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate -n gpc-system organization ORG_NAME \ upgrade.private.gdc.goog/skip-postflight-check-
Selesaikan upgrade org root di semua zona
Setelah upgrade selesai di satu zona, sebaiknya periksa apakah zona tersebut masih berfungsi dengan baik sebelum melanjutkan upgrade zona berikutnya.
Ulangi Langkah 1 hingga 3 untuk organisasi root di zona lainnya. Setelah semua zona mengupgrade org. root-nya, lanjutkan ke langkah berikutnya.
4. Mengupgrade resource global
Resource global harus berada di versi terendah dari semua zona. Mulai proses upgrade resource global dengan menghubungkan ke zona anchor dan menjalankan perintah berikut.
# Annotate appropriate versions for all the operable components.
MAP=$(kubectl get kubeapiserver root-admin -n root -ojsonpath='{.metadata.annotations}' --kubeconfig ROOT_ADMIN_KUBECONFIG | jq -r 'to_entries | map("\(.key) \(.value)") | .[] | select(startswith("lcm.private.gdc.goog/oc-version-"))')
echo "${MAP}" | while read KV; do
SPLIT=(${KV}); KEY=${SPLIT[0]}; VALUE=${SPLIT[1]}
echo "Annotating global KubeAPIServer with ${KEY}: ${VALUE}"
kubectl annotate kubeapiserver global-root-admin -n global-kube-system --overwrite ${KEY}=${VALUE} --kubeconfig ROOT_ADMIN_KUBECONFIG
done
# Trigger the global resource upgrade on global root admin.
kubectl annotate kubeapiserver global-root-admin -n global-kube-system --overwrite lcm.private.gdc.goog/paused-remote=false --kubeconfig ROOT_ADMIN_KUBECONFIG
kubectl patch kubeapiserver global-root-admin -n global-kube-system -p='{"spec":{"deploymentPolicy":"AllowAll"}}' --type=merge --kubeconfig ROOT_ADMIN_KUBECONFIG
Proses ini mungkin membutuhkan waktu beberapa menit. Verifikasi penyelesaian upgrade resource global dengan menjalankan perintah berikut. Tidak ada kegagalan yang akan dilaporkan dari perintah.
# Verify that Components are all successfully rolled out on global root admin.
echo "${MAP}" | while read KV; do
SPLIT=(${KV}); VALUE=${SPLIT[1]}; OC=$(echo ${VALUE} | cut -d- -f1)
[[ -n ${OC} ]] || continue
ROLLOUT=$(kubectl get componentrollout ${OC} -n global-kube-system -o json --ignore-not-found --kubeconfig ROOT_ADMIN_KUBECONFIG)
[[ -n ${ROLLOUT} ]] || continue
if [[ $(echo ${ROLLOUT} | jq -r '.spec.componentRef.name') != ${VALUE} ]] ; then
echo "${OC} rollout trigger failed"; continue
fi
if [[ $(echo ${ROLLOUT} | jq -r '.status.allSubcomponentsReady') != 'true' ]] ; then
echo "${OC} rollout completion failed. Use 'kubectl describe componentrollout ${OC} -n global-kube-system --kubeconfig ROOT_ADMIN_KUBECONFIG' to check for error messages."
fi
done && echo "Global component rollout check finished."
5. Upgrade komponen lintas zona
Di lingkungan multi-zona GDC, komponen tertentu yang dapat dioperasikan memerlukan koordinasi antar-zona untuk menyelesaikan upgrade-nya.
Komponen yang dapat dioperasikan berikut di-upgrade pada langkah ini.
| Cakupan | Komponen yang dapat dioperasikan |
|---|---|
| Infrastruktur | IAC |
| Infrastruktur | SIEM |
Untuk mengupgrade komponen yang dapat dioperasikan IAC, ikuti runbook IAC-R0016.
Untuk mengupgrade komponen yang dapat dioperasikan SIEM, ikuti runbook SIEM-G0008.
6. Upgrade manual untuk Subnet Anycast
Jalankan skrip berikut untuk menambahkan label yang diperlukan ke subnet anycast di server API root global:
#!/bin/bash
# Description:
# This script ensures that specific Subnet resources in Kubernetes have the
# correct label applied. This is necessary for anycast features to function correctly.
#
# The script is idempotent and can be run multiple times safely.
# It requires the path to a valid global root kubeconfig file as a command-line argument.
# --- Configuration ---
set -o nounset
# The names of the Subnet resources to update.
readonly SUBNET_NAMES=(
"infra-vpc-anycast-cidr"
"data-global-anycast-cidr"
"admin-global-anycast-cidr"
)
# The label that will be applied to the subnets.
readonly LABEL_KEY="ipam.gdc.goog/usage"
readonly LABEL_VALUE="global-anycast-root-range"
# The Kubernetes resource type for the subnets.
readonly SUBNET_RESOURCE_TYPE="subnets"
# Timeout for kubectl commands in seconds.
readonly KUBECTL_TIMEOUT="30s"
log_error() {
echo "[ERROR] $(date +'%Y-%m-%dT%H:%M:%S%z'): $*" >&2
}
main() {
# --- Argument Validation ---
if [[ $# -ne 1 ]]; then
echo "Usage: $0 <path-to-kubeconfig-file>"
echo "Example: $0 /root/release/root-admin/global-root-admin-kubeconfig"
exit 1
fi
local KUBECONFIG_PATH="$1"
if [[ ! -f "${KUBECONFIG_PATH}" ]]; then
log_error "Kubeconfig file not found at: ${KUBECONFIG_PATH}"
exit 1
fi
if ! command -v kubectl &> /dev/null; then
log_error "kubectl command not found. Please ensure it is installed and in your system's PATH."
exit 1
fi
if ! command -v timeout &> /dev/null; then
log_error "timeout command not found. Please ensure 'coreutils' is installed."
exit 1
fi
if ! command -v jq &> /dev/null; then
log_error "jq command not found. Please ensure it is installed and in your system's PATH."
exit 1
fi
echo "Starting Subnet labeling process using kubeconfig: ${KUBECONFIG_PATH}"
# --- Pre-flight Check and Data Fetch ---
echo "Verifying access and fetching all Subnet resources (timeout in ${KUBECTL_TIMEOUT})..."
local all_subnets_json
if ! all_subnets_json=$(timeout "${KUBECTL_TIMEOUT}" kubectl get --kubeconfig="${KUBECONFIG_PATH}" "${SUBNET_RESOURCE_TYPE}" --all-namespaces -o json 2>/dev/null); then
log_error "Failed to list Subnet resources. The command timed out or returned an error. Please check cluster connectivity and permissions."
exit 1
fi
if [[ -z "${all_subnets_json}" ]] || [[ $(jq '.items | length' <<< "${all_subnets_json}") -eq 0 ]]; then
echo "No subnet resources found in the cluster. Exiting."
exit 0
fi
echo "Access verified. Processing subnets..."
local processed_count=0
local found_count=0
local subnet_regex
subnet_regex=$(printf "|%s" "${SUBNET_NAMES[@]}")
subnet_regex="^(${subnet_regex:1})$"
# jq query to output: namespace name label_value (or null)
echo "${all_subnets_json}" | jq -r ".items[] | [.metadata.namespace, .metadata.name, (.metadata.labels | .[\"${LABEL_KEY}\"] // \"\")] | @tsv" |
while IFS=$'\t' read -r namespace name current_value; do
if [[ -z "${name}" ]]; then continue; fi
if [[ ! "${name}" =~ ${subnet_regex} ]]; then
continue
fi
((found_count++))
echo "Found target subnet: '${name}' in namespace '${namespace}'"
if [[ "${current_value}" == "${LABEL_VALUE}" ]]; then
echo " - Subnet already has the correct label. Skipping."
((processed_count++))
continue
fi
echo " - Applying label '${LABEL_KEY}=${LABEL_VALUE}'..."
if ! timeout "${KUBECTL_TIMEOUT}" kubectl label --kubeconfig="${KUBECONFIG_PATH}" --namespace="${namespace}" "${SUBNET_RESOURCE_TYPE}" "${name}" "${LABEL_KEY}=${LABEL_VALUE}" --overwrite > /dev/null; then
log_error "Failed to apply label to subnet '${name}' in namespace '${namespace}'. The command timed out or returned an error."
else
echo " - Successfully labeled subnet."
((processed_count++))
fi
done
# --- Final Summary ---
echo "---"
if [[ ${found_count} -eq 0 ]]; then
echo "No target anycast subnets were found in the cluster."
else
echo "Finished processing. Found ${found_count} and validated ${processed_count} target subnet(s)."
fi
echo "Subnet labeling process completed."
}
# Execute the main function with command-line arguments.
main "$@"
Setelah skrip berhasil dijalankan, batalkan solusi anycast manual jika solusi tersebut telah diterapkan sebelumnya.
7. Upgrade manual untuk SyncServer
Komponen yang dapat dioperasikan berikut di-upgrade pada langkah ini.
| Cakupan | Komponen yang dapat dioperasikan |
|---|---|
| Infrastruktur | NTP |
Upgrade firmware ini tidak bergantung pada langkah lain dan dapat dilakukan kapan saja.
Cluster hanya memiliki satu SyncServer, sehingga tidak dapat beroperasi dalam mode ketersediaan tinggi. Upgrade akan menyebabkan SyncServer tidak tersedia selama beberapa waktu. Cluster akan terus mencatat waktu menggunakan clock-nya sendiri yang kurang akurat, yang tidak akan menimbulkan efek yang terlihat.
Sebaiknya proses ini diselesaikan dalam satu sesi (tidak dibiarkan semalaman atau selama akhir pekan) untuk menghindari perbedaan waktu.
7.1. Proses upgrade SyncServer
Perintah berikut harus dijalankan dari direktori rilis paket update yang diekstrak.
Cari firmware terbaru untuk diekstrak:
${ARTIFACTS_ROOT}/gdcloud artifacts tree ${ARTIFACTS_ROOT}/oci/ | grep syncserver | grep -v .sig$Nama file berisi versi firmware.
Contoh output:
│ ├── gdch-syncserver-firmware/syncserver:5.1.2Salin hanya nama file dan tetapkan ke variabel ini:
export SYNCSERVER_VERSION=syncserver:5.1.2Ekstrak firmware dari image OCI:
${ARTIFACTS_ROOT}/gdcloud artifacts extract ${ARTIFACTS_ROOT}/oci syncserver_firmware --image-name=gdch-syncserver-firmware/${SYNCSERVER_VERSION:?}Ekstrak firmware:
tar -xvzf syncserver_firmware/gdch-syncserver-firmware/syncserver.tar.gzAnda harus melihat satu file
*.datdan satu file*updater.zipdi direktori output.Ikuti runbook NTP-P0002 - Access SyncServer UI.
Buka Help -> About -> Software Version. Jika software yang diinstal sama dengan atau lebih baru dari firmware yang disediakan, firmware tidak perlu diupdate dan langkah-langkah berikutnya dapat dilewati.
Buka Admin -> Upgrade di UI SyncServer. Upload
syncserver_s650_license.datdiAuthorization Filedansyncserver_s650_updater.zipdiUpgrade File. Kemudian, klik instal.

Mengupgrade org tenant global
Mengupgrade org tenant global pada tingkat tinggi mencakup langkah-langkah berikut:
Upgrade organisasi tenant di semua zona. Setiap zona diupgrade satu per satu.
Periksa apakah zona saat ini adalah zona primer. Perintah berikut menampilkan "true" di zona utama dan tidak menampilkan apa pun di zona non-utama.
kubectl get ObjectStorageAdminNode -o jsonpath='{.items[*].status.isPrimary}' --kubeconfig=ROOT_ADMIN_KUBECONFIG; echoMengupgrade resource organisasi tenant global.
Pemeriksaan sebelum upgrade
Upgrade zona satu per satu. Sebelum memulai upgrade org di satu zona, hubungkan ke semua zona lainnya dan jalankan perintah berikut untuk memastikan perintah menampilkan status siap di semua zona. Jika ada zona yang melaporkan bahwa zona tersebut belum siap, jangan lanjutkan upgrade. Periksa org di zona tersebut untuk mendiagnosis masalah.
ORG_NAME=ORG_NAME
[[ $(kubectl --kubeconfig=ROOT_ADMIN_KUBECONFIG get org ${ORG_NAME} -n gpc-system -ojsonpath='{.status.conditions[?(@.type=="Ready")].status}') == 'True' ]] && echo ready || echo not ready
Pastikan semua cluster dalam status berjalan dan semua node pool dalam status siap. Jika belum, perbaiki terlebih dahulu sebelum memulai upgrade.
ORG_NAME=ORG_NAME
kubectl get nodepools -n ${ORG_NAME} --kubeconfig ROOT_ADMIN_KUBECONFIG -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,READY:.status.conditions[?(@.type=="Ready")].status'
# Example output
# NAMESPACE NAME READY
# org1 admin-control-plane-node-pool True
# org1 data-plane-pool-o2-standard1-96-gdc-metal True
kubectl get cluster -n mks-system --kubeconfig ORG_MGMT_API_KUBECONFIG
# Example output
# NAME STATE K8S VERSION
# g-org1-perimeter Running 1.30.6-gke.300
# g-org1-shared-service Running 1.30.6-gke.300
kubectl get nodepool -A --kubeconfig ORG_INFRA_KUBECONFIG -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,READY:.status.conditions[?(@.type=="Ready")].status'
# Example output
# NAMESPACE NAME READY
# g-org1-perimeter-cluster control-plane-node-pool True
# g-org1-perimeter-cluster perimeter-admin-node-pool True
# g-org1-perimeter-cluster perimeter-data-node-pool True
# g-org1-shared-service-cluster control-plane-node-pool True
# g-org1-shared-service-cluster dbs-billing-system-billing-dbcluster-n2-standard-4-gdc True
# g-org1-shared-service-cluster shared-service-default-worker True
1. Mengupgrade org tenant
Langkah ini mengupgrade versi Kubernetes, add-on, komponen yang dapat dioperasikan di cluster bidang pengelolaan dalam organisasi tenant - cluster admin org, sistem, dan layanan.
Durasi keseluruhan upgrade bergantung pada jumlah tahap dalam upgrade. Upgrade otomatis org tenant dapat mengganggu dan memerlukan masa pemeliharaan.
1.1. Persiapan
Untuk mengonfigurasi masa pemeliharaan, ikuti Mengonfigurasi masa pemeliharaan untuk upgrade org Tenant.
Petunjuk untuk memulai upgrade org tenant diberikan untuk penggunaan perintah CLI kubectl atau perintah infrastruktur sebagai kode (IaC). Untuk menggunakan
perintah IaC, konfigurasi IaC terlebih dahulu:
- Penyiapan infrastruktur sebagai kode.
Konfigurasi infrastruktur sebagai kode.
Untuk menggunakan nomos guna memverifikasi status seperti yang dirujuk dalam langkah-langkah berbasis IaC sebagai opsi, Anda harus menginstal alat command line nomos. Untuk mendapatkan petunjuk penginstalan dan penggunaan nomos, buka
https://cloud.google.com/anthos-config-management/docs/how-to/nomos-commanddari komputer yang memiliki akses internet.
IaC
Tetapkan clusterrolebinding sebelum memulai upgrade org tenant menggunakan IAC
- Buka direktori iac/infrastructure/zonal/zones/ZONE_NAME/{ORG}.
- Masuk ke direktori IO yang sudah dibuat. Jika direktori tidak ada, buat direktori baru.
Tambahkan file YAML untuk menetapkan peran cluster
io-organization-adminke IO. Contoh:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: iac-binding-$USER-io-organization-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: io-organization-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: USER_EMAILPerbarui
kustomatization.yamluntuk menyertakan file baru yang dibuat. Jikakustomatization.yamltidak ada, buat file baru:kind: Kustomization metadata: name: org-1-admin-kustomization resources: - FILE_NAME.yamlKirim perubahan di IAC
kubectl
Tetapkan clusterrolebinding sebelum memulai upgrade org tenant menggunakan kubectl
Tetapkan
KUBECONFIGke file kubeconfig untuk cluster admin root.export KUBECONFIG=ROOT_ADMIN_KUBECONFIG`Buat
ClusterRoleBindingsyang diperlukan:kubectl create clusterrolebinding io-organization-admin --clusterrole=organization-admin --user=USER_EMAIL`Sebelum Anda menyelesaikan upgrade dari versi Distributed Cloud sebelumnya ke 1.13.x +, ikuti petunjuk dalam runbook BIL-R0014 untuk membuat invoice secara manual untuk biaya bulan ini dari awal bulan ini hingga awal tanggal hari ini. Anda akan kehilangan data biaya yang dibuat selama proses upgrade organisasi Distributed Cloud.
1.2. Mulai upgrade
Upgrade org tenant juga dipicu melalui IaC dengan memperbarui kolom versi di objek OrganizationZonalConfig yang sesuai dari org di zona. Berikut detailnya:
Perbarui versi di file YAML
OrganizationZonalConfig.ORG_NAME=ORG_NAME ZONE=$(kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get controlplane cp -n mz-system -ojsonpath='{.spec.zone}') sed -i 's/version: .*$/version: VERSION/' IAC_REPO_PATH/iac/infrastructure/global/orgs/root/${ORG_NAME}-${ZONE}.yamlSiapkan dan commit perubahan file.
git add "IAC_REPO_PATH/iac/infrastructure" git commitBuat permintaan penggabungan.
git checkout -b ${USERNAME1}-branch git -c http.sslVerify=false push -o merge_request.create origin ${USERNAME1}-branch
Jika upgrade dimulai, objek OrganizationUpgrade akan dibuat. Pastikan objek OrganizationUpgrade dibuat di cluster admin root di zona.
kubectl get -n gpc-system organizationupgrade ORG_NAME -o yaml --kubeconfig ROOT_ADMIN_KUBECONFIG
Jika OrganizationUpgrade tidak ditemukan, ikuti runbook IAC-R0001 untuk memecahkan masalah.
1.3. Upgrade
Upgrade dilakukan saat memiliki
timeWindowyang berada dalam masa pemeliharaan yang ditentukan oleh pengguna administrator, yang juga disebut PA. MelihattimeWindowterjadwal:kubectl -n gpc-system get organizationupgrade ORG_NAME -o yamlBerikut adalah respons umum terhadap perintah sebelumnya:
apiVersion: upgrade.private.gdc.goog/v1alpha1 kind: OrganizationUpgrade metadata: creationTimestamp: "2022-08-22T01:09:03Z" generation: 1 name: org-1 namespace: gpc-system ownerReferences: - apiVersion: resourcemanager.gdc.goog/v1alpha1 blockOwnerDeletion: true controller: true kind: Organization name: org-1 uid: 6998cfc1-bee4-4f6d-baf2-9c0a90ef93bb resourceVersion: "1214182" uid: 1affc1df-b9ac-4343-8e61-18736781a990 spec: currentVersion: 1.8.0-gdch.476 organizationRef: name: org-1 targetVersion: 1.8.1-gdch.0 timeWindow: end: "2022-08-28T04:00:00Z" start: "2022-08-28T00:00:00Z"Dalam contoh sebelumnya, jadwal upgrade ke
1.8.1-gdch.0adalah antara"2022-08-28T00:00:00Z"dan"2022-08-28T04:00:00Z".Saat upgrade dimulai, objek
OrganizationUpgradedibuat, yang ditampilkan sebagaikind: OrganizationUpgradedalam contoh output sebelumnya.kind: OrganizationUpgradePantau status keseluruhan upgrade menggunakan objek upgrade yang sesuai, dengan menambahkan perintah di langkah 1 dengan
-w. Misalnya, untuk terus-menerus mengkueri ORG_NAME untuk mengetahui status upgrade, jalankan perintah berikut:export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl get -n gpc-system organizationupgrade ORG_NAME -o yaml -wTahapan upgrade dan statusnya dapat dilihat menggunakan cara berikut:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl get -n gpc-system organizationupgrade ORG_NAME -o jsonpath='{.status.conditions}' | \ jq -r '["Stage", "Status", "Reason", "Message"], ["---", "---", "---", "---"], (.[] | [.type, .status, .reason, .message]) | @tsv' | column -ts $'\t'Tahap
Succeededmengacu pada status upgrade secara keseluruhan. TahapExpireddigunakan untuk menunjukkan bahwa upgrade telah melewati waktu yang dijadwalkan semula. Semua tahap lainnya mengacu pada langkah-langkah upgrade yang sedang berlangsung. StatusTruemengacu pada langkah-langkah yang telah selesai dan StatusUnknownmengacu pada langkah upgrade saat ini.Jika pemeriksaan awal gagal dan Anda yakin bahwa kegagalan pemeriksaan awal ini adalah positif palsu, ganti dan lewati opsi pemeriksaan awal:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate -n gpc-system organization ORG_NAME \ upgrade.private.gdc.goog/skip-preflight-check=okJika pemeriksaan pasca-penerbangan gagal, dan Anda yakin bahwa kegagalan tersebut adalah positif palsu, ganti dan lewati pemeriksaan pasca-penerbangan:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate -n gpc-system organization ORG_NAME \ upgrade.private.gdc.goog/skip-postflight-check=okJika IAC digunakan untuk mengupgrade organisasi tenant dan status
organizationupgrademenunjukkan Berhasil danOrganizationuntuk organisasi tenant tidak dalam status Siap, terapkan solusi sementara berikut.Tambahkan anotasi ini:
configmanagement.gke.io/managed: disabledmenggunakan IAC ke organisasi. Status MonitorOrganizationdalam status Siap.Upgrade organisasi kini akan dilanjutkan ke tahap berikutnya, dan status untuk layanan atau node akan selesai:
Last Transition Time: 2024-08-27T22:44:09Z Message: observed the following reason: [JobRunning] Observed Generation: 614 Reason: Complete Status: True Type: service/NodeDiperlukan waktu 15 menit agar upgrade organisasi dapat dilanjutkan.
1.4. Pemeriksaan pasca-upgrade
Periksa objek
Organizationuntuk organisasi. KondisiREADYharus ditampilkan sebagaiTrue.kubectl -n gpc-system get organization ORG_NAMEContoh output:
NAME READY org-1 TruePeriksa
Organization.Status.Version. Harus menampilkan string yang sama persis dengan versi target:kubectl -n gpc-system get organization ORG_NAME -o jsonpath='{.status.version}{"\n"}'Contoh output:
1.13.3-gdch.5548Mengembalikan anotasi untuk mengabaikan masa pemeliharaan:
kubectl annotate organization ORG_NAME -n=gpc-system \ "upgrade.private.gdc.goog/ignore-maintenance-window-" \ --kubeconfig=ROOT_ADMIN_KUBECONFIGPeriksa kegagalan subkomponen di org tenant yang diupgrade :
Periksa subkomponen yang menampilkan status
ReconciliationErroratauReconciling. Arahkan kubeconfig keORG_MGMT_API_KUBECONFIG:export KUBECONFIG=ORG_MGMT_API_KUBECONFIG echo "Subcomponents with failures" kubectl get subcomponent -A -o json | jq -r '.items[] | select(.status.conditions[]?.reason == "ReconciliationError") | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"' echo "Subcomponents still reconciling" kubectl get subcomponent -A -o json | jq -r '.items[] | select(.status.conditions[]?.reason == "Reconciling") | select( "\(.status)" | contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'Jika terjadi error, periksa catatan rilis dan masalah umum untuk mengetahui solusinya. Jika tidak ada, hubungi Distributed Cloud untuk mendapatkan bantuan pemecahan masalah.
Jika pemeriksaan pra-penerbangan atau pemeriksaan pasca-penerbangan dilewati, hapus anotasi setelah upgrade selesai:
Contoh:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate -n gpc-system organization ORG_NAME \ upgrade.private.gdc.goog/skip-preflight-check-export KUBECONFIG=ROOT_ADMIN_KUBECONFIG kubectl annotate -n gpc-system organization ORG_NAME \ upgrade.private.gdc.goog/skip-postflight-check-
1.5. Mulai upgrade yang tidak terjadwal
Memicu upgrade tenant-org secara instan di luar maintenanceWindow jika
Anda memiliki kebutuhan mendesak seperti persyaratan patch keamanan mendesak. Upgrade ini hanya diperlukan di organisasi tenant, karena organisasi root sudah memicu upgrade secara instan.
Jalankan perintah ini menggunakan kubeconfig root-admin. Resource kustom organisasi
yang perlu Anda beri anotasi hanya ada di cluster root-admin. Anda tidak menjadwalkan
periode waktu untuk proses ini.
Patch org
spec/versionuntuk org tenant:export VERSION=$(kubectl get releasemetadata -ojson | jq -r '.items[] | select(.metadata.name | contains("1.13.3")) | .metadata.name') echo $VERSION # Example output # 1.13.3-gdch.5548 kubectl patch -n gpc-system organization ORG_NAME --type='json' \ -p='[{"op":"replace","path":"/spec/version","value":"'${VERSION}'"}]' \ --kubeconfig=ROOT_ADMIN_KUBECONFIGMulai
tenant-org upgradesecara instan dengan menerapkan anotasiignore-maintenance-windowdan memulai ulangorganizationupgrade.Pantau status upgrade:
# kubectl -n gpc-system get organizationupgrade org-1 -o yamlLakukan Pemeriksaan pasca-upgrade.
Setelah upgrade mendesak selesai, kembali gunakan periode waktu terjadwal:
kubectl annotate organization ORG_NAME -n=gpc-system \ "upgrade.private.gdc.goog/ignore-maintenance-window-" \ --kubeconfig=ROOT_ADMIN_KUBECONFIG
2. Upgrade DNS
2.1 Membuat zona penerusan
Mengekspor
kubeconfiguntuk cluster admin root:export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfigKonfigurasi OCIT_DOMAIN menggunakan zona penerusan. Ganti OCIT_DOMAIN dengan nama domain OCIT Anda dan endpoint dengan alamat IP OC DNS:
kubectl apply -f - <<EOF apiVersion: network.private.gdc.goog/v1alpha1 kind: DNSZone metadata: namespace: dns-system name: ocit-domain spec: domainName: OCIT_DOMAIN forwardingConfig: # Set to OC DNS IPs (the AD domain controllers) endpoints: - 192.0.2.0 - 192.0.2.1 replicateToTenantOrg: true EOFOutputnya akan terlihat seperti contoh ini:
dnszone.network.private.gdc.goog/ocit-domain createdJika perubahan tidak diterapkan, mulai ulang deployment:
kubectl rollout restart deployment -n dns-system gpc-coredns-forwarderPerubahan DNS ini disebarkan ke semua cluster di GDC.
Dengan kubeconfig admin root, validasi bahwa resolusi domain OCIT berfungsi sebagaimana mestinya:
NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \ awk '/[0-9]\./ {print $4}') dig +short @${NAMESERVER} fs.OCIT_DOMAINEkspor
kubeconfiguntuk cluster admin org:export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfigTerapkan kubeconfig admin org, dan validasi bahwa resolusi domain OCIT berfungsi sebagaimana mestinya:
NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-infra-forwarder | \ awk '/[0-9]\./ {print $4}') dig +short @${NAMESERVER} fs.OCIT_DOMAIN
2.2 Mengaktifkan resolver rekursif
Aktifkan resolver rekursif di cluster admin org hanya untuk organisasi v1, dengan mengikuti langkah-langkah dalam runbook DNS-R0027.
Menyelesaikan upgrade tenant org di semua zona
Setelah upgrade selesai di satu zona, sebaiknya periksa apakah zona tersebut masih berfungsi dengan baik sebelum melanjutkan upgrade zona berikutnya.
Ulangi Langkah 1 hingga 2 untuk organisasi tenant di zona lainnya. Setelah semua zona mengupgrade org tenantnya, lanjutkan ke langkah berikutnya.
3. Mengupgrade resource global
Resource global harus berada di versi terendah dari semua zona. Mulai proses upgrade resource global dengan menghubungkan ke zona anchor dan menjalankan perintah berikut.
# Annotate appropriate versions for all the operable components.
ORG_NAME=ORG_NAME
MAP=$(kubectl get kubeapiserver ${ORG_NAME}-admin -n ${ORG_NAME} -ojsonpath='{.metadata.annotations}' --kubeconfig ROOT_ADMIN_KUBECONFIG | jq -r 'to_entries | map("\(.key) \(.value)") | .[] | select(startswith("lcm.private.gdc.goog/oc-version-"))')
# Trigger the global resource upgrade on global org admin.
kubectl annotate kubeapiserver global-org-admin -n global-kube-system --overwrite lcm.private.gdc.goog/paused-remote=false --kubeconfig ORG_MGMT_API_KUBECONFIG
kubectl patch kubeapiserver global-org-admin -n global-kube-system -p='{"spec":{"deploymentPolicy":"AllowAll"}}' --type=merge --kubeconfig ORG_MGMT_API_KUBECONFIG
Proses ini mungkin membutuhkan waktu beberapa menit. Verifikasi penyelesaian upgrade resource global dengan menjalankan perintah berikut. Tidak ada kegagalan yang akan dilaporkan dari perintah.
# Verify that Components are all successfully rolled out on global org admin.
echo "${MAP}" | while read KV; do
SPLIT=(${KV}); VALUE=${SPLIT[1]}; OC=$(echo ${VALUE} | cut -d- -f1)
[[ -n ${OC} ]] || continue
ROLLOUT=$(kubectl get componentrollout ${OC} -n global-kube-system -o json --ignore-not-found --kubeconfig ORG_MGMT_API_KUBECONFIG)
[[ -n ${ROLLOUT} ]] || continue
if [[ $(echo ${ROLLOUT} | jq -r '.spec.componentRef.name') != ${VALUE} ]] ; then
echo "${OC} rollout trigger failed"; continue
fi
if [[ $(echo ${ROLLOUT} | jq -r '.status.allSubcomponentsReady') != 'true' ]] ; then
echo "${OC} rollout completion failed. Use 'kubectl describe componentrollout ${OC} -n global-kube-system --kubeconfig ORG_MGMT_API_KUBECONFIG' to check for error messages."
fi
done && echo "Global component rollout check finished."
4. Mengupgrade Tenable SC
Jalankan GDCH doctor untuk menentukan apakah upgrade diperlukan -
gdcloud system doctor diagnose instance --include-ocs=vuln --root-admin-kubeconfig=${ROOT_ADMIN_CLUSTER_KUBECONFIG:?}Jika validator
tenable_sc_upgrade_readinessgagal, gambar perlu diupgrade. Ikuti langkah-langkah berikut untuk mengupgrade Tenable SC di org layanan OI -Dapatkan nama virtual machine:
VIRTUAL_MACHINE_NAME=$(kubectl --kubeconfig ${OI_SERVICES_ORG_INFRA_KUBECONFIG:?} get virtualmachine -n tenablesc-system -o custom-columns=NAME:.metadata.name | sort -r -k 1 | head -1)Tandai
runningStatemesin virtual sebagaiStopped:kubectl --kubeconfig ${OI_SERVICES_ORG_MGMT_KUBECONFIG:?} patch virtualmachines.virtualmachine.gdc.goog ${VIRTUAL_MACHINE_NAME:?} -n tenablesc-system --type merge --patch '{"spec":{"runningState":"Stopped"}}'Uninstal diagram Helm yang ada untuk VM:
VIRTUAL_MACHINE_NAME=$(kubectl --kubeconfig ${OI_SERVICES_ORG_INFRA_KUBECONFIG:?} get virtualmachine -n tenablesc-system -o custom-columns=NAME:.metadata.name | sort -r -k 1 | head -1) kubectl --kubeconfig ${OI_SERVICES_ORG_MGMT_KUBECONFIG:?} patch virtualmachines.virtualmachine.gdc.goog ${VIRTUAL_MACHINE_NAME:?} -n tenablesc-system --type merge --patch '{"spec":{"runningState":"Stopped"}}' helm uninstall tenablesc-vms -n tenablesc-system --kubeconfig ${ORG_MGMT_KUBECONFIG:?}Lakukan penyiapan baru Tenable SC dengan mengikuti Menginstal Tenable.SC
Pembersihan pasca-upgrade
Hapus resource ClusterRoleBinding yang dibuat di bagian Identity and Access Management.
Mengonfigurasi masa pemeliharaan untuk upgrade org Tenant
Untuk mengupgrade organisasi (org) tenant, pastikan Anda diberi peran
pelihat dan admin yang benar seperti yang dijelaskan di halaman Deskripsi peran standar
dan Definisi peran untuk project
untuk login ke antarmuka command line (CLI) kubectl dan antarmuka pengguna (UI) Konsol. Jika Anda tidak memilikinya, gunakan petunjuk di halaman
Memberi akses ke resource project
untuk memberi akses atau meminta agar akses diberikan kepada Anda.
Untuk mengonfigurasi masa pemeliharaan, Anda harus memiliki peran yang diperlukan. Pastikan Anda memiliki peran bawaan berikut yang ditetapkan kepada Anda:
- Admin Upgrade Organisasi
- Pelihat Upgrade Organisasi Catatan: Mengupgrade organisasi tenant ke versi minor yang lebih rendah dari organisasi root tidak didukung.
Secara default, ada satu MaintenanceWindow untuk upgrade minor dan satu MaintenanceWindow
untuk upgrade patch. Upgrade kecil meningkatkan fungsi atau membuat perubahan dari revisi sebelumnya, yang merupakan upgrade paketmisalnya, untuk memperbaiki bug.
Upgrade patch mengatasi masalah atau kerentanan tertentu. Konfigurasi patch default MaintenanceWindow untuk memulai upgrade patch sesuai dengan jadwal yang ditentukan.
Untuk mengonfigurasi masa pemeliharaan, gunakan perintah CLI dan kubectl untuk mengubah kolom RRULE dan TimeWindow dari resource MaintenanceWindow.
Tindakan ini akan menjadwalkan upgrade Anda. Untuk mengetahui informasi tentang RRULE, buka
https://pkg.go.dev/github.com/teambition/rrule-go.
Untuk menggunakan perintah CLI kubectl, klik tab kubectl. Untuk melihat petunjuk berbasis UI, klik tab Konsol.
Konsol
Edit jadwal masa pemeliharaan. Buka tab Pemeliharaan, lalu klik Edit.

Gambar 1. Masa Pemeliharaan
Layar Edit masa pemeliharaan akan terbuka. Gunakan jendela untuk mengonfigurasi ulang interval waktu Patch dan Minor:

Gambar 2. Mengonfigurasi ulang patch dan update minor
Tentukan atau edit Versi patch, Waktu mulai, dan Durasi, serta hari dalam seminggu.
Edit Waktu mulai, Durasi, Pengulangan, dan Hari Versi kecil.

Gambar 3. Menyimpan konfigurasi ulang
Klik Simpan untuk menerapkan perubahan.
Jika perubahan tersimpan memengaruhi pengulangan, misalnya: jika Anda menerapkan perubahan pada hari dalam seminggu atau pada bulan, Anda akan melihat dialog. Untuk mengonfirmasi perubahan, klik LANJUTKAN.

Gambar 4. Klik Lanjutkan
Contoh berikut menunjukkan upgrade terjadwal yang diperbarui, berdasarkan perubahan konfigurasi Anda. Perhatikan link Lewati di samping setiap status tertunda. Gunakan opsi ini untuk melewati upgrade tertunda terjadwal.
Gambar 5. Tampilan upgrade terjadwal, dengan opsi lewati untuk setiap
kubectl
Login ke
kubectlCLI. Temukan petunjuk ini di tab CLI. Pastikan Anda memiliki akses yang benar ke cluster admin org sebelum melanjutkan.Anda dapat mengubah tiga kolom di
MaintenanceWindowuntuk mengonfigurasitimeWindowtempat upgrade tenant-org terjadi. Perintah berikut menunjukkan modifikasi pada periode pemeliharaan upgrade patch. Modifikasi upgrade minor serupa.# 1. The first change is to the RRULE # For patch-upgrades to happen, for example, every Thursday instead of Sunday: kubectl patch -n gpc-system maintenancewindow patch-upgrade \ --type='json' \ -p='[{"op":"replace","path":"/spec/recurrence","value":"FREQ=WEEKLY;BYDAY=TH"}]' # 2. Modify the start time of the upgrade in UTC. export S_TIME = 2022-04-03T04:00:00Z kubectl patch -n gpc-system maintenancewindow patch-upgrade \ --type='json' \ -p='[{"op":"replace","path":"/spec/timeWindow/start","value":"'${S_TIME}'"}]' # 3. Modify the end time of the upgrade in UTC. export E_TIME = 2022-04-03T04:00:00Z kubectl patch -n gpc-system maintenancewindow patch-upgrade \ --type='json' \ -p='[{"op":"replace","path":"/spec/timeWindow/end","value":"'${E_TIME}'"}]'Waktu mulai dan waktu berakhir,
/spec/timeWindow/startdan/spec/timeWindow/end, masing-masing harus memiliki tanggal/bulan/tahun yang telah terjadi di masa lalu. Jangka waktu dihitung berdasarkan nilai yang Anda masukkan.
Alokasikan setidaknya durasi minimum seperti yang ditampilkan untuk setiap jenis upgrade. Anda dapat mengalokasikan durasi yang lebih lama seperti yang dinyatakan dalam rekomendasi berikut:
- Upgrade kecil: Memerlukan waktu minimal 12 jam dalam jangka waktu 32 hari.
Upgrade patch: Memerlukan waktu minimal 48 jam dalam jangka waktu 32 hari, dengan 1 blok waktu atau lebih. Meskipun konsol menampilkan spesifikasi periode minimum 4 jam, Google menyarankan agar Anda mengalokasikan setidaknya 6 jam untuk setiap blok waktu.
Upgrade Manual Operations Suite Infrastructure Core
Proses upgrade ini hanya berlaku untuk upgrade dari versi 1.13.x ke 1.14.3.
Pastikan semua akun lokal dan domain terkelola diaktifkan dengan sandi yang belum habis masa berlakunya. Akun yang tidak dalam kondisi baik dapat menyebabkan error dalam proses ini.
Melakukan Checkpoint VM dan Pencadangan Direktori
Lakukan checkpoint VM.
- Di host BM01, buka konsol PS sebagai Administrator.
Jalankan perintah berikut untuk setiap host Hyper-V di cluster.
$servername = "<*hyperv-server-name*>" Get-VM -CimSession $servername | ForEach-Object { $myargs = @{ VMName = $_.Name SnapshotName = "Checkpoint_$($_.Name)_$(Get-Date -Format 'yyyyMMddHHmmss')" ComputerName = $servername } Checkpoint-VM @myargs }Biarkan jendela PowerShell tetap terbuka untuk langkah berikutnya
Mengaktifkan jalur file panjang
$path = 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' Set-ItemProperty -Path $path -Name 'LongPathsEnabled' -Value 1Cadangkan drive H:\operations_center. (Tindakan ini mendukung mengembalikan upgrade.)
Rename-Item -Path H:\operations_center -NewName operations_center_backupCadangkan direktori konfigurasi di CONFIG1. (Backup ini memberikan referensi saat membuat konfigurasi config.ps1 baru.)
Di host BM01, gunakan Remote Desktop Protocol (RDP) untuk terhubung ke alamat IP VM CONFIG1 dan login dengan akun administrator sistem. Contoh:
mstsc /v 192.168.100.99Buka konsol PS dengan Run as Administrator.
- Buat folder cadangan
mkdir c:\config1_backup- Mencadangkan C:\dsc
Move-Item -Path "C:\dsc\" -Destination "C:\config1_backup"- Mencadangkan C:\config
Move-Item -Path "C:\config\" -Destination "C:\config1_backup"- Mencadangkan C:\operations_center
Move-Item -Path "C:\release\operations_center\" -Destination "C:\config1_backup"- Memastikan jalur file panjang diaktifkan
$path = 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' Set-ItemProperty -Path $path -Name 'LongPathsEnabled' -Value 1
Memuat software pihak ketiga
Lakukan tugas di software pihak ketiga.
Mengupgrade Virtual Machine yang ada
Dapatkan direktori Penginstalan.
Download paket komponen OIC dengan mengikuti petunjuk di bagian Download files.
Di host BM01, ekstrak direktori operations_center dari prod_IT_component_bundle.tar.gz yang didownload.
Set-Location H: tar -zxvf prod_IT_component_bundle.tar.gzMengekstrak file TAR akan membuat folder
releasedi root H:Pindahkan
operations_centerke root H:Move-Item -Path H:\release\operations_center -Destination H:\
Perbarui config.ps1 dengan data khusus situs
File konfigurasi
config.ps1menyediakan semua informasi yang diperlukan untuk membangun dan mengonfigurasi lingkungan Infrastruktur Operations Suite (OI). Untuk memperbarui file konfigurasi, Anda harus mengumpulkan semua informasi berikut. Cadangan config.ps1 yang ada adalah referensi yang baik untuk melindungi penimpaan setelan yang ada secara tidak sengaja. Penting: Jangan lanjutkan hinggaconfig.ps1selesai dan benar.- Output konfigurasi jaringan alat
occonfigtool, terutama fileocinfo.common.opscenter.local.txt. Nama jaringan, misalnya, OCCORE-SERVERS yang dirujuk dalam langkah-langkah berikut merujuk pada kolomNamedalam dokumen tersebut. - Nama domain dan alamat IP server DNS setiap sel GDC yang dikelola OI ini. Data ini tersedia di output Kuesioner Penerimaan Pelanggan (CIQ).
Lakukan semua perubahan pada host BM01 sebagai
Administrator.- Output konfigurasi jaringan alat
Salin kode contoh konfigurasi yang benar untuk jenis deployment:
- Salin
H:\operations_center\dsc\config.example.ps1keH:\operations_center\config\config.ps1.
- Salin
Dengan menggunakan VSCode atau Powershell ISE, validasi dan perbarui nilai dalam
config.ps1.Jika OIC di-deploy sebagai multi-situs:
- Menemukan komentar yang diberi label
### Multi-Site: - Lakukan tindakan yang dijelaskan dalam komentar yang Anda temukan.
- Menemukan komentar yang diberi label
Perbarui
HardwareVersionkecuali jika default (3.0) sudah benar.Perbarui
PrimarySiteCodekecuali jika default (DC1) sudah benar.Kode situs digunakan dalam banyak nama. Telusuri dan ganti semua instance
DC1dengan kode situs yang benar. Gunakan penelusuran yang tidak peka huruf besar/kecil. Tinjau setiap perubahan karena beberapa perubahan mungkin tidak diperlukan. Misalnya, jika kode situs adalahAB1, maka nama hostDC1-DC1, harus berubah menjadiAB1-DC1, bukanAB1-AB1.Perbarui
DnsDomainjika defaultnya tidak benar. Jika nilai ini diubah, telusuri dan gantiopscenter.localdi seluruh fileconfig.ps1. Ada beberapa lokasi tempat nilai default tersebut dikodekan secara permanen.Perbarui objek di
DnsConditionalForwarderdengan informasi khusus situs. Harus ada setidaknya satu objek penerusan. Hapus contoh yang tidak perlu.Langkah ini dapat dilakukan di WSL pada CONFIG1 jika CLI
gdclouddankubectlsudah diinstal.Untuk menarik informasi khusus situs dari cluster admin root, gunakan:
export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig kubectl get -n dns-system service gpc-coredns-external-udp \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}{"\n"}'Domain- Nama domain DNS sel GDC, misalnya,dns.delegatedSubdomaindiciq.yaml.Master- Daftar IP server DNS (biasanya hanya satu). Cari dicellcfguntuk jenisDNSReservation. Jika sel GDC di-deploy, cari namespacedns-systemcluster administrasi root untuk EXTERNAL-IP layanangpc-coredns-external-udpdan FQDN sel bert.sesame.street.Dalam deployment multi-situs, ada satu objek tabel hash per sel.
Jangan mengubah konten objek
Users,Groups, danGroupPolicy.Perbarui
DNSServersagar berisi 2 alamat IP yang diberikan ke pengontrol domain primer dan sekunder seperti<SITE>-DC1dan<SITE>-DC2.Perbarui
NTPServersmenjadi daftar alamat IP SyncServer dari resource kustomTimeServerroot-admin. Anda dapat mengambil kumpulan alamat IP ini menggunakan:kubectl get timeserver -A -o json | jq '.items[].address'Anda harus memformat alamat IP ini dalam
NTPServersseperti yang ditunjukkan dalam contoh berikut:NtpServers = @( '10.251.80.2', '10.251.80.3', '10.251.80.4', '10.251.80.5' )Perbarui nilai default
SubnetPrefix, yaitu24, dengan nilai awalan subnet yang diberikan pelanggan untuk subnet OCCORE-SERVERS jika diperlukan.Perbarui nilai default
DefaultGatewaydengan gateway default yang disediakan pelanggan untuk subnet OCCORE-SERVERS.Temukan dan perbarui nilai default
WorkstationCiderdengan nilai yang diberikan pelanggan untuk subnet OC-WORKSTATIONS dalam notasi CIDR IPv4.Perbarui nilai
WorkstationAllowRemotemenjadi$truejika pelanggan memilih untuk mengizinkan akses jarak jauh ke workstation merekaTemukan dan ganti contoh awalan subnet
172.21.0.dengan awalan subnet OCCORE-SERVERS yang disediakan pelanggan.Temukan dan ganti contoh awalan subnet
172.21.2.dengan awalan subnet OCCORE-JUMPHOSTS yang disediakan pelanggan.Temukan dan ganti contoh awalan subnet
172.21.32.dengan awalan subnet OC-WORKSTATIONS yang disediakan pelanggan.Cari dan ganti contoh pesan harian
legalnoticecaptionnilaiPref captiondengan teks yang diberikan pelanggan.Cari dan ganti nilai contoh pesan harian
legalnoticetextdariPref textdengan teks yang disediakan pelanggan.Validasi setiap objek "node" dan perbarui, jika diperlukan.
NodeName- Pastikan nama host sudah benar. Beberapa nama digunakan di banyak tempat, misalnya, pengendali domain. Jika Anda mengubah nama di sini, periksa apakah nama tersebut perlu diubah di tempat lain dalam konfigurasi.IPv4Addr- Ini harus berupa alamat IP host. Oktet terakhir biasanya tidak perlu diubah. Beberapa di antaranya mungkin telah diperbarui selama penelusuran dan penggantian jaringan yang dilakukan pada langkah-langkah sebelumnya.HyperVHost- Nilai ini harus berupa alamat IP server Hyper-V yang menghosting VM ini. Anda bisa mendapatkan alamat IP untuk setiap serverBM??di bagian "Hyper-V Servers" pada konfigurasi. Jangan mengubah penetapan host Hyper-V di kolom ini karena tidak semua host Hyper-V dapat mendukung setiap jenis VM, cukup ubah nama host Hyper-V ke alamat IP yang sesuai.
Validasi detail antarmuka jaringan kedua di semua node dengan
Role=jumphost. Gunakan detail subnet OCCORE-JUMPHOSTS untuk antarmuka ini. Periksa:JumphostIPv4CidrJumphostDefaultGateway
Perbarui stanza khusus ADFS di node tempat
Role=adfs.- Temukan baris
Name = 'SplunkTrust' # Must be unique to the farm. Append "Trust" - Ganti tiga kemunculan
opscenter.localsetelah baris ini dengan domain DNS Anda
- Temukan baris
Perbarui cakupan DHCP agar sesuai dengan rencana IP pelanggan sesuai kebutuhan. Untuk setiap cakupan, pastikan nilai berikut sudah benar. Nama pada cakupan cocok dengan nama yang digunakan dalam rencana jaringan
ocinfo.common.opscenter.local.txt, jadi gunakan yang berikut dalam validasi:ScopeIdIpStartRangeIpEndRangeRouterSubnetMask
Konfirmasi bahwa nilai cocok dengan nilai dalam config1.ps1 yang dicadangkan
Pastikan untuk menyimpan file.
Persiapan VM CONFIG1
Persiapan CONFIG1 dilakukan di BM01. Semua upgrade lainnya terjadi saat login ke VM CONFIG1.
Salin direktori operations_center ke VM CONFIG1
Di host BM01, buka konsol PS sebagai Administrator.
Salin
operations_centeruntuk menyiapkan file yang diperlukan oleh virtual machine (VM) CONFIG1.# Change name to match your config host $config = "DC1-CONFIG1" # Stage files for CONFIG1 VM Copy-Item -Path H:\operations_center -Destination "\\$config\c$\" -Recurse -ForceMenonaktifkan sinkronisasi waktu Hyper-V
Login ke host BM01 sebagai Administrator.
Buka PowerShell di Windows sebagai Administrator dan jalankan perintah berikut:
# Disabling Hyper-V Time Sync Disable-VMIntegrationService -VMName `<SITE>-CONFIG1` -Name 'Time Synchronization'Persiapan dan validasi VM CONFIG1
Dari host BM01, login ke VM CONFIG1 dengan akun
-SAAnda. Hubungkan ke alamat IP VM menggunakan Remote Desktop (RDP). Contoh:mstsc /v 192.168.100.99Buka jendela PowerShell menggunakan menu "Run as different user" untuk dijalankan sebagai pengguna Marvin.
Di jendela PowerShell baru, mulai sesi administratif:
Start -Verb runas -FilePath powershell.exeTutup jendela powershell sebelumnya, biarkan jendela administrator tetap terbuka.
Pastikan jendela PowerShell administratif berjalan sebagai Marvin
whoamiTata file yang di-stage dari host BM01.
Move-Item -Path c:\operations_center -Destination c:\release C:\release\operations_center\dsc\Initialize-ConfigHostFiles.ps1Validasi bahwa
c:\dscdanc:\configada.Menyalin file kredensial dan sertifikat dari Cadangan
Copy-Item -Path "C:\config1_backup\config\creds\" -Destination "C:\config\creds\" -Recurse Copy-Item -Path "C:\config1_backup\config\certs\" -Destination "C:\config\certs\" -RecurseBuat data MECM yang diperlukan untuk mengompilasi MOF
C:\dsc\Build-MecmFiles.ps1Validasi lingkungan build sudah siap dengan menjalankan
Build-Mof.ps1, yang menghasilkan file MOF untuk semua mesin OI.C:\dsc\Build-Mof.ps1
Isi variabel kredensial
Variabel ini digunakan selama proses upgrade. Isi sekali di jendela Marvin Powershell yang dibuka sebagai Administrator.
. 'c:\config\config.ps1' $da_creds = (Get-Credential -Message "Provide domain admin credentials") $sa_creds = (Get-Credential -Message "Provide system admin credentials") $sa_args = @{ Credential = $sa_creds SetLcm = $true RemoveExisting = $true CopyModules = $true } $da_args = @{ Credential = $da_creds SetLcm = $true RemoveExisting = $true CopyModules = $true }Pastikan DSC berjalan dan server dapat dijangkau.
$role = 'domain_controller' $ca = 'ca_root' $dcs = $config.AllNodes | Where-Object {$_.role -eq $role} $non_dcs = $config.AllNodes | Where-Object {$_.role -ne $role -and $_.role -ne $ca -and $_.NodeName -ne "*"} $dcs | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $da_creds Get-DscConfigurationStatus -CimSession $session | select HostName,Status,NumberOfResources,ResourcesNotInDesiredState} $non_dcs | ForEach-Object { Write-Output "Checking $($_.NodeName)" $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session | select HostName,Status,NumberOfResources,ResourcesNotInDesiredState | ft -AutoSize}
Memecahkan masalah konektivitas.
Jika
New-CimSessiongagal, verifikasi nilaiNodeNamesudah benar diconfig.ps1. Selain itu, pastikan server sedang online dan dapat dijangkau.Error akan dimulai dengan
Get-CimSession: WinRM cannot process the request.
Mengupgrade Pengontrol Domain
Saat login ke CONFIG1, upgrade pengontrol domain utama.
Isi variabel, hapus GPO lama, dan tautkan GPO baru.
$dc2 = $dcs | Where-Object {$_.NodeName -like "*-DC2"} $dc1 = $dcs | Where-Object {$_.NodeName -like "*-DC1"} Invoke-Command -Computername $dc1.NodeName -Credential $da_creds -ScriptBlock { Remove-DscConfigurationDocument -Stage Current,Pending,Previous get-gpo -All | Where-Object { $_.DisplayName -like "OIC*" } | Remove-GPO get-gpo -All | Where-Object { $_.DisplayName -like "SITE*" -and $_.DisplayName -notlike "*SCCM*" } | Remove-GPO Get-Item "C:\config\domain_controller\oic_gpos"| Remove-Item -Recurse -Force Get-Item "C:\config\domain_controller\site_gpo*"| Remove-Item -Recurse -Force }Membatalkan tautan objek Kebijakan Grup. Akun tersebut akan ditautkan di akhir proses upgrade.
$gpolinks = (Get-Content C:\dsc\data\GpoLinkMapping.yaml -Raw).Replace("LinkEnabled: 'Yes'", "LinkEnabled: 'No'") $gpolinks | Out-File C:\dsc\data\GpoLinkMapping.yaml -ForceUpgrade pengontrol domain utama.
.\Update-RemoteHost.ps1 @da_args -ComputerName $DC1.NodeNameNew-PSDrive -Name DC1 -PsProvider FileSystem -Root "\\$($DC1.NodeName)\c$" -Credential $da_creds Invoke-Command -ComputerName $DC1.NodeName -Credential $da_creds -Scriptblock {Remove-DscConfigurationDocument -Stage Current,Pending} Remove-Item -Path DC1:\config\domain_controller\site_gpos -Recurse -Force Remove-Item -Path DC1:\config\domain_controller\site_gpos_source -Recurse -Force Copy-Item -Path C:\config\domain_controller\ -Destination DC1:\config\ -Verbose -Force -Recurse C:\dsc\Build-Mof.ps1 -Computername $DC1.NodeName Start-DscConfiguration -ComputerName $DC1.NodeName -Path 'c:\config\mofs' -Credential $da_creds -Verbose -Wait -Force Remove-PsDrive -Name DC1Memvalidasi sinkronisasi waktu dengan SyncServer
Login ke
DC1menggunakan RDP sebagai administrator domain.- Buka jendela
Powershellsebagai administrator. Jalankan perintah berikut untuk memvalidasi konfigurasi waktu.
w32tm /query /status /verbose
- Buka jendela
Jalankan perintah berikut untuk menguji sinkronisasi ulang waktu:
# Testing time resyncronization w32tm /resync# Desired output Sending resync command to local computer The command completed successfully.Validasi ulang bahwa konfigurasi waktu sudah benar dan tidak ada error.
w32tm /query /status /verbose
Upgrade pengontrol domain kedua.
Gunakan jendela PowerShell CONFIG1 yang ada untuk menjalankan skrip berikut.
.\Update-RemoteHost.ps1 @da_args -ComputerName $dc2.NodeName
Validasi replikasi Active Directory.
Setelah DC kedua aktif dan beroperasi, jalankan perintah berikut dari salah satu pengontrol domain untuk memvalidasi replikasi Active Directory:
repadmin /replsummaryOutput harus terlihat seperti berikut:
PS C:\Users\Administrator.OpsCenter> repadmin /replsummary Replication Summary Start Time: 2023-11-29 19:16:59 Beginning data collection for replication summary, this may take awhile: ...... Source DSA largest delta fails/total %% error OC1-DC1 01m:49s 0 / 5 0 Destination DSA largest delta fails/total %% error OC1-DC2 01m:49s 0 / 5 0
Mengupgrade CA-ISSUING1 dan CA-WEB
Gunakan terminal PowerShell yang ada di
CONFIG1untuk mengupgradeCA-ISSUING1.$ca_iss = $config.AllNodes | Where-Object {$_.role -eq "ca_issuing"} c:\dsc\Update-RemoteHost.ps1 @sa_args -ComputerName $ca_iss.NodeNameGunakan terminal PowerShell yang ada di
CONFIG1untuk mengupgradeCA-WEB.$ca_web = $config.AllNodes | Where-Object {$_.role -eq "ca_web"} c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $ca_web.NodeNameMemvalidasi upgrade
$ca_iss,$ca_web | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Upgrade CA-ROOT1
Gunakan terminal PowerShell yang ada di CONFIG1
Nyalakan
CA-ROOT1.$ca_root = $config.AllNodes | Where-Object {$_.role -eq "ca_root"} $session = New-CimSession -ComputerName $ca_root.HyperVHost -Credential $sa_creds Start-VM -CimSession $session -Name $ca_root.NodeNamePerbarui
CA-ROOT1.$caroot_cred = Get-GeccoCredential -Name "$($ca_root.NodeName)\caadmin" -CredStore "c:\config\creds" c:\dsc\Update-RemoteHost.ps1 -Computername $ca_root.NodeName -RemoteHost $ca_root.Ipv4Addr -Credential $caroot_credJika
CA_ROOT1tidak melakukan reboot setelah skrip sebelumnya, lakukan reboot secara manual.Validasi upgrade.
$ca_root | ForEach-Object { $session = New-CimSession -ComputerName $_.Ipv4Addr -Credential $caroot_cred Get-DscConfigurationStatus -CimSession $session}Verifikasi bahwa setelan
Peeradalah<SITE>-DC1.<DNSDOMAIN>danStateadalahActive.Jangan lanjutkan jika waktu tidak disinkronkan dengan benar.
w32tm /query /peers #Peers: 1 Peer: DC1-DC1.domain.local State: Active Time Remaining: 31.2997107s Mode: 3 (Client) Stratum: 1 (primary reference - syncd by radio clock) PeerPoll Interval: 6 (64s) HostPoll Interval: 6 (64s)Matikan
CA-Root.$session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Stop-VM -CimSession $session -Name $ca_root.NodeName
Mengupgrade ADFS
Gunakan terminal PowerShell yang ada di CONFIG1
Upgrade VM
ADFS1.$role = 'adfs' $adfs = $config.AllNodes | Where-Object {$_.role -eq $role} $adfs | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session} $adfs | ForEach-Object { c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $adfs.NodeName} 1. Validate the upgrade. $adfs | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Upgrade Jumphost.
Gunakan terminal PowerShell yang ada di CONFIG1
Buat array Jumphost.
$role = 'jumphost' $jumps = $config.AllNodes | Where-Object {$_.role -eq $role}Upgrade Jumphost.
$jumps | ForEach-Object { c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $_.NodeName}Validasi upgrade.
$jumps | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Mengupgrade Fileserver.
Gunakan terminal PowerShell yang ada di CONFIG1
Buat array yang berisi Fileserver.
$role = 'file' $files = $config.AllNodes | Where-Object {$_.role -eq $role}Upgrade Server File.
$files | ForEach-Object { c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $_.NodeName}Validasi upgrade.
$files | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Upgrade server DHCP.
Gunakan terminal PowerShell yang ada di CONFIG1
Upgrade DHCP1.
$role = 'dhcp_primary' $dhcp1 = $config.AllNodes | Where-Object {$_.role -eq $role} c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $dhcp1.NodeNameValidasi upgrade.
$dhcp1 | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}Upgrade DHCP2.
$role = 'dhcp_failover' $dhcp2 = $config.AllNodes | Where-Object {$_.role -eq $role} c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $dhcp2.NodeNamememvalidasi upgrade.
$dhcp2 | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Mengupgrade server Userlock.
Gunakan terminal PowerShell yang ada di CONFIG1
Buat array PowerShell yang berisi server Userlock.
$role = 'userlock_primary' $ulock1 = $config.AllNodes | Where-Object {$_.role -eq $role} $role = 'userlock_backup' $ulock2 = $config.AllNodes | Where-Object {$_.role -eq $role}Hapus file penanda dari penyiapan sebelumnya.
Invoke-Command -ComputerName $ulock1.NodeName -Credential $sa_creds -Scriptblock { Remove-item "c:\config\userlock_primary\ServiceImpersonation.log" } Invoke-Command -ComputerName $ulock2.NodeName -Credential $sa_creds -Scriptblock { Remove-item "c:\config\userlock_backup\ServiceImpersonation.log" }Mengupgrade server Userlock utama.
c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $ulock1.NodeNameMengupgrade server Userlock cadangan.
c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $ulock2.NodeNameValidasi upgrade.
$ulock1,$ulock2 | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Mengupgrade server Nessus.
Gunakan terminal PowerShell yang ada di CONFIG1
Buat array PowerShell yang berisi server Nessus.
$role = 'nessus_' $nessus = $config.AllNodes | Where-Object {$_.role -match $role}Upgrade server Nessus.
$nessus | ForEach-Object { c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $_.NodeName}Validasi upgrade.
$nessus | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Mengupgrade server Hyper-V.
Gunakan terminal PowerShell yang ada di CONFIG1
Buat array PowerShell yang berisi server Hyper-V.
$role = 'hyper_v' $hyper = $config.AllNodes | Where-Object {$_.role -eq $role}Upgrade server Hyper-V.
$hyper | ForEach-Object { c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $_.NodeName}Validasi upgrade.
$hyper | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Mengupgrade Toolbox
Gunakan terminal PowerShell yang ada di CONFIG1
Buat array PowerShell yang berisi server Toolbox.
$role = 'toolbox' $tools = $config.AllNodes | Where-Object {$_.role -eq $role}Buat drive tambahan di server TOOLBOX1
$tools | ForEach-Object { if ($_.ExtraDiskSize) { Invoke-Command -ComputerName $_.HyperVHost -Credential $sa_creds -ScriptBlock { $additional_disk_path = Join-Path -Path $using:_.ExtraDiskFolder -ChildPath "$($using:_.NodeName)-2.vhdx" New-VHD -Path $additional_disk_path -Dynamic -SizeBytes $using:_.ExtraDiskSize Add-VMHardDiskDrive -VMName $using:_.NodeName -Path $additional_disk_path Get-VMHardDiskDrive -VMName $using:_.NodeName | select VMName,ControllerLocation,Path }}}Pastikan output menampilkan dua disk yang ditetapkan ke VM. Contoh:
VMName ControllerLocation Path ------ ------------------ ---- DC1-TOOLBOX1 0 H:\Hyper-V\Virtual Hard Disks\DC1-TOOLBOX1.vhdx DC1-TOOLBOX1 1 Z:\Hyper-V\Virtual Hard Disks\DC1-TOOLBOX1-2.vhdxUpgrade server Toolbox.
$tools | ForEach-Object { c:\dsc\Update-RemoteHost.ps1 @sa_args -Computername $_.NodeName}Validasi upgrade.
$tools | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session}
Gunakan terminal PowerShell yang Ada di CONFIG1 untuk memvalidasi upgrade.
Pastikan DSC berjalan tanpa error.
$role = 'domain_controller' $ca = 'ca_root' $dcs = $config.AllNodes | Where-Object {$_.role -eq $role} $non_dcs = $config.AllNodes | Where-Object {$_.role -ne $role -and $_.role -ne $ca -and $_.NodeName -ne "*"} $dcs | ForEach-Object { $session = New-CimSession -ComputerName $_.NodeName -Credential $da_creds Get-DscConfigurationStatus -CimSession $session | select HostName,Status,NumberOfResources,ResourcesNotInDesiredState} $non_dcs | ForEach-Object { Write-Output "Checking $($_.NodeName)" $session = New-CimSession -ComputerName $_.NodeName -Credential $sa_creds Get-DscConfigurationStatus -CimSession $session | select HostName,Status,NumberOfResources,ResourcesNotInDesiredState | ft -AutoSize}
Mengupgrade VM Splunk
Dari jendela Powershell di CONFIG1, siapkan dan jalankan konfigurasi DSC:
Masukkan kode situs. Contoh:
"DC1"$sitecode = Read-Host "Enter your site code" Set-Location c:\dscKonfigurasi penerus berat:
$myargs = @{ Computername = "$sitecode-HEAVYFWD" Credential = $sa_creds SetLcm = $true RemoveExisting = $true } .\Update-RemoteHost.ps1 @myargsKonfigurasi pengindeks 1:
$myargs = @{ Computername = "$sitecode-INDEXER1" Credential = $sa_creds SetLcm = $true RemoveExisting = $true } .\Update-RemoteHost.ps1 @myargsKonfigurasi pengindeks 2:
$myargs = @{ Computername = "$sitecode-INDEXER2" Credential = $sa_creds SetLcm = $true RemoveExisting = $true } .\Update-RemoteHost.ps1 @myargsKonfigurasi pengindeks 3:
$myargs = @{ Computername = "$sitecode-INDEXER3" Credential = $sa_creds SetLcm = $true RemoveExisting = $true } .\Update-RemoteHost.ps1 @myargsKonfigurasi pengelola:
$myargs = @{ Computername = "$sitecode-SPLUNKMGR" Credential = $sa_creds SetLcm = $true RemoveExisting = $true } .\Update-RemoteHost.ps1 @myargsKonfigurasi searchhead:
$myargs = @{ Computername = "$sitecode-SEARCHHEAD" Credential = $sa_creds SetLcm = $true RemoveExisting = $true } .\Update-RemoteHost.ps1 @myargs
Dari jendela Powershell di CONFIG1, :
$servers = @() $config.AllNodes | Where-Object {$_.role -match "splunk_"} | Foreach { $servers += $_.NodeName } Invoke-Command -ComputerName $servers -Credential $sa_creds -ScriptBlock {Restart-Service -Name 'Splunkd'} -ErrorAction ContinueIkuti SIEM-G0006 untuk menyetel Pass4SymmKey global dan SIEM-G0007 untuk melampirkan setiap zona ke Splunk di OIC.
Mengupgrade Host CONFIG1
Dari jendela Powershell di CONFIG1, :
Start-DscConfiguration -ComputerName $env:COMPUTERNAME -Path c:\config\mofs -Verbose -Wait -ForceJika komputer dimulai ulang, login kembali dan mulai powershell lagi sebagai Marvin, lalu tingkatkan ke administrator. Isi variabel yang diperlukan untuk bagian berikutnya.
Set-Location c:\dsc . c:\config\config.ps1 $da_creds = (Get-Credential -Message "Provide domain admin credentials") $sa_creds = (Get-Credential -Message "Provide system admin credentials")
Microsoft Configuration Manager (MCM)
Karena MCM bukan komponen yang dapat diupgrade, satu-satunya opsi adalah menghapus host MCM yang ada dan men-deploy ulang MCM.
Pastikan software MCM saat ini telah di-hydrate setelah IT-T0023.
Prosedur deployment ulang dibahas dalam IT-R0019.
Menghapus Checkpoint VM
Setelah upgrade selesai, titik pemeriksaan harus dihapus. Titik pemeriksaan dapat menyebabkan penggunaan disk yang berlebihan dari waktu ke waktu. Hanya pertahankan jika pemulihan ke titik pemeriksaan diperlukan karena upgrade gagal.
Gunakan terminal PowerShell yang ada di CONFIG1
Menghapus titik pemeriksaan VM.
$config.AllNodes | Where-Object {$_.Role -eq "hyper_v"} | Foreach-Object { Invoke-Command -ComputerName $_.NodeName -Credential $sa_creds -Scriptblock { Get-VM | Get-VMSnapshot | Where-Object {$_.Name -like "Checkpoint_*"} | Remove-VMSnapshot -Verbose }}
Mengaktifkan kembali Objek kebijakan grup ke Domain
Gunakan terminal PowerShell yang ada di CONFIG1
Mengubah konfigurasi peran pengontrol domain untuk mengaktifkan link pada GPO terkelola
$gpolinks = (Get-Content C:\dsc\data\GpoLinkMapping.yaml -Raw).Replace("LinkEnabled: 'No'", "LinkEnabled: 'Yes'") $gpolinks | Out-File C:\dsc\data\GpoLinkMapping.yaml -ForcePerbarui pengendali domain dengan peran ObjectOwner:
c:\dsc\Update-RemoteHost.ps1 -Computername $config.AllNodes.DomainConfig.ObjectOwner -Credential $da_creds
Menghubungi tim Google
Lihat halaman Minta dukungan untuk mengetahui langkah-langkah menghubungi Google guna mendapatkan bantuan lebih lanjut.