Halaman ini memperkenalkan operasi hari ke-2 alur kerja Infrastructure as Code (IaC).
Prasyarat
- Selesaikan penyiapan IaC.
- Opsional: Download dan instal alat command line nomos untuk proses debug:
Buka https://cloud.google.com/anthos-config-management/docs/how-to/nomos-command saat Anda berada di luar lingkungan yang terisolasi dan dapat mengakses URL ini.
Login ke GitLab
Buka konsol web GitLab di
https://iac.GDC_URL.Ganti
GDC_URLdengan URL dasar project GDC.Di UI GitLab, klik tombol SAML Login untuk dialihkan ke halaman login Active Directory Federation Services (ADFS) Operations Center IT (OC IT).
Login dengan kredensial OC IT ADFS Anda untuk melihat halaman beranda GitLab.
Akses CLI memerlukan Token Akses Pribadi (PAT). Buat PAT untuk pengguna Anda dengan tingkat akses yang diperlukan dengan mengikuti langkah-langkah berikut dari artikel GitLab, Create a personal access token:
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token.Setelah membuat PAT, Anda dapat melakukan autentikasi menggunakan alat CLI.
Alur kerja Infrastructure as Code
Secara umum, alur kerja IaC terdiri dari langkah-langkah berikut:
Buat perubahan YAML yang sesuai di repo
iacGitLab sebagai berikut:- Jika file tidak ada, pilih ikon File baru di sidebar.

- Di jendela pop-up Buat file baru, masukkan nama file baru dengan jalur lengkap, lalu pilih Buat file.

Jika file ada, di sidebar, pilih file untuk membukanya di panel baru.
Buat perubahan yang diperlukan pada file.
Upload perubahan sebagai commit Git dan kirim commit untuk peninjauan kode wajib sebagai berikut:
Pilih opsi Commit di sidebar untuk meluaskan opsi lainnya.

Tulis pesan commit di area teks. Sertakan informasi berguna dalam pesan.
Pilih opsi Buat cabang baru.
Pilih kotak centang Mulai permintaan penggabungan baru.
Klik Commit untuk membuka pratinjau formulir permintaan penggabungan.
Buat permintaan penggabungan dan lakukan perubahan yang diperlukan, seperti:
- Di kolom Judul, masukkan nama untuk permintaan penggabungan.
- Di kolom Deskripsi, masukkan deskripsi.
- Di bagian Merge options, centang kotak Delete source branch when merge source is accepted.
- Klik Create merge request. Permintaan penggabungan dikirim ke
peninjau secara otomatis.

Minta pemilik yang tepat untuk meninjau dan menyetujui commit sebagai proses persetujuan banyak pihak.
Kirimkan commit.
Verifikasi hasilnya di cluster yang sesuai.
Tips proses debug
Bagian ini menjelaskan tips penelusuran bug opsional untuk IaC. Untuk memverifikasi bahwa konfigurasi Anda akurat, Anda harus menginstal alat command line nomos.
Melihat pratinjau dan memvalidasi konfigurasi yang dirender
Sebelum Config Sync merender konfigurasi dan menyinkronkannya ke cluster, pastikan
konfigurasi akurat dengan menjalankan nomos hydrate untuk melihat pratinjau konfigurasi yang dirender
dan menjalankan nomos vet untuk memvalidasi bahwa formatnya sudah benar.
Beralih ke direktori root git lokal.
Jalankan
nomos hydrateberikut dengan flag berikut:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYDalam perintah ini:
--source-format=unstructuredmemungkinkannomos hydrateberfungsi di repositori tidak terstruktur. Karena Anda menggunakan konfigurasi Kustomize dan diagram Helm, Anda harus menggunakan repositori tidak terstruktur dan menambahkan tanda ini.--output=OUTPUT_DIRECTORYmemungkinkan Anda menentukan jalur ke konfigurasi yang dirender. Ganti OUTPUT_DIRECTORY dengan lokasi tempat Anda ingin menyimpan output.
Periksa sintaksis dan validitas konfigurasi Anda dengan menjalankan
nomos vetdengan flag berikut:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYDalam perintah ini:
--source-format=unstructuredmemungkinkannomos vetbekerja di repositori tidak terstruktur.--keep-output=truemenyimpan konfigurasi yang dirender.--output=OUTPUT_DIRECTORYadalah jalur ke konfigurasi yang dirender.
Memverifikasi proses
Untuk memverifikasi status sinkronisasi, lakukan langkah-langkah berikut:
Gunakan alias shell
ka:$ alias ka='kubectl --kubeconfig $HOME/root-admin-kubeconfig'
Konfigurasi alias
kakubectluntuk berkomunikasi dengan clusterroot-admin.Verifikasi bahwa sinkronisasi berfungsi:
$ ka get rootsync/root-sync -n config-management-systemAnda akan melihat commit yang digunakan Config Sync, dan error jika ada.
Setelah Anda memverifikasi status sinkronisasi, gunakan salah satu opsi berikut:
Periksa apakah Anda telah berhasil menerapkan commit terbaru di repositori Git:
Periksa kolom
.status.syncdi objek RootSync atau RepoSync. Anda dapat mengakses kolom.status.syncdengan perintah berikut:# get .status.sync of a RootSync object ka get rootsync ROOT_SYNC -n config-management-system -o jsonpath='{.status.sync}' # get .status.sync of a RepoSync object ka get reposync REPO_SYNC -n REPO_SYNC_NAMESPACE -o jsonpath='{.status.sync}'Ganti
ROOT_SYNCdengan nama objek RootSync yang ingin Anda cari.Ganti
REPO_SYNCdengan nama objek RepoSync yang ingin Anda cari.Ganti
REPO_SYNC_NAMESPACEdengan nama objek RepoSync yang ingin Anda cari.- Nilai kolom
.status.sync.commitharus sama dengan commit terbaru Anda. - Kolom
.status.synctidak memiliki "error".
- Nilai kolom
Periksa apakah semua resource dalam commit terbaru telah disesuaikan. Untuk setiap objek RootSync atau RepoSync, ada objek ResourceGroup unik yang mencatat status rekonsiliasi resource terkelola yang dideklarasikan di repositori Git. Objek ResourceGroup memiliki namespace dan nama yang sama dengan objek RootSync atau RepoSync.
Misalnya, untuk objek RootSync dengan nama
root-syncdi namespaceconfig-management- system, objek ResourceGroup yang sesuai jugaroot-syncdi namespaceconfig-management-system. Setelah Anda menerapkan commit terbaru dengan berhasil, objek ResourceGroup berisi grup, jenis, namespace, dan nama resource terkelola dari commit terbaru.Jalankan perintah berikut untuk mendapatkan objek ResourceGroup:
# get the ResourceGroup object for a RootSync object ka get resourcegroup ROOT_SYNC -n config-management-system -o yaml # get the ResourceGroup object for a RepoSync object ka get resourcegroup REPO_SYNC -n REPO_SYNC_NAMESPACE -o yamlGanti
ROOT_SYNCdengan nama objek ResourceGroup yang ingin Anda cari.Ganti
REPO_SYNCdengan nama objek ResourceGroup yang ingin Anda cari.Ganti
REPO_SYNC_NAMESPACEdengan nama objek ResourceGroup yang ingin Anda cari.- Periksa apakah
.status.observedGenerationsama dengan nilai kolom.metadata.generationdalam objek ResourceGroup. - Verifikasi bahwa kondisi
Stalleddan kondisiReconcilingkeduanya memilikistatussebagai"False". - Periksa setiap item di kolom
.status.resourceStatusesmemiliki statusCurrent.
- Periksa apakah
Periksa apakah Anda melakukan commit menggunakan file YAML:
Opsional: gunakan perintah
nomosjika Anda mengonfigurasi kontekskubectl:$ nomos status Connecting to clusters... *root-admin-admin@root-admin -------------------- <root>:root-sync https://iac.zone1.google.gdch.test/gdch/iac.git/infrastructure/zonal/zones/ZONE_NAME/root-admin@main SYNCED 4a276fb67d17471f1ba812c725b75a76a1715009 Managed resources: NAMESPACE NAME STATUS default service/hello UnknownJika Anda melakukan commit pada contoh file YAML, jalankan:
$ ka get svc/helloAnda akan melihat layanan yang dibuat dari contoh YAML.
Jalankan perintah berikut:
ka describe svc/helloAnda akan melihat objek berikut:
Name: myrole Labels: app.kubernetes.io/managed-by=configmanagement.gke.io configsync.gke.io/declared-version=v1 Annotations: config.k8s.io/owning-inventory: config-management-system_root-sync configmanagement.gke.io/cluster-name: my-cluster configmanagement.gke.io/managed: enabled configmanagement.gke.io/source-path: config-sync-quickstart/multirepo/root/gamestore-myrole.yaml configmanagement.gke.io/token: 747b843a7ddbd945c0616034a935cf648b58e7b5 configsync.gke.io/declared-fields: {"f:rules":{}} configsync.gke.io/git-context: {"repo":"https://github.com/GoogleCloudPlatform/anthos-config-management-samples","branch":"main","rev":"HEAD"} configsync.gke.io/manager: :root configsync.gke.io/resource-id: rbac.authorization.k8s.io_role_gamestore_myrole PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods [] [] [get list]Tambahkan anotasi baru ke layanan:
$ ka annotate --overwrite svc/hello google.com/test=aaaJalankan
describesekali lagi, konfirmasi bahwa anotasi ada, dan periksa apakah Config Sync tidak menimpanya.Mengganti anotasi yang dikelola IaC:
$ ka annotate --overwrite svc/hello google.com/annotation-in-iac=value-from-kubectlAnda akan melihat perubahan ditolak dalam pesan error berikut:
$ ka annotate --overwrite svc/hello google.com/annotation-in-iac=asfas Error from server (Forbidden): admission webhook "v1.admission-webhook.configsync.gke.io" denied the request: kubernetes-admin cannot modify fields of object "_service_default_hello" managed by Config Sync: .metadata.annotations.google.com/annotation-in-iac
Memecahkan masalah penginstalan
Jika Anda menerima error rendering, seperti Kustomize tidak merender konfigurasi, gunakan:
$ ka logs -n config-management-system deployment/root-reconciler -c hydration-controller -f
Container di root-reconciler adalah sebagai berikut:
git-sync: Meng-clone repositori Git jarak jauh.Hydration-controller:Merender konfigurasi Kustomize dan diagram Helm jika file konfigurasi Kustomization ada di direktori root.reconciler:Meratakan hierarki repo, merekonsiliasinya melalui server API, dan memeriksa error.
Untuk mengetahui informasi selengkapnya, ikuti panduan resmi, Memecahkan masalah Config Sync
Config Management Google Cloud:
https://cloud.google.com/anthos-config-management/docs/how-to/troubleshooting-config-sync.
Pemecahan masalah
Mengembalikan login khusus ADFS
Untuk tujuan proses debug, mungkin berguna untuk login sebagai pengguna
ioadmin awal menggunakan login sandi default. Untuk menambahkan kembali
login melalui sandi dengan GitLab, jalankan perintah kubectl
berikut.
export TOOLBOX=$(kubectl get pods --no-headers=true -n gitlab-system -lapp=toolbox,release=gitlab -o name | cut -c 5-)
# Wait for pod to be ready.
kubectl wait pods -n gitlab-system -lapp=toolbox,release=gitlab --for condition=Ready
kubectl exec $TOOLBOX -n gitlab-system -- /srv/gitlab/bin/rails runner "Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: true)"
Setelah selesai menggunakan pengguna lokal, aktifkan kembali autentikasi khusus ADFS menggunakan:
export TOOLBOX=$(kubectl get pods --no-headers=true -n gitlab-system -lapp=toolbox,release=gitlab -o name | cut -c 5-)
# Wait for pod to be ready.
kubectl wait pods -n gitlab-system -lapp=toolbox,release=gitlab --for condition=Ready
kubectl exec $TOOLBOX -n gitlab-system -- /srv/gitlab/bin/rails runner "Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: false)"
Mengaktifkan pengguna baru dari ADFS
Pengguna login ke Distributed Cloud dengan ADFS. Tindakan ini akan membuat akun pengguna di dalam GitLab dengan akun AD-nya.
Sebagai administrator, selesaikan langkah-langkah berikut untuk menambahkan pengguna yang baru dibuat ke grup GitLab secara manual:
Login ke GitLab sebagai Admin GitLab atau Admin grup Distributed Cloud di GitLab.
Buka grup Distributed Cloud di GitLab atau
https://iac.GDC_URL/gdch.Klik Lihat grup di Area admin di
https://iac.GDC_URL/admin/groups/gdch.Tambahkan akun pengguna yang baru dibuat ke grup Distributed Cloud sebagai Developer.
Konfirmasi status rekonsiliasi
Untuk langkah-langkah pemecahan masalah tambahan, periksa apakah subcomponent telah menyelesaikan rekonsiliasi:
root@count-bootstrapper:~/adfs# kr get subcomponent -n root iac-gitlab
NAME AGE STATUS
iac-gitlab 10d ReconciliationCompleted
Pastikan CR gitlab berada dalam status Running:
root@count-bootstrapper:~/adfs# kr get gitlab -n gitlab-system gitlab
NAME STATUS VERSION
gitlab Running 7.11.10
Terakhir, jika tugas migrasi tampak macet, periksa diagram helm subkomponen dan pastikan tidak ada secret yang hilang.