Perkiraan waktu penyelesaian: 3 jam
Pemilik komponen yang dapat dioperasikan: MZProfil keterampilan: engineer deployment
26.1. Ringkasan
Bootstrapping multi-zona melibatkan penyiapan bidang kontrol global root. Zona pertama di semesta menetapkan bidang kontrol global. Zona tambahan bergabung dengan bidang kontrol global. Bergabung dengan bidang kontrol global adalah proses yang lebih rumit daripada membuat bidang kontrol, karena kepercayaan harus dibangun antara bidang kontrol global semesta dan zona baru. Saat bergabung dengan bidang kontrol global, ada dua zona yang terlibat:
- Zona anchor: zona yang sudah menjadi bagian dari bidang kontrol global. Ini harus berupa zona yang instance GitLab-nya digunakan untuk menerapkan perubahan infrastruktur sebagai kode (IaC) ke API global semesta.
- Zona yang bergabung: zona yang bergabung dengan bidang kontrol global.
Anda melakukan bootstrapping zona pertama alam semesta di Initialize multi-zone. Zona tersebut berfungsi sebagai zona anchor saat zona lain bergabung dengan semesta.
Jika sudah ada API global di semesta dan Anda melakukan bootstrapping zona yang bergabung dengan semesta, selesaikan langkah-langkah berikut.
26.2. Memulai multi-zona di zona yang bergabung dengan semesta
Konfirmasi bahwa Anda telah melakukan bootstrapping multi-zona di zona anchor sebelum melanjutkan.
26.2.1. Mulai Penampung Alat IO
Untuk keamanan dan auditabilitas, proses bootstrapping multi-zona harus dilakukan menggunakan kredensial pribadi untuk mengakses Kubernetes (bukan konfigurasi Kubernetes administrator) dan IaC untuk persetujuan banyak pihak atas permintaan otorisasi untuk melakukan tindakan sensitif. Semua alat yang diperlukan untuk melakukan tindakan bootstrapping disertakan dalam Container Alat IO. Lihat proses Penyiapan Container Alat IO OOPS-P0065 untuk mengetahui cara memulai container di lingkungan OIC. Zona yang bergabung dengan bidang kontrol global melibatkan interaksi dengan dua zona, salah satunya (zona anchor) tidak beroperasi dalam kondisi hari ke-0, sehingga langkah-langkah autentikasi dan otorisasi tingkat produksi harus diterapkan untuk memastikan keamanan zona anchor tidak terganggu.
26.2.2. Melakukan inisialisasi repositori Gitlab
Gunakan kredensial dari penyedia identitas (IdP) yang dikonfigurasi di Penyiapan infrastruktur sebagai kode dan ikuti proses OOPS-P0066 untuk mengelola akses pengguna GitLab.
Buat clone repositori IaC zona penahan:
git clone https://iac.GLOBAL_DNS_DOMAIN/gdch/iac.git /tmp/iac
Ganti GLOBAL_DNS_DOMAIN dengan domain DNS untuk semesta.
Berikan nama pengguna dan sandi saat diminta.
26.2.3. Menambahkan peran yang diperlukan
Ikuti petunjuk dalam runbook Proses elevasi akses dan hak istimewa IAM-R0005 untuk membuat cluster-role dan binding peran yang diperlukan:
- Tambahkan binding peran cluster dengan peran cluster
mz-bootstrap-joining-editordi clusterroot-adminzona gabungan. - Tambahkan binding peran cluster dengan peran cluster
mz-bootstrap-anchor-readerdi clusterroot-adminzona anchor. - Tambahkan binding peran dengan peran
mz-bootstrap-viewerdi namespacemz-systemdi API global zona anchor.
26.2.4. Buat permintaan token
Saat bergabung dengan bidang kontrol global, kontak dibuat antara zona yang bergabung dan zona anchor menggunakan token bootstrap API global. Permintaan token digunakan untuk meminta token dari API global di zona penambat.
Buat cabang baru untuk permintaan penggabungan:
cd /tmp/iac git checkout -b JOINING_ZONE_NAME-mz-token-requestGanti
JOINING_ZONE_NAMEdengan nama zona yang berasal dari Kuesioner Penerimaan Pelanggan seperti yang dijelaskan dalam catatan di akhir bagian.Login ke zona gabung. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya. Tindakan ini diperlukan karena perintah
gdcloudpada langkah berikutnya berinteraksi dengan cluster admin root di zona yang bergabung untuk mendapatkan pasangan kunci enkripsi kunci publik guna mentransfer token bootstrap secara aman dari zona anchor ke zona yang bergabung.Buat file YAML permintaan token:
gdcloud system multi-zone create-token-request --cluster root --zone JOINING_ZONE_NAME --client-type api-join --namespace global-kube-system --output-file /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yamlBuat atau perbarui file
kustomization.yaml.Buka file:
vim infrastructure/global/orgs/root/kustomization.yamlJika file sudah ada, tambahkan item
mz-token-request.yamlke daftarresources. Atau, tambahkan yaml resource lengkap:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - mz-token-request.yamlSimpan file dan keluar dari vim.
Lakukan perubahan pada cabang:
git add infrastructure git commitKirim branch ke GitLab:
git pushGabungkan perubahan ke cabang
main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.
26.2.5. Buat token
Ikuti langkah-langkah berikut untuk membuat token bootstrap di zona gabungan:
Buat cabang baru untuk permintaan penggabungan:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-tokenLogin ke zona penanda. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya. Hal ini diperlukan karena perintah
gdcloudpada langkah berikutnya berinteraksi dengan API global di zona anchor untuk membuat dan mengenkripsi token bootstrap.Buat file YAML token:
gdcloud system multi-zone create-token --zone JOINING_ZONE_NAME --namespace global-kube-system --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yamlBuat atau perbarui file
kustomization.yaml.Buka file:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlJika file sudah ada, tambahkan item
mz-token.yamlke daftarresources. Atau, tambahkan YAML resource lengkap:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-token.yamlSimpan file dan keluar dari vim.
Lakukan perubahan pada cabang:
git add infrastructure git commitKirim branch ke GitLab:
git pushGabungkan perubahan ke cabang
main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.
26.2.6. Buat resource bootstrap
Ikuti langkah-langkah berikut untuk membuat resource bootstrap di cluster admin root zona gabungan:
Buat cabang baru untuk permintaan penggabungan:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-bootstrapLogin ke zona penanda. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya. Hal ini diperlukan karena selama operasi penggabungan, perintah
gdcloudpada langkah berikutnya berinteraksi dengan cluster admin root di zona anchor untuk mengambil informasi konektivitas guna berinteraksi dengan API global di zona anchor.Buat file YAML bootstrap:
gdcloud system multi-zone create-bootstrap --type join --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-bootstrap.yamlBuat atau perbarui file
kustomization.yaml:Buka file:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlJika file sudah ada, tambahkan item
mz-token.yamlke daftarresources. Atau, tambahkan YAML resource lengkap:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-bootstrap.yamlSimpan file dan keluar dari vim.
Lakukan perubahan pada cabang:
git add infrastructure git commitKirim branch ke GitLab:
git pushGabungkan perubahan ke cabang
main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.
Setelah perubahan digabungkan, IaC akan menyebarkan resource Bootstrap ke cluster admin root zona baru tempat resource tersebut disesuaikan. Ini adalah operasi asinkron, sehingga API global tidak akan langsung tersedia setelah penggabungan.
26.2.7. Memvalidasi keberhasilan deployment API global
Untuk memvalidasi deployment API global, ikuti langkah-langkah berikut:
Login ke zona gabung. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya.
Dapatkan konfigurasi Kubernetes untuk API global root (
global-api). Lihat runbook IAM-R0004 untuk mengetahui detailnya.Verifikasi konektivitas dengan API global di zona bergabung:
kubectl version
26.2.8. Hapus pasangan kunci
Untuk menghapus pasangan kunci yang digunakan untuk mentransfer token bootstrap dari zona anchor ke zona gabungan, ikuti langkah-langkah berikut:
Login ke zona gabung. Lihat Antarmuka Command Line gdcloud untuk mengetahui detailnya.
Dapatkan konfigurasi Kubernetes untuk cluster admin root (
root-admin). Lihat runbook IAM-R0004 untuk mengetahui detailnya.Jalankan perintah berikut untuk menghapus pasangan kunci:
kubectl delete keypair -n global-kube-system kp
26.2.9. Menghapus permintaan token
Untuk menghapus file YAML permintaan token, ikuti langkah-langkah berikut:
Buat cabang baru untuk permintaan penggabungan:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-request-deleteHapus file YAML permintaan token:
rm /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yamlPerbarui file
kustomization.yaml.Buka file:
vim infrastructure/global/orgs/root/kustomization.yamlHapus item
mz-token-request.yamldari daftarresources, simpan file, dan keluar dari vim.
Lakukan perubahan pada cabang:
git add infrastructure git commitKirim branch ke GitLab:
git pushGabungkan perubahan ke cabang
main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.
26.2.10. Membersihkan token
Setelah API global tersedia di zona gabungan, hapus token karena tidak lagi diperlukan:
Buat cabang baru untuk permintaan penggabungan:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-deleteHapus file YAML token:
rm /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yamlPerbarui file
kustomization.yamljika sudah ada.Buka file:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlHapus item
mz-token.yamldari daftarresources, simpan file, dan keluar dari vim.
Lakukan perubahan pada cabang:
git add infrastructure git commitKirim branch ke GitLab:
git pushGabungkan perubahan ke cabang
main. Lihat buku pedoman IAC-R0004 untuk mengetahui detailnya.
26.2.11. Menyinkronkan waktu dengan zona lain
- Ikuti NTP P0007 - Configure Multizone SyncServers untuk menyinkronkan waktu di zona ini dengan zona lainnya.
26.2.12. Memverifikasi bahwa API global berfungsi dengan baik
Setelah proses bootstrap API global selesai, lakukan pemeriksaan kondisi untuk mengonfirmasi bahwa API dalam kondisi baik:
Dapatkan nama zona dari server API cluster admin root:
export ZONE_NAME=$(kubectl get controlplane -n mz-system cp -o jsonpath='{.spec.zone}')Periksa stempel waktu heartbeat terakhir API global:
kubectl get globalapizone -n mz-system ${ZONE_NAME} -o yamlStempel waktu detak jantung diisi di
status.lastHeartbeat. Stempel waktu diperbarui setiap 30 detik. API global yang sehat memiliki stempel waktu detak jantung terakhir yang tidak lebih dari 30 detik.
26.2.13. Perpanjang tanggal habis masa berlaku CA etcd global
Otoritas sertifikat (CA) etcd global memiliki tanggal habis masa berlaku 90 hari. etcd global adalah cluster etcd yang memiliki instance yang di-deploy di beberapa zona GDC. Tidak ada otomatisasi untuk mengganti CA.
Petunjuk ini harus diterapkan ke zona yang sudah ada yang telah bergabung dengan multi-zona. Setelah zona yang ada diperbarui, zona berikutnya yang akan bergabung ke semesta ini dapat melewati bagian ini.
26.2.13.1. Periksa tanggal habis masa berlaku
Gunakan konfigurasi Kubernetes administrator untuk cluster admin root di zona yang ada. Periksa tanggal habis masa berlaku CA:
export CA_NAME=$(kubectl get etcdca etcd -n global-kube-system -o jsonpath="{.spec.rootCA.name}")
kubectl get secret $CA_NAME -n global-kube-system -o jsonpath="{.data.tls\.crt}" | base64 -d | openssl x509 -enddate -noout -in -
Jika tanggal habis masa berlaku sudah ditetapkan sekitar satu tahun, tidak ada tindakan lebih lanjut yang diperlukan. Jika kurang dari satu tahun, lihat Memutar CA dengan durasi yang lebih lama.
26.2.13.2. Memutar CA dengan durasi yang lebih lama
Ikuti MZ-T0001 untuk merotasi CA. Pastikan spesifikasi sertifikat CA baru berisi nilai duration: 8760h.