Tutorial: Menyebarkan konfigurasi menggunakan GitOps pada kluster Kube yang didukung Azure Arc

Penting

Tutorial ini untuk GitOps dengan Flux v1. GitOps dengan Flux v2 sekarang tersedia untuk kluster Kubernetes dan Azure Kubernetes Service (AKS) dengan dukungan Azure Arc; buka tutorial untuk GitOps dengan Flux v2. Sebaiknya migrasikan ke Flux v2 sesegera mungkin.

Dukungan untuk sumber daya konfigurasi kluster berbasis Flux v1 yang dibuat sebelum 1 Januari 2024 akan berakhir pada 24 Mei 2025. Mulai 1 Januari 2024, Anda tidak akan dapat membuat sumber daya konfigurasi kluster berbasis Flux v1 baru.

Dalam tutorial ini, Anda akan menerapkan konfigurasi menggunakan GitOps pada kluster Kube yang didukung Azure Arc. Anda akan mempelajari cara:

  • Membuat konfigurasi pada kluster Kube yang didukung Azure Arc menggunakan repositori Git contoh.
  • Memvalidasikan konfigurasi yang berhasil dibuat.
  • Menerapkan konfigurasi dari repositori Git privati.
  • Memvalidasikan konfigurasi Kubernetes.

Prasyarat

Membuat profil konfigurasi

Contoh repositori yang digunakan dalam artikel ini disusun di sekitar persona operator klaster. Manifes dalam repositori ini menyediakan beberapa ruang nama, menyebarkan beban kerja, dan menyediakan beberapa konfigurasi khusus tim. Menggunakan repositori ini beserta GitOps akan membuat sumber daya berikut di klaster Anda:

  • Namespace: cluster-config, team-a, team-b
  • Penyebaran: arc-k8s-demo
  • ConfigMap: team-a/endpoints

Jajak pendapat config-agent Azure untuk konfigurasi baru atau yang telah diperbarui. Tugas ini akan memakan waktu hingga 5 menit.

Jika Anda menghubungkan repositori privat dengan konfigurasi, selesaikan langkah-langkah di bawah ini dalam Menerapkan konfigurasi dari repositori Git privat.

Menggunakan Azure CLI

Gunakan ekstensi Azure CLI untuk k8s-configuration menautkan klaster yang tersambung ke contoh repositori Git.

  1. Beri nama konfigurasi ini cluster-config .

  2. Instruksikan agen untuk menyebarkan operator di cluster-config namespace.

  3. Berikan izin cluster-admin kepada operator.

    az k8s-configuration create --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --operator-instance-name cluster-config --operator-namespace cluster-config --repository-url https://github.com/Azure/arc-k8s-demo --scope cluster --cluster-type connectedClusters
    
    {
      "complianceStatus": {
      "complianceState": "Pending",
      "lastConfigApplied": "0001-01-01T00:00:00",
      "message": "{\"OperatorMessage\":null,\"ClusterState\":null}",
      "messageLevel": "3"
      },
      "configurationProtectedSettings": {},
      "enableHelmOperator": false,
      "helmOperatorProperties": null,
      "id": "/subscriptions/<sub id>/resourceGroups/<group name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
      "name": "cluster-config",
      "operatorInstanceName": "cluster-config",
      "operatorNamespace": "cluster-config",
      "operatorParams": "--git-readonly",
      "operatorScope": "cluster",
      "operatorType": "Flux",
      "provisioningState": "Succeeded",
      "repositoryPublicKey": "",
      "repositoryUrl": "https://github.com/Azure/arc-k8s-demo",
      "resourceGroup": "MyRG",
      "sshKnownHostsContents": "",
      "systemData": {
        "createdAt": "2020-11-24T21:22:01.542801+00:00",
        "createdBy": null,
        "createdByType": null,
        "lastModifiedAt": "2020-11-24T21:22:01.542801+00:00",
        "lastModifiedBy": null,
        "lastModifiedByType": null
      },
      "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
    }
    

Gunakan repositori Git publik

Parameter Format
--repository-url http[s]://server/repo[.git]

Gunakan repositori Git privat dengan tombol yang dibuat oleh Flux dan SSH

Tambahkan kunci umum yang dihasilkan oleh Flux ke akun pengguna di penyedia layanan Git Anda. Jika kunci ditambahkan ke repositor, bukan ke akun pengguna, gunakan git@ sebagai pengganti user@ di URL.

Beralih ke bagian Menerapkan konfigurasi dari repositori Git privat untuk detail selengkapnya.

Parameter Format Catatan
--repository-url ssh://user@server/repo[.git] atau user@server:repo[.git] git@ dapat menggantikan user@

Gunakan repositori Git privat dengan SSH dan kunci yang disediakan pengguna

Berikan kunci privat Anda sendiri secara langsung atau dalam file. Kunci harus dalam format PEM dan diakhiri dengan newline (\n).

Tambahkan kunci umu terhubung ke akun pengguna di penyedia layanan Git Anda. Jika kunci ditambahkan ke repositor, bukan ke akun pengguna, gunakan git@ sebagai pengganti user@.

Beralih ke bagian Menerapkan konfigurasi dari repositori Git privat untuk detail selengkapnya.

Parameter Format Catatan
--repository-url ssh://user@server/repo[.git] atau user@server:repo[.git] git@ dapat menggantikan user@
--ssh-private-key kunci base64-encoded dalam format PEM Menyediakan kunci secara langsung
--ssh-private-key-file jalur lengkap ke file lokal Menyediakan jalur lengkap ke file lokal yang memuat kunci format PEM

Menggunakan host Git privat dengan SSH dan host yang disediakan pengguna

Operator Flux menyimpan daftar host Git umum dalam file host yang dikenalnya untuk mengautentikasi repositori Git sebelum membuat koneksi SSH. Jika menggunakan repositori Git yang tidak biasa atau host Git Anda sendiri, Anda dapat menyediakan kunci host sehingga Flux dapat mengidentifikasi repo Anda.

Sama seperti kunci privat, Anda dapat menyediakan konten known_hosts secara langsung atau di dalam file. Saat menyediakan konten Anda sendiri, gunakan spesifikasi format konten known_hosts, bersama dengan salah satu skenario kunci SSH di atas.

Parameter Format Catatan
--repository-url ssh://user@server/repo[.git] atau user@server:repo[.git] git@ dapat menggantikan user@
--ssh-known-hosts base64-encoded Menyediakan konten host yang diketahui secara langsung
--ssh-known-hosts-file jalur lengkap ke file lokal Menyediakan konten host yang diketahui dalam file lokal

Menggunakan repositori Git privat dengan HTTPS

Parameter Format Catatan
--repository-url https://server/repo [.git] HTTPS dengan auth dasar
--https-user mentah atau base64-encoded Nama pengguna HTTPS
--https-key mentah atau base64-encoded Token atau kata sandi akses privat HTTPS

Catatan

  • Bagan operator helm versi 1.2.0+ mendukung https Helm rilis auth privat.
  • Rilis HTTPS Helm tidak didukung untuk klaster yang dikelola AKS.
  • Jika memerlukan Flux untuk mengakses repositori Git melalui proxy Anda, Anda harus memperbarui agen Azure Arc dengan pengaturan proxy. Untuk informasi selengkapnya, lihat Menyambungkan menggunakan server proksi keluar.

Parameter Tambahan

Sesuaikan konfigurasi dengan parameter opsional berikut:

Parameter Deskripsi
--enable-helm-operator Beralih untuk mengaktifkan dukungan untuk penyebaran bagan Helm.
--helm-operator-params Nilai bagan untuk operator Helm (jika diaktifkan). Contohnya,--set helm.versions=v3.
--helm-operator-chart-version Versi bagan untuk operator Helm (jika diaktifkan). Gunakan versi 1.2.0+. Default 1.2.0.
--operator-namespace Nama untuk namespace operator. Default: 'default'. Maksimum: 23 karakter.
--operator-params Parameter untuk operator. Harus diberikan dalam satu tanda kuotasi. Misalnya, --operator-params='--git-readonly --sync-garbage-collection --git-branch=main'

Opsi yang didukung di --operator-params:

Opsi Deskripsi
--git-branch Cabang repositori Git yang digunakan untuk manifes Kubernetes. Default-nya adalah 'master'. Repositori yang lebih baru memiliki cabang akar bernama main, dalam hal ini Anda harus mengatur --git-branch=main .
--git-path Jalur relatif dalam repositori Git untuk Flux untuk menemukan manifes Kubernetes.
--git-readonly Repositori Git akan dianggap baca-saja. Fluks tidak akan mencoba menulis untuk itu.
--manifest-generation Jika diaktifkan, Flux akan mencari .flux.yaml dan menjalankan Kustomize atau generator manifes lainnya.
--git-poll-interval Periode polling repositori Git untuk penerapan baru. Defaultnya adalah 5m (5 menit).
--sync-garbage-collection Jika diaktifkan, Flux akan menghapus sumber daya yang dibuatnya, tetapi tidak lagi ada di Git.
--git-label Label untuk melacak kemajuan sinkronisasi. Digunakan untuk menandai cabang Git. Defaultnya adalah flux-sync.
--git-user Nama pengguna untuk penerapan Git.
--git-email Email yang digunakan untuk penerapan Git.

Jika Anda tidak ingin Flux menulis ke repositori dan --git-user atau --git-email tidak diatur, --git-readonly akan diatur secara otomatis.

Untuk informasi selengkapnya, lihat dokumentasi Flux.

Catatan

Flux default untuk disinkronkan dari cabang master git repo. Namun, repositori git yang lebih baru memiliki cabang akar bernama main dan dalam hal ini Anda harus mengatur --git-branch=main --operator-params.

Tip

Anda dapat membuat konfigurasi di portal Microsoft Azure di tab GitOps dari sumber daya Kube yang didukung Azure Arc.

Memvalidasi konfigurasi

Validasikan konfigurasi yang berhasil dibuat.

az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

Sumber daya konfigurasi akan diperbarui dengan status kepatuhan, pesan, dan informasi penelusuran kesalahan.

{
  "complianceStatus": {
    "complianceState": "Installed",
    "lastConfigApplied": "2020-12-10T18:26:52.801000+00:00",
    "message": "...",
    "messageLevel": "Information"
  },
  "configurationProtectedSettings": {},
  "enableHelmOperator": false,
  "helmOperatorProperties": {
    "chartValues": "",
    "chartVersion": ""
  },
  "id": "/subscriptions/<sub id>/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
  "name": "cluster-config",
  "operatorInstanceName": "cluster-config",
  "operatorNamespace": "cluster-config",
  "operatorParams": "--git-readonly",
  "operatorScope": "cluster",
  "operatorType": "Flux",
  "provisioningState": "Succeeded",
  "repositoryPublicKey": "...",
  "repositoryUrl": "git://github.com/Azure/arc-k8s-demo.git",
  "resourceGroup": "AzureArcTest",
  "sshKnownHostsContents": null,
  "systemData": {
    "createdAt": "2020-12-01T03:58:56.175674+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2020-12-10T18:30:56.881219+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
},
  "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
}

Beberapa hal akan terjadi saat konfigurasi dibuat atau diperbarui:

  1. Azure Arc config-agent memantau Azure Resource Manager untuk konfigurasi baru atau yang diperbarui (Microsoft.KubernetesConfiguration/sourceControlConfigurations) dan memperhatikan konfigurasi Pending yang baru.
  2. config-agent membaca properti konfigurasi dan membuat namespace tujuan.
  3. Azure Arc controller-manager membuat akun layanan Kubernetes dan memetakannya ke ClusterRoleBinding atau RoleBinding untuk mendapatkan izin (cakupan cluster atau namespace) yang sesuai. Kemudian Azure Arc akan menyebarkan instans flux .
  4. Jika menggunakan opsi SSH dengan kunci yang dihasilkan Flux, flux akan menghasilkan kunci SSH dan mencatat kunci umum.
  5. Status laporan config-agent kembali ke sumber daya konfigurasi di Azure.

Saat proses penyediaan berlangsung, sumber daya konfigurasi akan bergerak melalui beberapa perubahan status. Pantau kemajuan melalui perintah az k8s-configuration show ... di atas:

Perubahan tahapan Deskripsi
complianceStatus->Pending Mewakili negara bagian awal dan dalam proses.
complianceStatus ->Installed config-agent berhasil mengonfigurasi klaster dan menyebarkan flux tanpa kesalahan.
complianceStatus ->Failed config-agent mengalami kesalahan saat menyebarkan flux. Detail disediakan dalam bodi respons complianceStatus.message.

Menerapkan konfigurasi dari repositori Git privat

Jika menggunakan repositori Git privat, Anda harus mengonfigurasi kunci umum SSH di repositori Anda. Baik Anda menyediakan maupun Flux menghasilkan kunci umum SSH. Anda dapat mengonfigurasi kunci umum baik pada repositori Git tertentu maupun pada pengguna Git yang memiliki akses ke repositori.

Mendapatkan kunci umum Anda sendiri

Jika sudah menghasilkan kunci SSH sendiri, artinya Anda sudah memiliki kunci privat dan umum.

Mendapatkan kunci umum menggunakan Azure CLI

Gunakan langkah-langkah berikut ini di Azure CLI selama Flux menghasilkan kunci.

az k8s-configuration show --resource-group <resource group name> --cluster-name <connected cluster name> --name <configuration name> --cluster-type connectedClusters --query 'repositoryPublicKey' 
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAREDACTED"

Dapatkan kunci dari portal Microsoft Azure

Baca langkah-langkah berikut ini di portal Azure selama Flux menghasilkan kunci.

  1. Di portal Microsoft Azure, buka klaster yang tersambung dengan portal Azure.
  2. Di halaman sumber daya, pilih "GitOps" dan lihat daftar konfigurasi untuk klaster ini.
  3. Pilih konfigurasi yang menggunakan repositori Git privat.
  4. Di jendela konteks yang terbuka, di bagian bawah jendela, salin Kunci umum repositori.

Tambahkan kunci umum menggunakan GitHub

Gunakan salah satu opsi berikut ini:

  • Opsi 1: Tambahkan kunci umum ke akun pengguna Anda (berlaku untuk semua repositori di akun Anda):

    1. Buka GitHub dan klik ikon profil Anda yag ada di sudut kanan atas halaman.
    2. Klik Pengaturan.
    3. Klik tombol SSH dan GPG.
    4. Klik tombol SSH Baru.
    5. Beri Judul.
    6. Tempelkan kunci umum tanpa tanda kutip di sekitarnya.
    7. Klik Tambahkan kunci SSH.
  • Opsi 2: Tambahkan kunci umum sebagai kunci penyebaran ke repositori Git (berlaku khusus repositori ini):

    1. Buka GitHub, lalu buka repositori Anda.
    2. Klik Pengaturan.
    3. Klik tombol Sebarkan.
    4. Klik tombol Tambahkan penyebaran.
    5. Beri Judul.
    6. Centang Izinkan akses tulis.
    7. Tempelkan kunci umum tanpa tanda kutip di sekitarnya.
    8. Klik tombol Tambahkan.

Menambahkan kunci umum menggunakan repositori Azure DevOps

Gunakan langkah-langkah berikut untuk menambahkan kunci ke tombol SSH Anda:

  1. Pada Pengaturan Pengguna di kanan atas (di samping gambar profil), klik tombol umum SSH.
  2. Pilih + Kunci Baru.
  3. Beri nama.
  4. Tempelkan kunci umum tanpa tanda kutip di sekitarnya.
  5. Klik Tambahkan.

Memvalidasikan konfigurasi Kubernetes

Setelah config-agent menginstal flux instans, sumber daya yang disimpan di repositori Git harus mulai mengalir ke klaster. Periksa untuk memastikan namespace, penyebaran, dan sumber daya telah dibuat dengan perintah berikut:

kubectl get ns --show-labels
NAME              STATUS   AGE    LABELS
azure-arc         Active   24h    <none>
cluster-config    Active   177m   <none>
default           Active   29h    <none>
itops             Active   177m   fluxcd.io/sync-gc-mark=sha256.9oYk8yEsRwWkR09n8eJCRNafckASgghAsUWgXWEQ9es,name=itops
kube-node-lease   Active   29h    <none>
kube-public       Active   29h    <none>
kube-system       Active   29h    <none>
team-a            Active   177m   fluxcd.io/sync-gc-mark=sha256.CS5boSi8kg_vyxfAeu7Das5harSy1i0gc2fodD7YDqA,name=team-a
team-b            Active   177m   fluxcd.io/sync-gc-mark=sha256.vF36thDIFnDDI2VEttBp5jgdxvEuaLmm7yT_cuA2UEw,name=team-b

Kita dapat melihat jika namespace team-a, team-b, itops, dan cluster-config telah dibuat.

Operator flux telah disebarkan ke namespace cluster-config seperti yang diarahkan oleh sumber daya konfigurasi:

kubectl -n cluster-config get deploy  -o wide
NAME             READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                         SELECTOR
cluster-config   1/1     1            1           3h    flux         docker.io/fluxcd/flux:1.16.0   instanceName=cluster-config,name=flux
memcached        1/1     1            1           3h    memcached    memcached:1.5.15               name=memcached

Menjelajahi lebih lanjut

Anda dapat menjelajahi sumber daya lain yang digunakan sebagai bagian dari repositori konfigurasi menggunakan:

kubectl -n team-a get cm -o yaml
kubectl -n itops get all

Membersihkan sumber daya

Hapus konfigurasi menggunakan portal Azure CLI atau Azure. Setelah Anda menjalankan perintah hapus, sumber daya konfigurasi di Azure akan segera dihapus. Penghapusan penuh objek terkait dari klaster hanya diberi waktu 10 menit. Jika konfigurasi dalam keadaan gagal saat dihapus, penghapusan penuh objek terkait dapat memakan waktu hingga satu jam.

Saat konfigurasi dengan lingkup namespace dihapus, namespace tidak akan dihapus oleh Azure Arc untuk menghindari pemutusan beban kerja yang ada. Jika diperlukan, Anda dapat menghapus namespace ini secara manual menggunakan kubectl .

az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

Catatan

Setiap perubahan pada klaster yang merupakan hasil penyebaran dari repositori Git terlacak tidak dihapus saat konfigurasi dihapus.

Langkah berikutnya

Lanjutkan ke tutorial berikutnya untuk mempelajari cara mengimplementasikan CI/CD dengan GitOps.