Bu konu, GitOps kullanımıyla ilgili sıkça sorulan soruları (SSS) yanıtlar.
Bir operasyon mühendisi uygulama dağıtımlarını nasıl kontrol edebilir?
Argo CD repo-server "Out of diskspace" hatası döndürürse ne yapmalıyım?
Bir GitOps Uygulamasının uygulama dışı kaynakları izlemesini nasıl önlerim?
ConfigMap'ini değiştirdikten sonra bir Argo CD bileşenini nasıl yeniden başlatırım?
Git deposu dizin değişiklikleri neden ApplicationSet Git oluşturucusu tarafından yansıtılmaz?
Özel bir Git deposuna bağlanma
Güvenlik endişeleri nedeniyle, özel Git depoları genellikle genel internetten erişilebilir değildir. ACK One GitOps'u özel bir Git deposuna bağlamak için önce ağ bağlantısı kurmanız, ardından gerekli yapılandırmayı tamamlamanız gerekir.
1. Adım: Alan adı çözümlemesini yapılandırma
Aşağıdaki adımlarda Git deposu için örnek alan adı olarak git.abc.cn kullanılmıştır.
Kurumsal ağınızı ACK One VPC ağına bağlayın. Daha fazla bilgi için bkz. Kurumsal Veri Merkezini VPC'ye Bağlama.
-
VPC içindeki alan adı çözümlemesi için PrivateZone hizmetini kullanın.
-
Alibaba Cloud DNS konsolu üzerinde oturum açın. Private Zone sayfasında User Defined Zones sekmesine tıklayın ve Add Zone seçeneğine tıklayın. İletişim kutusunda aşağıdaki parametreleri yapılandırın ve OK düğmesine tıklayın.
Authoritative Zone: abc.cn (Git deposu alan adı örneği olarak
git.abc.cnkullanılmıştır)Recursive Resolution Proxy for Subdomain Names: Enable
: ACK One ile ilişkili VPC'yi seçin.
Alan adları listesinde az önce oluşturduğunuz PrivateZone öğesini bulun. Actions sütununda Settings seçeneğine tıklayarak Settings sayfasını açın.
-
Settings sayfasında Add Record seçeneğine tıklayın. İletişim kutusunda aşağıdaki parametreleri yapılandırın ve OK düğmesine tıklayın.
Record Type: A
Hostname: git (örnek olarak
git.abc.cnkullanılmıştır)Record Value: Dahili Git deposunun IP adresini girin.
-
2. Adım: Git deposuna bağlanma
Alan adı çözümlemesini yapılandırdıktan sonra ACK One GitOps özel Git deposuna erişebilir. Ardından uygulamaları dağıtmak üzere GitOps konsolu veya komut satırı arayüzü (CLI) üzerinden Git deposuna bağlanabilirsiniz. Daha fazla bilgi için bkz. Private Repositories.
Konsolda uygulama gruplama
Çok sayıda uygulamanız olduğunda bunları gruplamak kullanılabilirliği artırır. GitOps konsolunun sol gezinme bölmesinde şunları yapabilirsiniz:
Favorites Only, SYNC STATUS veya HEALTH STATUS filtrelerini uygulayın.
LABELS, PROJECTS, CLUSTERS, NAMESPACES veya AUTO SYNC kriterlerine göre gruplayın.
Uygulama dağıtımlarını kontrol etme
Özellikle otomatik CI/CD işlem hatlarında uygulama dağıtımlarını kontrol etmeniz sıklıkla gerekir. Aşağıdaki yöntemleri kullanabilirsiniz:
ManualSyncmodundaki uygulamaları kullanın. Kod gönderildikten sonra bir operasyon mühendisi uygulamayı inceler ve doğrular. Gereksinimleri karşılıyorsaSyncdüğmesine manuel olarak tıklayarak uygulamayı hedef kümeye senkronize edebilir.Dağıtım deposundaki görüntü sürümünü manuel olarak güncelleyin. Görüntü deposundaki değişiklikleri otomatik olarak izlemiyorsanız yeni görüntülerin bir operasyon mühendisi tarafından doğrulanması gerekir. Doğrulama tamamlandıktan sonra uygulama dağıtım deposundaki görüntü sürümünü manuel olarak güncelleyin; bu işlem Argo CD'de bir uygulama senkronizasyonunu tetikler.
Otomatik CI/CD işlem hattınızda iş kodu deposu için bir kod inceleme mekanizması oluşturun. Bir operasyon mühendisi kod incelemesini onaylayıp kodu birleştirdikten sonra CI işlem hattı görüntüyü otomatik olarak derler ve gönderir. Argo CD ardından görüntü değişikliğini otomatik olarak algılar ve
AutoSyncile yapılandırılmış ortamlara dağıtır.ManualSynciçin yapılandırılmış ortamlara da manuel olarak dağıtım yapabilirsiniz.
Argo CD repo-server Out of diskspace hatası bildirirse ne yapabilirim?
Belirti
kubectl -nargocd logs xxxx komutunu çalıştırarak günlükleri kontrol ettiğinizde repo-server aşağıdaki hata iletisini döndürür:
'git checkout --force xxx' failed exit status 128: error: unable to write file templates/deployment.yaml\nfat al: sha1 file '/tmp/_argocd-repo/xxx/.git/index.lock' write error. Out of diskspace...
Çözüm
Bu sorun, yetersiz disk alanı nedeniyle .git/index.lock dosyasına yazma işleminin başarısız olması sonucu oluşur. Sorunu çözmek için ACK One GitOps Argo CD bileşeni Pod'larının geçici depolama alanını artırın. Bu bileşenler Elastic Container Instance (ECI) üzerinde çalışır ve varsayılan olarak 30 GiB geçici depolama alanına sahiptir. Depolama alanını artırmak için şu adımları izleyin. Faturalandırma bilgileri için bkz. Geçici depolama alanı faturalandırması.
ACK One konsolu üzerinden filo örneği için KubeConfig dosyasını alın ve kubectl kullanarak filo örneğine bağlanın. Daha fazla bilgi için bkz. Kümenin KubeConfig dosyasını alma ve kubectl ile kümeye bağlanma.
-
İlgili Deployment'un Pod Şablonuna
k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi"ek açıklamasını ekleyin. Geçici depolama miktarını özelleştirebilirsiniz.-
GitOps varsayılan moddaysa ek açıklamayı argocd-server Deployment'una ekleyin.
kubectl edit deployment -nargocd argocd-server -
GitOps Yüksek Kullanılabilirlik Modundaysa ek açıklamayı argocd-dex-imageupdate-repo-server Deployment'una ekleyin.
kubectl edit deployment -nargocd argocd-dex-imageupdate-repo-server
apiVersion: apps/v1 kind: Deployment metadata: ... ... spec: template: metadata: annotations: # This adds 20 GiB to the default 30 GiB, for a total of 50 GiB. The amount of extra temporary storage is customizable. k8s.aliyun.com/eci-extra-ephemeral-storage: "20Gi" ... ... ... -
Uygulama dışı kaynakların izlenmesini önleme
Arka Plan Bilgileri
Argo CD, Kubernetes kaynaklarını izlemek için app.kubernetes.io/instance etiketini kullanır. Bir kaynağın bu etiketi varsa ve değeri Uygulama adıyla eşleşiyorsa Argo CD bu kaynağı izler. Bu durum, Uygulama durumunun OutOfSync olarak kalmasına ve uygulama dışı kaynağın istenmeden silinmesine neden olabilir. Bu davranışı önlemek için aşağıdaki çözümlerden birini kullanın.
Çözümler
Çözüm 1: Filo örneğinin
argocd/argocd-cmConfigMap'ineresource.exclusionsekleyerek izlenen uygulama dışı kaynakları yoksayın. Aşağıdaki yapılandırmaCiliumIdentitykaynaklarını yoksayar.
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:
- "*"
-
Çözüm 2: Filo örneğinin
argocd/argocd-cmConfigMap'ineapplication.instanceLabelKey: argocd.argoproj.io/instanceözel izleme etiketini ekleyin. Bu değişiklikten sonra Argo CD tarafından yönetilen kaynaklarargocd.argoproj.io/instanceetiketini kullanır. Bu sayede Argo CD, yalnızcaapp.kubernetes.io/instanceetiketine sahip diğer kaynakları izlemez. Bu yapılandırmayı uyguladıktan sonra mevcut Uygulamalar yeniden senkronize edilene kadarOutOfSyncdurumunda görünebilir.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
ConfigMap değişikliklerinden sonra bileşenleri yeniden başlatma
Argo CD'de bazı ConfigMap değişiklikleri yalnızca ilgili Argo CD bileşeni yeniden başlatıldıktan sonra etkin olur.
Aşağıdaki tabloda sıkça değiştirilen ConfigMap'ler listelenmiştir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ACK One GitOps iki çalışma modu sunar:
Varsayılan modda tüm bileşenler tek bir Deployment içinde çalışır. Değişiklikleri uygulamak için argocd-server Deployment'unu yeniden başlatın.
-
Yüksek Kullanılabilirlik Modu nda bileşenler birden çok Deployment'a ayrılır. Gerektiğinde bireysel bileşenleri yeniden başlatabilirsiniz.
argocd-server
argocd-application-controller: application-controller ve applicationset-controller içerir.
argocd-repo-server
argocd-dex-imageupdate-notification: image-updater, notification-controller ve dex içerir.
argocd-redis
Bir bileşeni yeniden başlatmak için şu adımları izleyin:
Multi-cluster GitOps sayfasında Argo CD Component daraltılabilir panelindeki GitOps bölümünü bulun.
Argo CD Component yanındaki Restart seçeneğine tıklayın.
İletişim kutusunda Select Application to Restart açılan listesinden yeniden başlatılacak bileşeni (örneğin argocd-server) seçin ve OK düğmesine tıklayın.
Git oluşturucusu dizin değişikliklerini yansıtmıyor
Belirti
Bir Argo CD ApplicationSet ile Git oluşturucusunu kullanırken Git deposundaki bağımlı bir dizin eklendiğinde veya yeniden adlandırıldığında yeni Application kaynaklarının oluşturulamadığını görebilirsiniz. ApplicationSet kaynağını hemen yeni dizin yolunu gösterecek şekilde güncellseniz bile bu sorun oluşabilir.
Çözüm
Bu sorun, Argo CD'nin bir dizin yolu değiştiğinde önbelleğini otomatik olarak yenilememesinden kaynaklanır. Sorunu çözmek için Git oluşturucusunu içeren ApplicationSet'e argocd.argoproj.io/application-set-refresh="true" ek açıklamasını ekleyerek yenilemeyi zorlayın. Aşağıdaki örneğe bakın:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
···
annotations:
···
argocd.argoproj.io/application-set-refresh: "true"
spec:
···
generators:
- git:
···
template:
···