預計完成時間:3 小時
可操作元件擁有者:MZ技能設定檔:部署工程師
26.1. 總覽
啟動多區域時,需要設定根全域控制層。宇宙中的第一個區域會建立全域控制層。其他區域會加入全域控制層。加入全域控制層的程序比建立控制層更複雜,因為宇宙的全域控制層與新區域之間必須建立信任關係。加入全域控制層時,會涉及兩個區域:
- 錨點可用區:已納入全球控制層的可用區。這個區域必須是 GitLab 執行個體所使用的區域,用於將基礎架構即程式碼 (IaC) 變更套用至全域 API。
- 加入區域:加入全域控制層的區域。
您已在初始化多區域中,啟動宇宙的第一個區域。其他可用區加入網域時,該可用區會做為錨點可用區。
如果宇宙中已有全域 API,且您要啟動加入宇宙的區域,請完成下列步驟。
26.2. 在加入宇宙的區域中啟動多區域
請先確認您已在錨點區域啟動多區域,再繼續操作。
26.2.1. 啟動 IO 工具容器
為確保安全和可稽核性,多區域啟動程序必須使用個人憑證存取 Kubernetes (而非管理員 Kubernetes 設定),並使用 IaC 多方核准授權要求,才能執行敏感動作。IO 工具容器包含執行啟動動作所需的所有工具。如要在 OIC 環境中啟動容器,請參閱 IO 工具容器設定 OOPS-P0065 程序。加入全球控制平面的區域會與兩個區域互動,其中一個區域 (錨點區域) 並非在第 0 天條件下運作,因此必須採用生產層級的驗證和授權措施,確保錨點區域的安全性不會受到影響。
26.2.2. 初始化 GitLab 存放區
使用「以程式碼形式設定基礎架構」中設定的識別資訊提供者 (IdP) 憑證,並按照 OOPS-P0066 程序管理 GitLab 使用者存取權。
複製錨點區域的 IaC 存放區:
git clone https://iac.GLOBAL_DNS_DOMAIN/gdch/iac.git /tmp/iac
將 GLOBAL_DNS_DOMAIN 替換為宇宙的 DNS 網域。
系統提示時,請提供使用者名稱和密碼。
26.2.3. 新增必要角色
請按照「Access and privilege elevation process IAM-R0005」執行手冊中的操作說明,建立必要的叢集角色和角色繫結:
- 在加入區域的
root-admin叢集中,新增具有mz-bootstrap-joining-editor叢集角色的叢集角色繫結。 - 在錨點區域的
root-admin叢集中,新增具有mz-bootstrap-anchor-reader叢集角色的叢集角色繫結。 - 在錨點區域的全球 API 中,於
mz-system命名空間新增具有mz-bootstrap-viewer角色的角色繫結。
26.2.4. 建立權杖要求
加入全球控制層時,系統會使用全域 API 啟動權杖,在加入的區域和錨點區域之間建立聯絡人。權杖要求用於向錨定區域中的全域 API 要求權杖。
為合併要求建立新分支:
cd /tmp/iac git checkout -b JOINING_ZONE_NAME-mz-token-request請將
JOINING_ZONE_NAME替換為從客戶填寫問卷取得的區域名稱,如本節結尾的附註所述。登入加入區域。詳情請參閱 gdcloud 指令列介面。這是必要步驟,因為下一個步驟中的
gdcloud指令會與加入區域中的根管理員叢集互動,取得公開金鑰加密金鑰配對,以便安全地將啟動權杖從錨點區域轉移至加入區域。產生權杖要求 YAML 檔案:
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.yaml建立或更新
kustomization.yaml檔案。開啟檔案:
vim infrastructure/global/orgs/root/kustomization.yaml如果檔案已存在,請將
mz-token-request.yaml項目新增至resources清單。否則請新增完整資源 YAML:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - mz-token-request.yaml儲存檔案並退出 vim。
修訂分支的變更:
git add infrastructure git commit將分支版本推送至 GitLab:
git push將變更內容合併至
main分支。詳情請參閱 IAC-R0004 執行手冊。
26.2.5. 建立權杖
請按照下列步驟在加入區域中建立啟動程序權杖:
為合併要求建立新分支:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token登入錨定區域。詳情請參閱 gdcloud 指令列介面。這是必要步驟,因為下一個步驟中的
gdcloud指令會與錨點區域中的全域 API 互動,以建立及加密啟動程序權杖。產生權杖 YAML 檔案:
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.yaml建立或更新
kustomization.yaml檔案。開啟檔案:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml如果檔案已存在,請將
mz-token.yaml項目新增至resources清單。否則請新增完整資源 YAML:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-token.yaml儲存檔案並退出 vim。
修訂分支的變更:
git add infrastructure git commit將分支版本推送至 GitLab:
git push將變更內容合併至
main分支。詳情請參閱 IAC-R0004 執行手冊。
26.2.6. 建立啟動程序資源
請按照下列步驟,在加入區域的根管理員叢集中建立啟動程序資源:
為合併要求建立新分支:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-bootstrap登入錨定區域。詳情請參閱 gdcloud 指令列介面。這是必要步驟,因為在加入作業期間,下一個步驟中的
gdcloud指令會與錨點區域中的根管理員叢集互動,以擷取與錨點區域中全域 API 互動的連線資訊。產生啟動程序 YAML 檔案:
gdcloud system multi-zone create-bootstrap --type join --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-bootstrap.yaml建立或更新
kustomization.yaml檔案:開啟檔案:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml如果檔案已存在,請將
mz-token.yaml項目新增至resources清單。否則請新增完整資源 YAML:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-bootstrap.yaml儲存檔案並退出 vim。
修訂分支的變更:
git add infrastructure git commit將分支版本推送至 GitLab:
git push將變更內容合併至
main分支。詳情請參閱 IAC-R0004 執行手冊。
變更合併後,IaC 會將 Bootstrap 資源傳播至新區域的根管理員叢集,並進行協調。這是非同步作業,因此合併後無法立即使用全域 API。
26.2.7. 驗證是否已成功部署全域 API
如要驗證全域 API 的部署作業,請按照下列步驟操作:
登入加入區域。詳情請參閱 gdcloud 指令列介面。
取得根全域 API (
global-api) 的 Kubernetes 設定。詳情請參閱 IAM-R0004 執行手冊。確認加入區域中的全域 API 連線:
kubectl version
26.2.8. 清除金鑰組
如要刪除用於將啟動程序權杖從錨點區域轉移至加入區域的金鑰組,請按照下列步驟操作:
登入加入區域。詳情請參閱 gdcloud 指令列介面。
取得根管理員叢集的 Kubernetes 設定 (
root-admin)。詳情請參閱 IAM-R0004 執行手冊。執行下列指令來刪除金鑰配對:
kubectl delete keypair -n global-kube-system kp
26.2.9. 清除權杖要求
如要刪除權杖要求 YAML 檔案,請按照下列步驟操作:
為合併要求建立新分支:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-request-delete刪除權杖要求 YAML 檔案:
rm /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yaml更新
kustomization.yaml檔案。開啟檔案:
vim infrastructure/global/orgs/root/kustomization.yaml從
resources清單中移除mz-token-request.yaml項目、儲存檔案,然後結束 vim。
修訂分支的變更:
git add infrastructure git commit將分支版本推送至 GitLab:
git push將變更內容合併至
main分支。詳情請參閱 IAC-R0004 執行手冊。
26.2.10. 清除權杖
全球 API 在加入區域中可用後,請刪除權杖,因為不再需要:
為合併要求建立新分支:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-delete刪除權杖 YAML 檔案:
rm /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yaml如果
kustomization.yaml檔案已存在,請更新該檔案。開啟檔案:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml從
resources清單中移除mz-token.yaml項目、儲存檔案,然後結束 vim。
修訂分支的變更:
git add infrastructure git commit將分支版本推送至 GitLab:
git push將變更內容合併至
main分支。詳情請參閱 IAC-R0004 執行手冊。
26.2.11. 與其他時區同步時間
- 請按照 NTP P0007 - Configure Multizone SyncServers,將這個區域的時間與其他區域同步。
26.2.12. 確認全域 API 運作正常
完成全域 API 啟動程序後,請執行健康狀態檢查,確認 API 運作正常:
從根管理員叢集的 API 伺服器取得區域名稱:
export ZONE_NAME=$(kubectl get controlplane -n mz-system cp -o jsonpath='{.spec.zone}')檢查全域 API 的上次產生活動訊號時間戳記:
kubectl get globalapizone -n mz-system ${ZONE_NAME} -o yaml活動訊號時間戳記會填入
status.lastHeartbeat。時間戳記每 30 秒更新一次。如果全域 API 的最後一次心跳時間戳記不超過 30 秒,即為正常。
26.2.13. 延長全域 etcd CA 的到期日
全域 etcd 的憑證授權單位 (CA) 有 90 天的有效期限。全域 etcd 是 etcd 叢集,其中執行個體部署在多個 GDC 區域。系統不會自動輪替 CA。
這些操作說明應適用於已加入多區域環境的現有區域。更新現有區域後,即將加入這個宇宙的下一個區域可以略過本節。
26.2.13.1. 檢查到期日
在任何現有區域中,使用根管理員叢集的管理員 Kubernetes 設定。檢查憑證授權單位的到期日:
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 -
如果有效期限已設為一年左右,則無須採取任何行動。如果少於一年,請參閱輪替效期較長的 CA。
26.2.13.2. 輪替效期較長的 CA
請按照 MZ-T0001 輪替 CA。確認新 CA 的憑證規格包含 duration: 8760h 值。