Bantu tingkatkan halaman ini
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memecahkan masalah dengan kemampuan Argo CD
catatan
Kemampuan EKS sepenuhnya dikelola dan dijalankan di luar cluster Anda. Anda tidak memiliki akses langsung ke ruang nama pengontrol. Anda dapat mengonfigurasi pengiriman log pengontrol untuk visibilitas ke perilaku pengontrol. Lihat Akses log pengontrol Kemampuan EKS. Pemecahan masalah berfokus pada kesehatan kemampuan, status aplikasi, dan konfigurasi.
Kemampuan aktif tetapi aplikasi tidak disinkronkan
Jika kemampuan Argo CD Anda menunjukkan ACTIVE status tetapi aplikasi tidak disinkronkan, periksa kesehatan kemampuan dan status aplikasi.
Periksa kesehatan kemampuan:
Anda dapat melihat masalah kesehatan dan status kemampuan di konsol EKS atau menggunakan AWS CLI.
Konsol:
-
Buka konsol Amazon EKS di https://console.aws.amazon.com/eks/home #/cluster.
-
Pilih nama cluster Anda.
-
Pilih tab Observability.
-
Pilih Monitor cluster.
-
Pilih tab Kemampuan untuk melihat kesehatan dan status untuk semua kemampuan.
AWS CLI:
# View capability status and health aws eks describe-capability \ --regionregion-code\ --cluster-namemy-cluster\ --capability-namemy-argocd# Look for issues in the health section
Penyebab umum:
-
Repositori tidak dikonfigurasi: Repositori Git tidak ditambahkan ke Argo CD
-
Otentikasi gagal: kunci SSH, token, atau CodeCommit kredensyal tidak valid
-
Aplikasi tidak dibuat: Tidak ada sumber daya Aplikasi di cluster
-
Kebijakan sinkronisasi: Sinkronisasi manual diperlukan (sinkronisasi otomatis tidak diaktifkan)
-
Izin IAM: Izin tidak ada untuk CodeCommit atau Secrets Manager
Periksa status aplikasi:
# List applications kubectl get application -n argocd # View sync status kubectl get applicationmy-app-n argocd -o jsonpath='{.status.sync.status}' # View application health kubectl get applicationmy-app-n argocd -o jsonpath='{.status.health}'
Periksa kondisi aplikasi:
# Describe application to see detailed status kubectl describe applicationmy-app-n argocd # View application health kubectl get applicationmy-app-n argocd -o jsonpath='{.status.health}'
Aplikasi terjebak dalam status “Kemajuan”
Jika aplikasi ditampilkan Progressing tetapi tidak pernah mencapaiHealthy, periksa status sumber daya aplikasi dan peristiwa.
Periksa kesehatan sumber daya:
# View application resources kubectl get applicationmy-app-n argocd -o jsonpath='{.status.resources}' # Check for unhealthy resources kubectl describe applicationmy-app-n argocd | grep -A 10 "Health Status"
Penyebab umum:
-
Deployment not ready: Pod gagal memulai atau probe kesiapan gagal
-
Ketergantungan sumber daya: Sumber daya menunggu sumber daya lain siap
-
Kesalahan penarikan gambar: Gambar kontainer tidak dapat diakses
-
Sumber daya tidak mencukupi: Cluster kekurangan CPU atau memori untuk pod
Verifikasi konfigurasi cluster target (untuk pengaturan multi-cluster):
# List registered clusters kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster # View cluster secret details kubectl get secretcluster-secret-name-n argocd -o yaml
Kegagalan otentikasi repositori
Jika Argo CD tidak dapat mengakses repositori Git Anda, verifikasi konfigurasi otentikasi.
Untuk CodeCommit repositori:
Verifikasi Peran Kemampuan IAM memiliki CodeCommit izin:
# View IAM policies aws iam list-attached-role-policies --role-namemy-argocd-capability-roleaws iam list-role-policies --role-namemy-argocd-capability-role# Get specific policy details aws iam get-role-policy --role-namemy-argocd-capability-role--policy-namepolicy-name
Peran tersebut membutuhkan codecommit:GitPull izin untuk repositori.
Untuk repositori Git pribadi:
Verifikasi kredenal repositori dikonfigurasi dengan benar:
# Check repository secret exists kubectl get secret -n argocdrepo-secret-name-o yaml
Pastikan rahasia berisi kredensyal otentikasi yang benar (kunci SSH, token, atau). username/password
Untuk repositori menggunakan Secrets Manager:
# Verify IAM Capability Role has Secrets Manager permissions aws iam list-attached-role-policies --role-namemy-argocd-capability-role# Test secret retrieval aws secretsmanager get-secret-value --secret-idarn:aws:secretsmanager:region-code:111122223333:secret:my-secret
Multi-cluster masalah penyebaran
Jika aplikasi tidak menyebarkan ke cluster jarak jauh, verifikasi registrasi cluster dan konfigurasi akses.
Periksa pendaftaran cluster:
# List registered clusters kubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster # Verify cluster secret format kubectl get secretCLUSTER_SECRET_NAME-n argocd -o yaml
Pastikan server field tersebut berisi ARN klaster EKS, bukan URL API Kubernetes.
Verifikasi Entri Akses kluster target:
Pada cluster target, periksa apakah Peran Kemampuan CD Argo memiliki Entri Akses:
# List access entries (run on target cluster or use AWS CLI) aws eks list-access-entries --cluster-nametarget-cluster# Describe specific access entry aws eks describe-access-entry \ --cluster-nametarget-cluster\ --principal-arnarn:aws:iam::111122223333:role/my-argocd-capability-role
Periksa izin IAM untuk lintas akun:
Untuk penerapan lintas akun, verifikasi Peran Kemampuan CD Argo memiliki Entri Akses pada kluster target. Kemampuan terkelola menggunakan Entri Akses EKS untuk akses lintas akun, bukan asumsi peran IAM.
Untuk informasi lebih lanjut tentang konfigurasi multi-cluster, lihatDaftarkan kluster target.
Peningkatan waktu sinkronisasi aplikasi
Jika aplikasi Anda menyinkronkan tetapi memakan waktu lebih lama dari yang diharapkan, gunakan langkah-langkah diagnostik berikut untuk mengidentifikasi penyebabnya.
Periksa waktu sinkronisasi terakhir
Konfirmasikan penundaan dengan meninjau kapan aplikasi terakhir disinkronkan:
# View last sync time for all applications kubectl get application -n argocd -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.operationState.finishedAt}{"\n"}{end}' # View last sync time for a specific application kubectl get applicationmy-app-n argocd -o jsonpath='{.status.operationState.finishedAt}'
Periksa kondisi aplikasi
Tinjau kondisi aplikasi untuk penundaan antrian rekonsiliasi:
# Check conditions on an application kubectl get applicationmy-app-n argocd -o jsonpath='{.status.conditions}'
Periksa konfigurasi TargetRevision
Aplikasi yang menggunakan cache manifes targetRevision: HEAD tidak valid pada setiap komit ke repositori, yang memperlambat waktu sinkronisasi:
# List applications using HEAD as targetRevision kubectl get application -n argocd -o jsonpath='{range .items[?(@.spec.source.targetRevision=="HEAD")]}{.metadata.name}{"\n"}{end}'
Penyebab umum
-
Tidak ada konfigurasi webhook: Tanpa webhook, Argo CD polling repositori pada interval default 6 menit. Ini menunda deteksi komit baru.
-
TargetRevision disetel ke HEAD: Setiap komit ke repositori membatalkan cache manifes. Argo CD kemudian meregenerasi manifestasi pada setiap rekonsiliasi.
-
Repositori Git besar atau kompleks: Monorepos atau bagan Helm yang kompleks menyebabkan pembuatan manifes yang lambat karena volume file dan templat untuk diproses.
-
Jumlah sumber daya Kubernetes yang tinggi dalam satu aplikasi: Aplikasi yang mengelola banyak sumber daya menyebabkan sinkronisasi cache klaster lambat karena Argo CD harus melacak status setiap sumber daya.
Mitigasi
-
Konfigurasikan webhook Git: Webhook segera memberi tahu Argo CD saat perubahan didorong, melewati interval polling default. Untuk langkah-langkah konfigurasi, lihatPertimbangan Argo CD.
-
Gunakan nama cabang tertentu atau SHA komit: Setel
targetRevisionke nama cabang atau komit SHA alih-alihHEADuntuk mempertahankan cache manifes di antara sinkronisasi. -
Pisahkan monorepos besar: Bagilah repositori besar menjadi repositori yang lebih kecil dan terfokus untuk mengurangi waktu pembuatan manifes.
-
Kurangi sumber daya per aplikasi: Pisahkan aplikasi dengan banyak sumber daya Kubernetes menjadi beberapa aplikasi yang lebih kecil untuk mengurangi waktu sinkronisasi cache cluster.
-
Aktifkan pengiriman log pengontrol: Log pengontrol memberikan visibilitas ke dalam perilaku rekonsiliasi dan pemrosesan antrian. Untuk langkah-langkah konfigurasi, lihatAkses log pengontrol Kemampuan EKS.
Aplikasi berulang kali menyinkronkan atau tidak sinkron
Jika aplikasi Anda menyinkronkan dan kemudian segera berjalanOutOfSync, atau jika tetap macet dalam loop sinkronisasi, penyebabnya biasanya penyimpangan antara apa yang didefinisikan Git dan apa yang ada di cluster. Mulailah dengan diagnostik dasar.
Kumpulkan informasi diagnostik
# View current sync and health status argocd app getmy-app# Show exact fields that differ between Git and live state argocd app diffmy-app# Check whether the app has ever reached a stable state argocd app historymy-app
argocd app diffPerintah adalah titik awal yang paling berguna. Ini menunjukkan dengan tepat bidang mana yang menyebabkan aplikasi tampak tidak sinkron.
Self-managed sertifikat menyebabkan penyimpangan
Pengontrol seperti cert-manager, OPA Gatekeeper, dan KEDA menghasilkan sertifikat saat runtime. Nilai runtime ini tidak ada di Git, jadi Argo CD mendeteksi penyimpangan pada setiap rekonsiliasi.
Gejalanya adalah:
-
Aplikasi disinkronkan, lalu segera ditampilkan
OutOfSync -
Perbedaan menunjukkan perubahan pada bidang webhook atau
caBundlebidang Rahasia TLSdata
Untuk mengatasi hal ini, tambahkan ignoreDifferences bidang yang terpengaruh dan aktifkan RespectIgnoreDifferences di opsi sinkronisasi Anda:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app spec: ignoreDifferences: - group: admissionregistration.k8s.io kind: ValidatingWebhookConfiguration jsonPointers: - /webhooks/0/clientConfig/caBundle - group: "" kind: Secret jsonPointers: - /data/tls.crt - /data/tls.key syncPolicy: syncOptions: - RespectIgnoreDifferences=true
Self-heal mengganggu beban kerja awal yang lambat
Ketika selfHeal diaktifkan, Argo CD menyinkronkan ulang aplikasi ketika mendeteksi drift. Jika beban kerja Anda membutuhkan waktu 30-60 detik untuk memulai, penyembuhan diri akan terpicu sebelum beban kerja menjadi. Healthy Dengan prune diaktifkan, ini mungkin meruntuhkan sumber daya yang dimulai sebagian.
Untuk mengatasi ini, pertama-tama perbaiki penyimpangan yang mendasarinya (lihat skenario sertifikat). Jika drift bukan penyebabnya, pertimbangkan untuk menonaktifkan self-heal untuk beban kerja yang Anda kelola secara eksklusif melalui Git:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app spec: syncPolicy: automated: selfHeal: false prune: false
catatan
Self-heal waktu backoff adalah pengaturan pengontrol tingkat instance. Jika Anda perlu menyesuaikan waktu penyembuhan diri daripada menonaktifkannya, buka kasus AWS Support.
ApplicationSet atau tabrakan kepemilikan sumber daya
Jika dua Applications atau ApplicationSets mengelola resource Kubernetes yang sama, Argo CD menampilkan file. SharedResourceWarning Sumber daya tidak pernah mencapai keadaan stabil. Ini biasanya terjadi ketika nama sumber daya bersama tidak dicakup per lingkungan atau cluster.
Untuk mengatasi ini:
-
Jadikan sumber daya yang diperebutkan unik per pemilik. Tambahkan akhiran lingkungan atau cluster ke nama sumber daya.
-
Saat mengganti nama ApplicationSet, atur
preserveResourcesOnDeletion: trueterlebih dahulu untuk menghindari pembongkaran merusak sumber daya yang ada:
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: my-appset spec: syncPolicy: preserveResourcesOnDeletion: true
Penghapusan macet dari finalizer sumber daya
Jika aplikasi macet dalam Terminating status atau menunjukkan “N objek tersisa untuk dihapus”, resources-finalizer.argocd.argoproj.io finalizer memblokir penghapusan hingga semua sumber daya terkelola dihapus. Sumber daya yang dikelola dengan finalizer sendiri yang tidak dapat diproses memblokir penghapusan tanpa batas waktu.
Untuk mengonfirmasi, daftarkan sumber daya yang memiliki stempel waktu penghapusan tetapi belum dihapus:
kubectl get all -nmy-namespace-o json | \ jq '.items[] | select(.metadata.deletionTimestamp != null) | {name: .metadata.name, kind: .kind, finalizers: .metadata.finalizers}'
Untuk mengatasi ini:
-
Pastikan pengontrol yang memiliki finalizer pemblokiran sehat dan berjalan.
-
Jika pengontrol yang dimiliki sehat tetapi finalizer tidak diproses, hapus finalizer pemblokiran dari sumber daya yang macet:
kubectl patchresource-kindresource-name-nmy-namespace\ --type json -p '[{"op": "remove", "path": "/metadata/finalizers/0"}]'
Sinkronisasi yang gagal tidak mencoba ulang secara otomatis ke revisi yang sama
Setelah sinkronisasi ke revisi tertentu gagal, Argo CD tidak mencoba ulang revisi yang sama secara otomatis. Ini biasanya terjadi karena cacat manifes seperti ComparisonError dari kunci variabel lingkungan duplikat.
Konfirmasikan dengan memeriksa status aplikasi:
argocd app getmy-app# Look for: Operation: Sync Phase: Failed Revision: <sha>
Untuk mengatasi hal ini, perbaiki cacat manifes di repositori Git Anda dan dorong komit baru. Atau, memicu sinkronisasi manual:
argocd app syncmy-app
Monorepo commit churn memicu regenerasi luas
Jika banyak aplikasi melacak HEAD pada repositori yang sama, setiap komit ke repositori itu berubah HEAD untuk semua aplikasi. Ini memicu regenerasi nyata untuk setiap aplikasi, bahkan mereka yang file-nya tidak berubah. Untuk informasi selengkapnya tentang targetRevision dan caching, lihat bagian “Peningkatan waktu sinkronisasi aplikasi” di halaman ini.
Untuk membuat cakupan regenerasi ke hanya file yang digunakan setiap aplikasi, tambahkan manifest-generate-paths anotasi:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app annotations: argocd.argoproj.io/manifest-generate-paths: /apps/my-app spec: source: repoURL: https://github.com/my-org/my-monorepo.git targetRevision: HEAD path: apps/my-app
Dengan anotasi ini, Argo CD hanya meregenerasi manifes ketika file di bawah jalur yang ditentukan berubah. Untuk pustaka bersama yang digunakan di seluruh aplikasi, Anda dapat menentukan beberapa jalur yang dipisahkan oleh titik koma (). ;
Jika memungkinkan, pin targetRevision ke nama cabang atau tag, bukanHEAD.
Kubernetes yang default dan bermutasi pada webhook menyebabkan phantom diffs
Jika aplikasi Anda muncul OutOfSync segera setelah sinkronisasi, periksa diff untuk bidang yang tidak pernah Anda tetapkan (sepertiterminationGracePeriodSeconds,dnsPolicy, atau/spec/replicas). Server API Kubernetes atau webhook yang bermutasi menambahkan bidang-bidang tersebut pada waktu penerapan.
Untuk mengatasi hal ini untuk bidang yang dikelola oleh pengontrol lain (seperti /spec/replicas saat HPA mengelola penskalaan), tambahkan: ignoreDifferences
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app spec: ignoreDifferences: - group: apps kind: Deployment jsonPointers: - /spec/replicas syncPolicy: syncOptions: - RespectIgnoreDifferences=true
Untuk bidang yang ditambahkan oleh Kubernetes yang default atau bermutasi webhook, Anda dapat mengaktifkan diff sisi server pada aplikasi:
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app annotations: argocd.argoproj.io/compare-options: ServerSideDiff=true,IncludeMutationWebhook=true
Server-side diff melakukan dry-run apply per resource, yang meningkatkan beban pada server API Kubernetes. Uji ini pada sejumlah kecil aplikasi sebelum Anda mengaktifkannya secara luas.
High-churn sumber daya milik pengontrol
Beberapa pengontrol menghasilkan sejumlah besar sumber daya berumur pendek atau sering diperbarui. Contohnya termasuk objek simpul Karpenter, identitas Cilium dan objek titik akhir, dan laporan kebijakan Kyverno. Jika sumber daya ini menghasilkan volume acara tontonan yang tinggi dan menyebabkan churn sinkronisasi, Anda dapat mengurangi beban dengan mengecualikan jenis sumber daya tersebut atau memfilter acara tontonan. Perubahan ini memerlukan konfigurasi pengontrol tingkat instance.
Pada kemampuan terkelola, buka kasus AWS Support untuk meminta pengecualian sumber daya atau pemfilteran acara tontonan untuk jenis sumber daya ini.
Praktik terbaik
-
Gunakan perbedaan aplikasi terlebih dahulu: Jalankan
argocd app diffsebagai langkah diagnostik pertama untuk masalah sinkronisasi berulang. Ini menunjukkan penyebab pasti drift. -
Lebih suka ignoreDifferences sempit: Targetkan bidang tertentu pada jenis sumber daya tertentu. Hindari aturan abaikan luas yang dapat menutupi penyimpangan konfigurasi nyata.
-
Pasangkan ignoreDifferences dengan RespectIgnoreDifferences: Selalu tambahkan opsi
RespectIgnoreDifferences=truesinkronisasi. Tanpa itu, sinkronisasi masih menimpa bidang yang diabaikan. -
Jaga agar nama sumber daya tetap unik: Nama sumber daya lingkup per lingkungan dan klaster untuk menghindari tabrakan kepemilikan antara Aplikasi atau ApplicationSets.
-
Berhati-hatilah dengan prune dan SelfHeal: Jangan aktifkan keduanya pada beban kerja yang membutuhkan waktu lama untuk memulai. Penyembuhan diri dapat meruntuhkan sumber daya sebelum menjadi sehat.
-
Sematkan jalur manifes targetRevision dan cakupan: Untuk aplikasi di repositori bersama yang besar, gunakan cabang atau tag sebagai gantinya
HEADdan tambahkan anotasi.manifest-generate-paths
Kapan harus menghubungi AWS Support
Buka kasus AWS Support dalam situasi berikut:
-
Instance-level penyetelan pengontrol tampaknya diperlukan (jumlah prosesor, waktu penyembuhan sendiri, atau pengecualian sumber daya).
-
Repo-server atau kapasitas pengontrol tampaknya tidak mencukupi untuk jumlah aplikasi Anda.
-
Konfigurasi beban kerja, drift, kepemilikan, atau finalizer tidak menjelaskan perilaku.
Sertakan output dari argocd app get dan argocd app diff untuk aplikasi yang terpengaruh dalam kasus dukungan Anda.
Langkah selanjutnya
-
Pertimbangan Argo CD- Pertimbangan Argo CD dan praktik terbaik
-
Bekerja dengan Argo CD- Membuat dan mengelola Aplikasi Argo CD
-
Daftarkan kluster target- Konfigurasikan penerapan multi-cluster
-
Memecahkan Masalah Kemampuan EKS- Panduan pemecahan masalah kemampuan umum