Aracılığıyla paylaş


Öğretici: ArgoCD ile GitOps kullanarak uygulama dağıtma

Bu öğreticide Kubernetes kümesinde GitOps'un nasıl kullanılacağı açıklanmaktadır. ArgoCD ile GitOps, Azure Arc özellikli Kubernetes kümelerinde veya Azure Kubernetes Service (AKS) kümelerinde küme uzantısı olarak etkinleştirilir. GitOps ile Git deponuzu küme yapılandırması ve uygulama dağıtımı için gerçek kaynağı olarak kullanabilirsiniz.

Önemli

ArgoCD ile GitOps şu anda ÖNİzLEME aşamasındadır. Beta, önizleme aşamasında olan veya henüz genel kullanıma sunulmamış Azure özellikleri için geçerli olan yasal koşullar için Bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları . Üretim GitOps uzantısı desteği için Flux kullanarak GitOps uzantısını deneyin.

Tavsiye

Bu öğreticideki kaynak bir Git deposu olsa da, ArgoCD Helm ve Open Container Initiative (OCI) depoları gibi diğer yaygın dosya kaynaklarını destekler.

Önkoşullar

GitOps kullanarak uygulama dağıtmak için Azure Arc özellikli kubernetes kümesine veya AKS kümesine ihtiyacınız vardır:

Azure Arc özellikli Kubernetes kümeleri

Azure Kubernetes Service kümeleri

  • Çalışır durumda olan MSI tabanlı bir AKS kümesi.

    Önemli

    Bu uzantının çalışması için AKS kümesinin Hizmet Asıl Adı (SPN) ile değil Yönetilen Hizmet Kimliği (MSI) ile oluşturulması gerekir. ile az aks createoluşturulan yeni AKS kümeleri için küme varsayılan olarak MSI tabanlıdır. SPN tabanlı kümeleri MSI'ye dönüştürmek için komutunu çalıştırın az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Daha fazla bilgi için bkz. AKS'de yönetilen kimlik kullanma.

  • Kaynak türü üzerinde Microsoft.ContainerService/managedClusters okuma ve yazma izinleri.

Her iki küme türü için de ortak

  • Şu kaynak türleri üzerinde okuma ve yazma izinleri:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI sürüm 2.15 veya üzeri. Azure CLI'yi yükleyin veya aşağıdaki komutları kullanarak en son sürüme güncelleştirin:

    az version
    az upgrade
    
  • Kubernetes komut satırı istemcisi kubectl. Azure Cloud Shell kullanıyorsanız kubectl zaten yüklüdür.

    kubectl komutunu kullanarak az aks install-cli'yi yerel olarak yükleyin:

    az aks install-cli
    
  • Aşağıdaki Azure kaynak sağlayıcılarının kaydı:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    Kayıt zaman uyumsuz bir işlemdir ve 10 dakika içinde bitmelidir. Kayıt işlemini izlemek için aşağıdaki komutu kullanın:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Sürüm ve bölge desteği

GitOps şu anda Azure Arc özellikli Kubernetes'in desteklediği tüm bölgelerde desteklenmektedir. GitOps şu anda AKS'nin desteklediği bölgelerin bir alt kümesinde desteklenmektedir. GitOps hizmeti, düzenli bir tempoda desteklenen yeni bölgeler ekliyor.

Ağ gereksinimleri

GitOps aracılarının çalışması için 22 numaralı bağlantı noktasında (SSH) veya 443 numaralı bağlantı noktasında (HTTPS) depo kaynağına giden (çıkış) TCP gerekir. Ajanlar ayrıca aşağıdaki giden URL'lere erişim gerekmektedir.

Uç nokta (DNS) Açıklama
https://management.azure.com Ajanın Kubernetes Yapılandırma hizmetine bağlantı kurabilmesi için gereklidir.
https://<region>.dp.kubernetesconfiguration.azure.com Aracının durumu göndermesi ve yapılandırma bilgilerini getirmesi için veri düzlemi uç noktası. <region> (daha önce bahsedilen desteklenen bölgelere) bağlıdır.
https://login.microsoftonline.com Azure Resource Manager belirteçlerini getirmek ve güncelleştirmek için gereklidir.
https://mcr.microsoft.com Denetleyiciler için kapsayıcı görüntülerini çekmek için gereklidir.

CLI uzantılarını etkinleştirme

En son k8s-configuration ve k8s-extension CLI uzantı paketlerini yükleyin:

az extension add -n k8s-configuration
az extension add -n k8s-extension

Bu paketleri en son sürümlere güncelleştirmek için:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Yüklü tüm Azure CLI uzantılarının ve sürümlerinin listesini görmek için aşağıdaki komutu kullanın:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.10.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     2.2.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.6.4

GitOps (ArgoCD) uzantısı oluşturma (basit yükleme)

GitOps ArgoCD yüklemesi , yüksek kullanılabilirlik (HA) modunda çoklu kiracıyı destekler ve iş yükü kimliğini destekler.

Önemli

HA modu varsayılan yapılandırmadır ve yükleyebilmek için kümede üç düğüm gerektirir. Aşağıdaki komut uzantıyı tek bir düğüme yüklemek için ekler --config deployWithHighAvailability=false .

Bu komut, ArgoCD bileşenlerini küme genelinde erişime sahip yeni argocd bir ad alanına yükleyerek en basit yapılandırmayı oluşturur. Küme genelinde erişim, ArgoCD uygulama tanımlarının kümedeki ArgoCD yapılandırma haritası yapılandırmasında listelenen herhangi bir ad alanında algılanması sağlar. Örneğin: namespace1,namespace2

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> \
--cluster-type managedClusters \
--name argocd \
--extension-type Microsoft.ArgoCD \
--release-train preview \
--config deployWithHighAvailability=false \
--config namespaceInstall=false \
--config "config-maps.argocd-cmd-params-cm.data.application\.namespaces=namespace1,namespace2"

ArgoCD erişimini belirli bir ad alanıyla sınırlamak istiyorsanız, --config namespaceInstall=true'yi --target-namespace <namespace> parametreleriyle birlikte kullanın. Bu yükleme komutu yeni <namespace> bir ad alanı oluşturur ve 'de <namespace>ArgoCD bileşenlerini yükler. Yükleme komutu aynı kümeye birden çok ArgoCD örneği yükleme olanağı da sağlar. Bu yapılandırmadaki ArgoCD uygulama tanımları yalnızca ad alanında <namespace> çalışır.

İş yükü kimliğiyle GitOps (ArgoCD) uzantısı oluşturma

Üretim kullanımı için önerilen alternatif bir yükleme yöntemi iş yükü kimliğidir. Bu yöntem, Git deponuzda gizli dizileri veya kimlik bilgilerini yönetmeye gerek kalmadan Azure kaynaklarında kimlik doğrulaması yapmak için Microsoft Entra Id kimliklerini kullanmanıza olanak tanır. Bu yükleme, ArgoCD'nin 3.0.0-rc2 veya sonraki işletim sistemi sürümünde etkinleştirilen iş yükü kimliği kimlik doğrulamasını kullanır.

Önemli

HA modu varsayılan yapılandırmadır ve yükleyebilmek için kümede üç düğüm gerektirir. Uzantıyı tek bir düğüme yüklemek için --config deployWithHighAvailability=false ekleyin.

İş yükü kimliğiyle uzantı oluşturmak için, önce bu Bicep şablonunda aşağıdaki değişkenleri kendi değerlerinizle değiştirin:

var clusterName = '<aks-or-arc-cluster-name>'

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoWorkloadIdentityClientId = 'replace-me##-##-###-###'

var url = 'https://<public-ip-for-argocd-ui>/'
var oidcConfig = '''
name: Azure
issuer: https://login.microsoftonline.com/<your-tenant-id>/v2.0
clientID: <same-value-as-ssoWorkloadIdentityClientId-above>
azure:
  useWorkloadIdentity: true
requestedIDTokenClaims:
  groups:
    essential: true
requestedScopes:
  - openid
  - profile
  - email
'''

var defaultPolicy = 'role:readonly'
var policy = '''
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, replace-me##-argocd-ui-Microsoft Entra-group-admin-id, role:org-admin
'''

resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
  name: clusterName
}

resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
  name: 'argocd'
  scope: cluster
  properties: {
    extensionType: 'Microsoft.ArgoCD'
    releaseTrain: 'preview'
    configurationSettings: {
      'workloadIdentity.enable': 'true'
      'workloadIdentity.clientId': workloadIdentityClientId
      'workloadIdentity.entraSSOClientId': ssoWorkloadIdentityClientId
      'config-maps.argocd-cm.data.oidc\\.config': oidcConfig
      'config-maps.argocd-cm.data.url': url
      'config-maps.argocd-rbac-cm.data.policy\\.default': defaultPolicy
      'config-maps.argocd-rbac-cm.data.policy\\.csv': policy
      'config-maps.argocd-cmd-params-cm.data.application\\.namespaces': 'default, argocd'
    }
  }
}

Bicep şablonu şu komut kullanılarak oluşturulabilir:

az deployment group create --resource-group <resource-group> --template-file <bicep-file>

Parametreler

clusterName AKS veya Arc özellikli Kubernetes kümesinin adıdır.

workloadIdentityClientId ve ssoWorkloadIdentityClientId iş yükü kimliği için kullanılmak istenen yönetilen kimliğin istemci kimlikleridir. ssoWorkloadIdentityClientId, ArgoCD kullanıcı arabirimi için kimlik doğrulaması için kullanılır ve workloadIdentityClientId ArgoCD bileşenleri için iş yükü kimliği için kullanılır. ssoWorkloadIdentityClientId'nin genel kurulumu ve yapılandırması hakkında ek bilgi için OIDC kullanarak Microsoft Entra Id Uygulama Kaydı Kimlik Doğrulaması'nı ziyaret edin.

url ArgoCD kullanıcı arabiriminin genel IP adresidir. Kümede müşteri tarafından sağlanan bir giriş denetleyicisi yoksa genel IP veya etki alanı adı yoktur. Öyleyse, giriş kuralının dağıtımdan sonra ArgoCD kullanıcı arabirimine eklenmesi gerekir.

oidcConfig - Microsoft Entra Kimliğinizin kiracı kimliğiyle <your-tenant-id> değerini değiştirin. <same-value-as-ssoWorkloadIdentityClientId-above> öğesini ssoWorkloadIdentityClientId ile aynı değerle değiştirin.

policy değişkeni ArgoCD'nin ayarlarıdır argocd-rbac-cm configmap . g, replace-me##-argocd-ui-entra-group-admin-id , ArgoCD kullanıcı arabirimine yönetici erişimi veren Microsoft Entra grup kimliğidir. Microsoft Entra grup kimliği, Azure portalında Microsoft Entra ID > Groups >your-group-name> Properties altında bulunabilir. Microsoft Entra grup kimliği yerine Microsoft Entra kullanıcı kimliğini kullanabilirsiniz. Microsoft Entra kullanıcı kimliği, Azure portalında Microsoft Entra Id > Users >your-user-name> Properties altında bulunabilir.

İş yükü kimlik bilgileri oluşturma

Yeni iş yükü kimliği kimlik bilgilerini ayarlamak için şu adımları izleyin:

  1. AKS kümeniz veya Arc özellikli Kubernetes kümeniz için OIDC veren URL'sini alın.

  2. Yönetilen kimlik oluşturun ve istemci kimliğini ve kiracı kimliğini not edin.

  3. AKS kümeniz veya Arc özellikli Kubernetes kümeniz için federasyon kimliği kimlik bilgileri oluşturun. Örneğin:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject system:serviceaccount:"argocd":"source-controller" --audience api://AzureADTokenExchange
    
  4. Kaynak denetleyicisi veya görüntü yansıtıcı denetleyicisinin çekmesini istediğiniz kaynak için iş yükü kimliği için uygun izinleri sağladığından emin olun. Örneğin, Azure Container Registry kullanılıyorsa, Container Registry Repository Reader (ABAC özellikli kayıt defterleri için) veya (ABAC olmayan kayıt defterleri için) uygulandığından emin olun.

İş yükü kimliğini kullanarak özel ACR kayıt defterlerine veya ACR depolarına bağlanma

Özel ACR kayıt defteri veya ACR depolarını kullanmak için, özel ACR kayıt defterlerine bağlanmaya yönelik resmi ArgoCD belgelerindeki yönergeleri izleyin. Bu kılavuzdaki Podları Etiketleme, Federasyon Kimliği Kimlik Bilgileri Oluşturma ve Hizmet Hesabına ek açıklama ekleme adımları, Bicep dağıtımıyla uzantı tarafından tamamlanmıştır ve atlanabilir.

ArgoCD kullanıcı arabirimine erişme

AKS kümesi için mevcut giriş denetleyicisi yoksa, ArgoCD kullanıcı arabirimi bir LoadBalancer hizmeti kullanılarak doğrudan kullanıma sunulur. Aşağıdaki komut, 80 ve 443 numaralı bağlantı noktasında ArgoCD kullanıcı arabirimini kullanıma sunar.

kubectl -n argocd expose service argocd-server --type LoadBalancer --name argocd-server-lb --port 80 --target-port 8080

ArgoCD uygulamasını dağıtma

Artık ArgoCD uzantısı yüklü olduğuna göre, ArgoCD kullanıcı arabirimini veya CLI'yı kullanarak bir uygulama dağıtabilirsiniz. Aşağıdaki örnek, bir ArgoCD uygulamasının içinde AKS deposunu varsayılan ArgoCD projesine, `kubectl apply` kullanarak `argocd` ad alanında dağıtmak için basitçe kullanır.

kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: aks-store-demo
  namespace: argocd
spec:
  project: default
  source:    
      repoURL: https://github.com/Azure-Samples/aks-store-demo.git
      targetRevision: HEAD
      path: kustomize/overlays/dev
  syncPolicy:
      automated: {}
  destination:
      namespace: argocd
      server: https://kubernetes.default.svc
EOF

AKS mağaza tanıtım uygulaması pets ad alanına yüklendi. Bu yönergeleri izleyerek uygulama web sayfasına bakın. HTTPS değil http kullanarak IP adresini ziyaret edin.

Uzantı yapılandırmasını güncelleştirme

ArgoCD yapılandırma haritaları yüklemeden ve diğer uzantı yapılandırma ayarlarından sonra aşağıdaki komut kullanılarak güncelleştirilebilir:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name Microsoft.ArgoCD –-config "config-maps.argocd-cm.data.url='https://<public-ip-for-argocd-ui>/auth/callback'”

ArgoCD configürasyon haritasını uzantı aracılığıyla güncelleştirmek önemlidir, böylece ayarlar üzerine yazılmasın. Bicep şablonunu uygulamak, yapılandırmayı güncellemek için az cli'ye alternatif bir yöntemdir.

Uzantıyı silme

Uzantıyı silmek için aşağıdaki komutları kullanın.

az k8s-extension delete -g <resource-group> -c <cluster-name> -n argocd -t managedClusters --yes

Sonraki Adımlar

  • Azure/AKS deposundaki dosya sorunları ve özellik istekleri ve açıklamaya veya başlığa "ArgoCD" sözcüğünü eklediğinizden emin olun.
  • Azure için Backstage ve Küme API Sağlayıcısı (CAPZ) veya Çapraz Düzlem ile OSS ArgoCD dağıtanAKS-Platform mühendislik kodu örneğini keşfedin.