Topik ini menjawab pertanyaan umum (FAQ) tentang penggunaan GitOps.
-
Bagaimana cara menghubungkan GitOps ke repositori Git privat?
-
Apa yang harus saya lakukan jika repo-server Argo CD mengembalikan error "Out of diskspace"?
-
Bagaimana mencegah Aplikasi GitOps melacak resource non-aplikasi?
-
Bagaimana cara me-restart komponen Argo CD setelah mengubah ConfigMap-nya?
-
Mengapa perubahan direktori repositori Git tidak tercermin oleh generator Git ApplicationSet?
Menghubungkan ke repositori Git privat
Karena alasan keamanan, repositori Git privat biasanya tidak dapat diakses dari internet publik. Untuk menghubungkan ACK One GitOps ke repositori Git privat, Anda harus menetapkan konektivitas jaringan terlebih dahulu, lalu melakukan konfigurasi yang diperlukan.
Langkah 1: Konfigurasikan resolusi nama domain
Langkah-langkah berikut menggunakan git.abc.cn sebagai contoh nama domain untuk repositori Git.
-
Hubungkan jaringan on-premises Anda ke jaringan VPC ACK One. Untuk informasi lebih lanjut, lihat Menghubungkan IDC on-premises ke VPC.
-
Gunakan PrivateZone untuk resolusi nama domain dalam VPC.
-
Login ke Konsol DNS Alibaba Cloud. Di halaman Private Zone, klik tab User Defined Zones, lalu klik Add Zone. Di kotak dialog, konfigurasikan parameter berikut dan klik OK.
-
Authoritative Zone: abc.cn (menggunakan domain repositori Git
git.abc.cnsebagai contoh) -
Recursive Resolution Proxy for Subdomain Names: Enable
-
: Pilih VPC yang terikat dengan ACK One.
-
-
Dalam daftar nama domain, temukan PrivateZone yang baru saja Anda buat. Di kolom Actions, klik Settings untuk membuka halaman Settings.
-
Di halaman Settings, klik Add Record. Di kotak dialog, konfigurasikan parameter berikut dan klik OK.
-
Record Type: A
-
Hostname: git (menggunakan
git.abc.cnsebagai contoh) -
Record Value: Masukkan alamat IP repositori Git internal.
-
-
Langkah 2: Menghubungkan ke repositori Git
Setelah Anda mengonfigurasi resolusi nama domain, ACK One GitOps dapat mengakses repositori Git privat. Anda kemudian dapat menghubungkan ke repositori Git tersebut dari konsol GitOps atau command-line interface (CLI) untuk menerapkan aplikasi. Untuk informasi lebih lanjut, lihat Private Repositories.
Pengelompokan aplikasi di konsol
Saat Anda memiliki banyak aplikasi, mengelompokkannya dapat meningkatkan kegunaan. Di panel navigasi kiri konsol GitOps, Anda dapat:
-
Filter berdasarkan Favorites Only, SYNC STATUS, atau HEALTH STATUS.
-
Mengelompokkan berdasarkan LABELS, PROJECTS, CLUSTERS, NAMESPACES, atau AUTO SYNC.
Mengontrol penerapan aplikasi
Anda sering kali perlu mengontrol penerapan aplikasi, terutama dalam pipeline CI/CD otomatis. Anda dapat menggunakan metode berikut:
-
Gunakan aplikasi dalam mode
ManualSync. Setelah kode didorong, insinyur O&M meninjau dan memverifikasi aplikasi tersebut. Jika memenuhi persyaratan, mereka dapat secara manual mengklikSyncuntuk menyinkronkan aplikasi ke kluster tujuan. -
Perbarui secara manual versi gambar di repositori deployment. Jika Anda tidak memantau repositori gambar secara otomatis untuk perubahan, insinyur O&M harus memverifikasi gambar baru tersebut. Setelah diverifikasi, mereka dapat memperbarui secara manual versi gambar di repositori deployment aplikasi, yang akan memicu sinkronisasi aplikasi di Argo CD.
-
Tetapkan mekanisme tinjauan kode untuk repositori kode bisnis dalam pipeline CI/CD otomatis Anda. Setelah insinyur O&M menyetujui tinjauan kode dan menggabungkan kode tersebut, pipeline CI secara otomatis membangun dan mendorong gambar. Argo CD kemudian secara otomatis mendeteksi perubahan gambar dan menerapkannya ke lingkungan yang dikonfigurasi dengan
AutoSync. Anda juga dapat menerapkan secara manual ke lingkungan yang dikonfigurasi untukManualSync.
Apa yang dapat saya lakukan jika repo-server Argo CD melaporkan error Out of diskspace?
Gejala
Saat Anda memeriksa log dengan menjalankan perintah kubectl -nargocd logs xxxx, repo-server mengembalikan pesan error berikut:
'git checkout --force xxx' failed exit status 128: error: unable to write file templates/deployment.yaml\nfatal: sha1 file '/tmp/_argocd-repo/xxx/.git/index.lock' write error. Out of diskspace...
Solusi
Masalah ini terjadi karena ruang disk yang tidak mencukupi menyebabkan kegagalan penulisan ke file .git/index.lock. Untuk mengatasinya, tingkatkan penyimpanan sementara untuk Pod komponen Argo CD ACK One GitOps. Komponen-komponen ini berjalan di Elastic Container Instance (ECI) dan memiliki penyimpanan sementara default sebesar 30 GiB. Ikuti langkah-langkah berikut untuk menambah kapasitas penyimpanan. Untuk informasi penagihan, lihat Penagihan ruang penyimpanan sementara.
-
Dapatkan KubeConfig untuk instans fleet dari Konsol ACK One dan hubungkan ke instans fleet menggunakan kubectl. Untuk informasi lebih lanjut, lihat Mendapatkan KubeConfig kluster dan menggunakan kubectl untuk menghubungkan ke kluster.
-
Di Templat Pod Deployment terkait, tambahkan anotasi
k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi"ke Pod. Anda dapat menyesuaikan jumlah penyimpanan sementara.-
Jika GitOps berada dalam mode default, tambahkan anotasi ke Deployment argocd-server.
kubectl edit deployment -nargocd argocd-server -
Jika GitOps berada dalam Mode Ketersediaan Tinggi, tambahkan anotasi ke Deployment argocd-dex-imageupdate-repo-server.
kubectl edit deployment -nargocd argocd-dex-imageupdate-repo-server
apiVersion: apps/v1 kind: Deployment metadata: ... ... spec: template: metadata: annotations: # Ini menambahkan 20 GiB ke penyimpanan default 30 GiB, sehingga total menjadi 50 GiB. Jumlah tambahan penyimpanan sementara dapat disesuaikan. k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" ... ... ... -
Mencegah pelacakan resource non-aplikasi
Informasi Latar Belakang
Argo CD menggunakan label app.kubernetes.io/instance untuk melacak resource Kubernetes. Jika suatu resource memiliki label ini dan nilainya cocok dengan nama Aplikasi, Argo CD akan melacaknya. Hal ini dapat menyebabkan status Aplikasi tetap OutOfSync dan berpotensi menghapus resource non-aplikasi secara tidak disengaja. Untuk mencegah perilaku ini, gunakan salah satu solusi berikut.
Solusi
-
Solusi 1: Di ConfigMap
argocd/argocd-cminstans fleet, tambahkanresource.exclusionsuntuk mengabaikan resource non-aplikasi yang dilacak. Konfigurasi berikut mengabaikan resourceCiliumIdentity.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
...
resource.exclusions: |
- apiGroups:
- cilium.io
kinds:
- CiliumIdentity
clusters:
- "*"
-
Solusi 2: Di ConfigMap
argocd/argocd-cminstans fleet, tambahkan label pelacakan kustomapplication.instanceLabelKey: argocd.argoproj.io/instance. Setelah perubahan ini, resource yang dikelola oleh Argo CD akan menggunakan labelargocd.argoproj.io/instance. Hal ini mencegah Argo CD melacak resource lain yang hanya memiliki labelapp.kubernetes.io/instance. Setelah menerapkan konfigurasi ini, Aplikasi yang sudah ada mungkin menunjukkan statusOutOfSynchingga disinkronkan ulang.apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm labels: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd data: ... application.instanceLabelKey: argocd.argoproj.io/instance
Me-restart komponen setelah perubahan ConfigMap
Di Argo CD, beberapa perubahan ConfigMap hanya berlaku setelah komponen Argo CD terkait di-restart.
Tabel berikut mencantumkan ConfigMap yang umum dimodifikasi.
|
Parameter |
Deskripsi |
Apakah perlu restart? |
|
argocd-cm |
Digunakan untuk mengonfigurasi pengaturan seperti OpenID Connect (OIDC) kustom, |
Restart biasanya tidak diperlukan. Namun, jika konfigurasi tidak berlaku, restart argocd-server. |
|
argocd-cmd-params-cm |
Digunakan untuk mengonfigurasi variabel lingkungan untuk komponen Argo CD. |
Restart komponen terkait atau argocd-server diperlukan. |
|
argocd-rbac-cm |
Digunakan untuk mengonfigurasi izin Role-Based Access Control (RBAC) Argo CD. |
Biasanya tidak perlu restart. |
|
argocd-image-updater-config |
Digunakan untuk mengelola konfigurasi image-updater. |
Restart komponen terkait atau argocd-server diperlukan. |
|
argocd-notifications-cm |
Digunakan untuk mengelola konfigurasi argocd-notification-controller. |
Restart komponen terkait atau argocd-server diperlukan. |
ACK One GitOps menyediakan dua mode operasional:
-
Dalam mode default, semua komponen berjalan dalam satu Deployment. Untuk menerapkan perubahan, restart Deployment argocd-server.
-
Dalam Mode Ketersediaan Tinggi, komponen dibagi menjadi beberapa Deployment. Anda dapat me-restart komponen individual sesuai kebutuhan.
-
argocd-server
-
argocd-application-controller: berisi application-controller dan applicationset-controller.
-
argocd-repo-server
-
argocd-dex-imageupdate-notification: berisi image-updater, notification-controller, dan dex.
-
argocd-redis
-
Ikuti langkah-langkah berikut untuk me-restart komponen:
-
Di halaman Multi-cluster GitOps, temukan bagian Argo CD Component dalam panel lipat GitOps.
-
Klik Restart di sebelah Argo CD Component.
-
Di kotak dialog, pilih komponen yang akan di-restart dari daftar drop-down Select Application to Restart, misalnya argocd-server, lalu klik OK.
Generator Git tidak mencerminkan perubahan direktori
Gejala
Saat menggunakan generator Git dengan ApplicationSet Argo CD, Anda mungkin menemukan bahwa resource Application baru gagal dibuat setelah direktori dependen di repositori Git ditambahkan atau diganti namanya. Masalah ini dapat terjadi meskipun Anda langsung memperbarui resource ApplicationSet agar mengarah ke path direktori baru.
Solusi
Masalah ini terjadi karena Argo CD tidak secara otomatis merefresh cache-nya saat path direktori berubah. Untuk mengatasinya, paksa refresh dengan menambahkan anotasi argocd.argoproj.io/application-set-refresh="true" ke ApplicationSet yang berisi generator Git. Lihat contoh berikut:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
···
annotations:
···
argocd.argoproj.io/application-set-refresh: "true"
spec:
···
generators:
- git:
···
template:
···