Mengonfigurasi Infrastructure as Code

Halaman ini memperkenalkan operasi hari ke-2 alur kerja Infrastructure as Code (IaC).

Prasyarat

Login ke GitLab

  1. Buka konsol web GitLab di https://iac.GDC_URL.

    Ganti GDC_URL dengan URL dasar project GDC.

  2. Di UI GitLab, klik tombol SAML Login untuk dialihkan ke halaman login Active Directory Federation Services (ADFS) Operations Center IT (OC IT).

  3. Login dengan kredensial OC IT ADFS Anda untuk melihat halaman beranda GitLab.

  4. 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:

  1. Buat perubahan YAML yang sesuai di repo iac GitLab sebagai berikut:

    • Jika file tidak ada, pilih ikon File baru di sidebar.

    menu repositori dengan opsi File Baru

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

    pop-up buat file baru untuk mengetik jalur file di kotak teks

    • Jika file ada, di sidebar, pilih file untuk membukanya di panel baru.

    • Buat perubahan yang diperlukan pada file.

  2. Upload perubahan sebagai commit Git dan kirim commit untuk peninjauan kode wajib sebagai berikut:

    1. Pilih opsi Commit di sidebar untuk meluaskan opsi lainnya.

    2. Tulis pesan commit di area teks. Sertakan informasi berguna dalam pesan.

    3. Pilih opsi Buat cabang baru.

    4. Pilih kotak centang Mulai permintaan penggabungan baru.

    5. Klik Commit untuk membuka pratinjau formulir permintaan penggabungan.

    6. Buat permintaan penggabungan dan lakukan perubahan yang diperlukan, seperti:

      1. Di kolom Judul, masukkan nama untuk permintaan penggabungan.
      2. Di kolom Deskripsi, masukkan deskripsi.
      3. Di bagian Merge options, centang kotak Delete source branch when merge source is accepted.
      4. Klik Create merge request. Permintaan penggabungan dikirim ke peninjau secara otomatis.
  3. Minta pemilik yang tepat untuk meninjau dan menyetujui commit sebagai proses persetujuan banyak pihak.

  4. Kirimkan commit.

  5. 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.

  1. Beralih ke direktori root git lokal.

  2. Jalankan nomos hydrate berikut dengan flag berikut:

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    Dalam perintah ini:

    • --source-format=unstructured memungkinkan nomos hydrate berfungsi di repositori tidak terstruktur. Karena Anda menggunakan konfigurasi Kustomize dan diagram Helm, Anda harus menggunakan repositori tidak terstruktur dan menambahkan tanda ini.
    • --output=OUTPUT_DIRECTORY memungkinkan Anda menentukan jalur ke konfigurasi yang dirender. Ganti OUTPUT_DIRECTORY dengan lokasi tempat Anda ingin menyimpan output.
  3. Periksa sintaksis dan validitas konfigurasi Anda dengan menjalankan nomos vet dengan flag berikut:

    nomos vet \
        --source-format=unstructured \
        --keep-output=true \
        --output=OUTPUT_DIRECTORY
    

    Dalam perintah ini:

    • --source-format=unstructured memungkinkan nomos vet bekerja di repositori tidak terstruktur.
    • --keep-output=true menyimpan konfigurasi yang dirender.
    • --output=OUTPUT_DIRECTORY adalah jalur ke konfigurasi yang dirender.

Memverifikasi proses

Untuk memverifikasi status sinkronisasi, lakukan langkah-langkah berikut:

  1. Gunakan alias shell ka:

      $ alias ka='kubectl --kubeconfig $HOME/root-admin-kubeconfig'
    

    Konfigurasi alias ka kubectl untuk berkomunikasi dengan cluster root-admin.

  2. Verifikasi bahwa sinkronisasi berfungsi:

     $ ka get rootsync/root-sync -n config-management-system
    

    Anda 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:

    1. Periksa kolom .status.sync di objek RootSync atau RepoSync. Anda dapat mengakses kolom .status.sync dengan 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_SYNC dengan nama objek RootSync yang ingin Anda cari.

      Ganti REPO_SYNC dengan nama objek RepoSync yang ingin Anda cari.

      Ganti REPO_SYNC_NAMESPACE dengan nama objek RepoSync yang ingin Anda cari.

      • Nilai kolom .status.sync.commit harus sama dengan commit terbaru Anda.
      • Kolom .status.sync tidak memiliki "error".
    2. 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-sync di namespace config-management- system, objek ResourceGroup yang sesuai juga root-sync di namespace config-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 yaml
      

      Ganti ROOT_SYNC dengan nama objek ResourceGroup yang ingin Anda cari.

      Ganti REPO_SYNC dengan nama objek ResourceGroup yang ingin Anda cari.

      Ganti REPO_SYNC_NAMESPACE dengan nama objek ResourceGroup yang ingin Anda cari.

      • Periksa apakah .status.observedGeneration sama dengan nilai kolom .metadata.generation dalam objek ResourceGroup.
      • Verifikasi bahwa kondisi Stalled dan kondisi Reconciling keduanya memiliki status sebagai "False".
      • Periksa setiap item di kolom .status.resourceStatuses memiliki status Current.
  • Periksa apakah Anda melakukan commit menggunakan file YAML:

    1. Opsional: gunakan perintah nomos jika Anda mengonfigurasi konteks kubectl:

      $ 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    Unknown
      
    2. Jika Anda melakukan commit pada contoh file YAML, jalankan:

      $ ka get svc/hello
      

      Anda akan melihat layanan yang dibuat dari contoh YAML.

    3. Jalankan perintah berikut:

      ka describe svc/hello
      

      Anda 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]
      
    4. Tambahkan anotasi baru ke layanan:

      $ ka annotate --overwrite svc/hello google.com/test=aaa
      

      Jalankan describe sekali lagi, konfirmasi bahwa anotasi ada, dan periksa apakah Config Sync tidak menimpanya.

    5. Mengganti anotasi yang dikelola IaC:

      $ ka annotate --overwrite svc/hello google.com/annotation-in-iac=value-from-kubectl
      

      Anda 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:

  1. Login ke GitLab sebagai Admin GitLab atau Admin grup Distributed Cloud di GitLab.

  2. Buka grup Distributed Cloud di GitLab atau https://iac.GDC_URL/gdch.

  3. Klik Lihat grup di Area admin di https://iac.GDC_URL/admin/groups/gdch.

  4. 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.