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 migrasi 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 Flux v1 menggunakan GitOps pada kluster Kubernetes dengan dukungan 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
Akun Azure dengan langganan aktif. Buat akun secara gratis.
Kluster terhubung Kube yang didukung Azure Arc yang sudah ada.
- Jika Anda belum menyambungkan kluster, baca Mulai cepat menyambungkan kluster Kube yang didukung Azure Arc.
Pemahaman manfaat dan arsitektur fitur ini. Baca selengkapnya di Artikel Konfigurasi dan GitOps - Kube yang didukung Azure Arc.
k8s-configuration
Instal ekstensi Azure CLI versi >= 1.0.0:az extension add --name k8s-configuration
Tip
Jika
k8s-configuration
ekstensi sudah diinstal, Anda dapat memperbaruinya ke versi terbaru menggunakan perintah berikut -az extension update --name k8s-configuration
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.
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 migrasi 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.
Gunakan Azure CLI
Gunakan ekstensi Azure CLI untuk k8s-configuration
menautkan klaster yang tersambung ke contoh repositori Git.
Beri nama konfigurasi ini
cluster-config
.Instruksikan agen untuk menyebarkan operator di
cluster-config
namespace.Berikan izin
cluster-admin
kepada operator.az k8s-configuration flux 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 dalam --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 debug.
{
"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:
- Azure Arc
config-agent
memantau Azure Resource Manager untuk konfigurasi baru atau yang diperbarui (Microsoft.KubernetesConfiguration/sourceControlConfigurations
) dan memperhatikan konfigurasiPending
yang baru. config-agent
membaca properti konfigurasi dan membuat namespace tujuan.- Azure Arc
controller-manager
membuat akun layanan Kubernetes dan memetakannya ke ClusterRoleBinding atau RoleBinding untuk mendapatkan izin (cakupancluster
ataunamespace
) yang sesuai. Kemudian Azure Arc akan menyebarkan instansflux
. - Jika menggunakan opsi SSH dengan kunci yang dihasilkan Flux,
flux
akan menghasilkan kunci SSH dan mencatat kunci umum. - 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.
- Di portal Microsoft Azure, buka klaster yang tersambung dengan portal Azure.
- Di halaman sumber daya, pilih "GitOps" dan lihat daftar konfigurasi untuk klaster ini.
- Pilih konfigurasi yang menggunakan repositori Git privat.
- 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):
- Buka GitHub dan klik ikon profil Anda yag ada di sudut kanan atas halaman.
- Klik Pengaturan.
- Klik tombol SSH dan GPG.
- Klik tombol SSH Baru.
- Beri Judul.
- Tempelkan kunci umum tanpa tanda kutip di sekitarnya.
- Klik Tambahkan kunci SSH.
Opsi 2: Tambahkan kunci umum sebagai kunci penyebaran ke repositori Git (berlaku hanya untuk repositori ini):
- Buka GitHub, lalu buka repositori Anda.
- Klik Pengaturan.
- Klik tombol Sebarkan.
- Klik tombol Tambahkan penyebaran.
- Beri Judul.
- Centang Izinkan akses tulis.
- Tempelkan kunci umum tanpa tanda kutip di sekitarnya.
- Klik tombol Tambahkan.
Menambahkan kunci umum menggunakan repositori Azure DevOps
Gunakan langkah-langkah berikut untuk menambahkan kunci ke tombol SSH Anda:
- Pada Pengaturan Pengguna di kanan atas (di samping gambar profil), klik tombol umum SSH.
- Pilih + Kunci Baru.
- Beri nama.
- Tempelkan kunci umum tanpa tanda kutip di sekitarnya.
- 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.
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 migrasi 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.
Langkah berikutnya
Lanjutkan ke tutorial berikutnya untuk mempelajari cara mengimplementasikan CI/CD dengan GitOps.