Sdílet prostřednictvím


Kurz: Nasazení aplikací pomocí GitOps s ArgoCD

Tento kurz popisuje, jak používat GitOps v clusteru Kubernetes. GitOps s ArgoCD je povolený jako rozšíření clusteru v clusterech Kubernetes s podporou Azure Arc nebo v clusterech Azure Kubernetes Service (AKS). S GitOps můžete úložiště Git používat jako zdroj pravdivých informací pro konfiguraci clusteru a nasazení aplikací.

Důležité

GitOps s ArgoCD je aktuálně ve verzi PREVIEW. Další podmínky použití pro Microsoft Azure Preview najdete v právních podmínkách, které se vztahují na funkce Azure, které jsou v beta verzi, preview nebo jinak dosud nebyly vydány v obecné dostupnosti. Pokud potřebujete podporu produkčního rozšíření GitOps, vyzkoušejte rozšíření GitOps pomocí fluxu.

Návod

I když je zdrojem v tomto kurzu úložiště Git, ArgoCD podporuje další běžné zdroje souborů, jako jsou úložiště Helm a Open Container Initiative (OCI).

Požadavky

K nasazení aplikací pomocí GitOps potřebujete cluster Kubernetes s podporou Azure Arc nebo cluster AKS:

Klastry Kubernetes s podporou Azure Arc

Clustery služby Azure Kubernetes

  • Cluster AKS na bázi MSI, který je v provozu.

    Důležité

    Aby toto rozšíření fungovalo, je potřeba vytvořit cluster AKS s identitou spravované služby (MSI), nikoli hlavním názvem služby (SPN). U nových clusterů AKS vytvořených pomocí az aks create je cluster ve výchozím nastavení založený na MSI. Pokud chcete převést clustery SPN na MSI, spusťte az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identitypříkaz . Další informace najdete v tématu Použití spravované identity v AKS.

  • Oprávnění na čtení a zápis pro typ prostředku Microsoft.ContainerService/managedClusters.

Společné pro oba typy clusterů

  • Oprávnění ke čtení a zápisu u těchto typů prostředků:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI verze 2.15 nebo novější Nainstalujte Azure CLI nebo pomocí následujících příkazů aktualizujte na nejnovější verzi:

    az version
    az upgrade
    
  • Klient příkazového řádku Kubernetes , kubectl. kubectl už je nainstalovaný, pokud používáte Azure Cloud Shell.

    Nainstalujte kubectl místně pomocí příkazu az aks install-cli:

    az aks install-cli
    
  • Registrace následujících poskytovatelů prostředků Azure:

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

    Registrace je asynchronní proces, který by se měl dokončit do 10 minut. Pokud chcete monitorovat proces registrace, použijte následující příkaz:

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

Podpora verzí a oblastí

GitOps se v současné době podporuje ve všech oblastech, které Kubernetes s podporou Azure Arc podporuje. GitOps se v současné době podporuje v podmnožině oblastí, které AKS podporuje. Služba GitOps přidává nové podporované oblasti v pravidelných intervalech.

Požadavky na síť

Agenti GitOps vyžadují odchozí TCP připojení ke zdroji úložiště na portu 22 (SSH) nebo portu 443 (HTTPS). Agenti také vyžadují přístup k následujícím odchozím adresám URL:

Koncový bod (DNS) Popis
https://management.azure.com Vyžaduje se, aby agent komunikuje se službou Konfigurace Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Koncový bod roviny dat pro agenta pro nabízení informací o stavu a načítání konfiguračních informací. Závisí na <region> (podporované oblasti uvedené dříve).
https://login.microsoftonline.com Vyžaduje se k načtení a aktualizaci tokenů Azure Resource Manageru.
https://mcr.microsoft.com Potřebné pro stažení obrázků kontejnerů pro řadiče.

Povolení rozšíření rozhraní příkazového řádku

Nainstalujte nejnovější balíčky rozšíření k8s-configuration a k8s-extension pro rozhraní příkazového řádku.

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

Aktualizace těchto balíčků na nejnovější verze:

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

Pokud chcete zobrazit seznam všech nainstalovaných rozšíření Azure CLI a jejich verzí, použijte následující příkaz:

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

Vytvoření rozšíření GitOps (ArgoCD) (jednoduchá instalace)

Instalace GitOps ArgoCD podporuje víceklientské prostředí v režimu vysoké dostupnosti (HA) a podporuje identitu úloh.

Důležité

Režim vysoké dostupnosti je výchozí konfigurace a vyžaduje, aby bylo možné nainstalovat tři uzly v clusteru. Příkaz níže přidá --config deployWithHighAvailability=false k instalaci rozšíření na jednotlivý uzel.

Tento příkaz vytvoří nejjednodušší konfiguraci, která nainstaluje komponenty ArgoCD do nového argocd oboru názvů s přístupem pro celý cluster. Přístup na úrovni clusteru umožňuje zjistit definice aplikací ArgoCD v libovolném oboru názvů, který je uveden v konfiguraci mapy konfigurace argoCD v clusteru. Příklad: 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"

Pokud chcete omezit přístup ArgoCD k určitému oboru názvů, použijte --config namespaceInstall=true spolu s --target-namespace <namespace> parametry. Tento instalační příkaz vytvoří nový <namespace> obor názvů a nainstaluje komponenty ArgoCD do <namespace>. Instalační příkaz také umožňuje nainstalovat více instancí ArgoCD ve stejném clusteru. Definice aplikace ArgoCD v této konfiguraci fungují pouze v <namespace> oboru názvů.

Vytvoření rozšíření GitOps (ArgoCD) s identitou úloh

Alternativní metoda instalace doporučená pro produkční využití je identita úloh. Tato metoda umožňuje používat identity ID Microsoft Entra k ověřování prostředků Azure bez nutnosti spravovat tajné kódy nebo přihlašovací údaje v úložišti Git. Tato instalace využívá ověřování identit úloh povolené ve verzi 3.0.0-rc2 nebo novější verze OSS ArgoCD.

Důležité

Režim vysoké dostupnosti je výchozí konfigurace a vyžaduje, aby bylo možné nainstalovat tři uzly v clusteru. Přidejte --config deployWithHighAvailability=false k instalaci rozšíření na jediném uzlu.

Pokud chcete vytvořit rozšíření s identitou úlohy, nejprve nahraďte následující proměnné vlastními hodnotami v této šabloně Bicep:

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'
    }
  }
}

Šablonu Bicep můžete vytvořit pomocí tohoto příkazu:

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

Parametry

clusterName je název clusteru Kubernetes s podporou AKS nebo Arc.

workloadIdentityClientId a ssoWorkloadIdentityClientId jsou ID klienta spravované identity, která se má použít pro identitu úlohy. ssoWorkloadIdentityClientId se používá pro ověřování uživatelského rozhraní ArgoCD a workloadIdentityClientId se používá pro identitu úlohy pro komponenty ArgoCD. Další informace o obecné instalaci a konfiguraci ssoWorkloadIdentityClientId najdete v ověřování registrace aplikace Microsoft Entra ID pomocí OIDC .

url je veřejná IP adresa uživatelského rozhraní ArgoCD. Neexistuje žádná veřejná IP adresa ani název domény, pokud cluster ještě nemá kontroler příchozího přenosu dat poskytnutý zákazníkem. Pokud ano, pravidlo přístupu je potřeba po nasazení přidat do ArgoCD UI.

oidcConfig – nahraďte <your-tenant-id> ID tenanta vašeho ID Microsoft Entra. Nahraďte <same-value-as-ssoWorkloadIdentityClientId-above> stejnou hodnotou jako ssoWorkloadIdentityClientId.

policy proměnná je argocd-rbac-cm configmap nastavení ArgoCD. g, replace-me##-argocd-ui-entra-group-admin-id je ID skupiny Microsoft Entra, které poskytuje správci přístup k uživatelskému rozhraní ArgoCD. ID skupiny Microsoft Entra najdete na webu Azure Portal v části Microsoft Entra ID > Groups >your-group-name> Properties. Místo ID skupiny Microsoft Entra můžete použít ID uživatele Microsoft Entra. ID uživatele Microsoft Entra najdete na portálu Azure v části Microsoft Entra ID>>Uživatelé> vaše-uživatelské-jméno Vlastnosti.

Vytvoření přihlašovacích údajů pro identitu úlohy

Pokud chcete nastavit nové přihlašovací údaje identity úloh, postupujte takto:

  1. Načtěte adresu URL vystavitele OIDC pro cluster AKS nebo cluster Kubernetes s podporou Arc.

  2. Vytvořte spravovanou identitu a poznamenejte si ID klienta a ID tenanta.

  3. Vytvořte přihlašovací údaje federované identity pro cluster AKS nebo cluster Kubernetes s podporou Arc. Například:

    # 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. Nezapomeňte poskytnout správná oprávnění pro identitu úlohy pro prostředek, který chcete načíst kontrolerem zdrojového kontroleru nebo kontroleru obrazu. Pokud například používáte Azure Container Registry, ujistěte se, že se použily Container Registry Repository Reader (pro registry s podporou ABAC) nebo AcrPull (pro registry bez ABAC).

Připojení k privátním registrům ACR nebo úložištím ACR pomocí identity úloh

Pokud chcete využít privátní registr ACR nebo úložiště ACR, postupujte podle pokynů v oficiální dokumentaci ArgoCD pro připojení k privátním registrům ACR. Označení podů, Vytvoření přihlašovacích údajů federované identity a Přidání poznámek k účtu služby v této příručce byly dokončeny rozšířením prostřednictvím nasazení Bicep a lze je přeskočit.

Přístup k uživatelskému rozhraní ArgoCD

Pokud pro cluster AKS neexistuje žádný kontroler příchozího přenosu dat, můžete uživatelské rozhraní ArgoCD zpřístupnit přímo pomocí služby LoadBalancer. Následující příkaz zveřejní uživatelské rozhraní ArgoCD na portu 80 a 443.

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

Nasazení aplikace ArgoCD

Teď, když je nainstalované rozšíření ArgoCD, můžete nasadit aplikaci pomocí uživatelského rozhraní ArgoCD nebo rozhraní příkazového řádku. Následující příklad jednoduše používá kubectl apply k nasazení úložiště AKS uvnitř aplikace ArgoCD do výchozího projektu ArgoCD v argocd oboru názvů.

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

Ukázková aplikace úložiště AKS byla nainstalována do oboru názvů pets. Podle těchto pokynů se podívejte na webovou stránku aplikace. Nezapomeňte navštívit IP adresu pomocí protokolu HTTP, nikoli https.

Aktualizace konfigurace rozšíření

Konfigurační mapy ArgoCD je možné aktualizovat po instalaci a dalších nastaveních konfigurace rozšíření pomocí následujícího příkazu:

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'”

Je důležité aktualizovat mapu konfigurace ArgoCD prostřednictvím rozšíření, aby se nastavení nepřepsala. Použití šablony bicep je alternativní metodou aktualizace az cli konfigurace.

Odstraňte rozšíření

K odstranění rozšíření použijte následující příkazy.

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

Další kroky