Självstudie: Distribuera program med GitOps med Argo CD

I den här självstudien beskrivs hur du använder GitOps med Argo CD i Azure Arc-aktiverade Kubernetes-kluster eller AKS-kluster (Azure Kubernetes Service). GitOps med Argo CD är aktiverat som ett klustertillägg som gör att du kan använda din Git-lagringsplats som sanningskälla för klusterkonfiguration och programdistribution. Argo CD stöder även andra vanliga filkällor, till exempel Helm- och Open Container Initiative-lagringsplatser (OCI).

Anmärkning

Från och med version 1.0.0-preview använder Argo CD-tillägget community Helm-diagrammet. Den här ändringen är en brytande ändring eftersom konfigurationsnycklarna har ändrats. Om du har installerat en tidigare version (0.0.x) av tillägget avinstallerar du tillägget och installerar om det senaste med uppdaterade konfigurationsnycklar.

Viktigt!

GitOps med Argo CD finns för närvarande i FÖRHANDSVERSION. Se kompletterande användningsvillkor för Microsoft Azure Previews för juridiska villkor som gäller för Azure-funktioner som är i betaversion, förhandsversion eller på annat sätt ännu inte har släppts i allmän tillgänglighet.

Förutsättningar

Om du vill distribuera program med GitOps behöver du antingen ett Azure Arc-aktiverat Kubernetes-kluster eller ett AKS-kluster.

Azure Arc-aktiverade Kubernetes-kluster

Azure Kubernetes Service-kluster

  • Ett MSI-baserat AKS-kluster som är igång.

    Viktigt!

    AKS-klustret måste skapas med hanterad tjänstidentitet (MSI), inte tjänstens huvudnamn (SPN) för att det här tillägget ska fungera. För nya AKS-kluster som skapats med az aks createär klustret MSI-baserat som standard. Om du vill konvertera SPN-baserade kluster till MSI kör du az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Mer information finns i Använda en hanterad identitet i AKS.

  • Läs- och skrivbehörigheter för Microsoft.ContainerService/managedClusters resurstypen.

Gemensamt för båda klustertyperna

  • Läs- och skrivbehörigheter för dessa resurstyper:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI version 2.15 och senare. Installera Azure CLI eller använd följande kommandon för att uppdatera till den senaste versionen:

    az version
    az upgrade
    
  • Den Kubernetes-kommandoradsklienten, kubectl. kubectl är redan installerat om du använder Azure Cloud Shell.

    Installera kubectl lokalt med az aks install-cli kommandot :

    az aks install-cli
    
  • Registrering av följande Azure-resursprovidrar:

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

    Registreringen är en asynkron process och bör slutföras inom 10 minuter. Om du vill övervaka registreringsprocessen använder du följande kommando:

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

Tips/Råd

Även om källan i den här självstudien är en Git-lagringsplats stöder Argo CD andra vanliga filkällor som Helm- och Open Container Initiative-lagringsplatser (OCI).

Versions- och regionsstöd

GitOps stöds för närvarande i offentliga regioner.

Nätverkskrav

GitOps-agenterna måste ha utgående TCP till lagringsplatskällan på antingen port 22 (SSH) eller port 443 (HTTPS) för att fungera. Agenterna kräver också åtkomst till följande utgående URL:er:

Slutpunkt (DNS) Beskrivning
https://management.azure.com Krävs för att agenten ska kunna kommunicera med Kubernetes-konfigurationstjänsten.
https://<region>.dp.kubernetesconfiguration.azure.com Dataplanets slutpunkt för agenten för att skicka status och hämta konfigurationsinformation. Beror på <region> (de regioner som stöds ovan).
https://login.microsoftonline.com Krävs för att hämta och uppdatera Azure Resource Manager-token.
https://mcr.microsoft.com Krävs för att hämta containeravbildningar för kontrollanter.

Aktivera CLI-tillägg

Installera de senaste k8s-configuration paketen och k8s-extension CLI-tilläggspaketen:

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

Så här uppdaterar du dessa paket till de senaste versionerna:

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

Om du vill se en lista över alla installerade Azure CLI-tillägg och deras versioner använder du följande kommando:

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

Skapa GitOps-tillägg (Argo CD) (enkel installation)

GitOps Argo CD-installationen stöder fleranvändarstöd i läget för hög tillgänglighet (HA) och stöder arbetsbelastningsidentitet.

Viktigt!

HA-läget är standardkonfigurationen och kräver fyra noder i klustret för att kunna installera. Kommandot nedan lägger till --config "redis-ha.enabled=false" för att installera tillägget på en enda nod.

Det här kommandot skapar den enklaste konfigurationen när du installerar Argo CD-komponenterna i ett nytt argocd namnområde med klusteromfattande åtkomst. Klusterövergripande åtkomst gör att Argo CD-appdefinitioner kan identifieras i vilket namnområde som helst som anges i Argo CD:s configmap-konfiguration i klustret. Till exempel: namespace1,namespace2

az k8s-extension create --resource-group <resource-group> \
  --cluster-name <cluster-name> \
  --cluster-type managedClusters \
  --name argocd \
  --extension-type Microsoft.ArgoCD \
  --config "redis-ha.enabled=false" \
  --config "configs.params.application\.namespaces=namespace1,namespace2"

Det här installationskommandot skapar ett nytt <namespace> namn-område och installerar Argo CD-komponenterna i <namespace>. Argo CD-programdefinitioner i den här konfigurationen fungerar bara i <namespace> namnområdet.

Anmärkning

Ytterligare konfigurationsalternativ, till exempel resursgränser, finns i values.yaml. Använd dessa konfigurationer i azure CLI-kommandot när du konfigurerar tillägget.

Skapa GitOps-tillägg (Argo CD) med arbetsbelastningsidentitet

En alternativ installationsmetod som rekommenderas för produktionsanvändning är workload identity. Den här metoden använder Microsoft Entra ID-identiteter för att autentisera mot Azure-resurser, så du behöver inte hantera hemligheter eller autentiseringsuppgifter i Git-lagringsplatsen. Den här installationen använder arbetsbelastningsidentitetsautentisering aktiverad i 3.0.0-rc2 eller senare OSS-versionen av Argo CD.

Viktigt!

HA-läget är standardkonfigurationen och kräver fyra noder i klustret för att kunna installera. Använd 'redis-ha.enabled': false för att installera tillägget på en enda nod.

Om du vill skapa tillägget med arbetsbelastningsidentiteten ersätter du först följande variabler med dina egna värden i den här Bicep-mallen:

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

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoApplicationClientId = '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-ssoApplicationClientId>
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-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'
    configurationSettings: {
      'redis-ha.enabled': 'true'
      'azure.workloadIdentity.enabled': 'true'
      'azure.workloadIdentity.clientId': workloadIdentityClientId
      'azure.workloadIdentity.entraSSOClientId': ssoApplicationClientId
      'configs.cm.oidc\\.config': oidcConfig
      'configs.cm.url': url
      'configs.rbac.policy\\.default': defaultPolicy
      'configs.rbac.policy\\.csv': policy
      'configs.params.application\\.namespaces': 'default, argocd'
   }
  }
}

Skapa mallen Bicep med följande kommando:

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

Anmärkning

Ytterligare konfigurationsalternativ, till exempel resursgränser, finns i values.yaml. Använd dessa konfigurationer i Bicep-mallen när du konfigurerar tillägget.

Parameterar

clusterName är namnet på AKS- eller Arc-aktivt Kubernetes-kluster.

workloadIdentityClientId är klient-ID:t för den hanterade användaridentiteten som används för arbetsbelastnings-ID av Argo CD-komponenterna.

ssoApplicationClientId är program-ID:t (klient) för den Microsoft Entra appregistrering som används för OIDC SSO-autentisering till Argo CD-användargränssnittet. Mer information om allmän installation och konfiguration av ssoApplicationClientIdfinns i Microsoft Entra ID appregistreringsautentisering med OIDC.

url är den offentliga IP-adressen för Argo CD-användargränssnittet. Det finns ingen offentlig IP-adress eller domännamn om klustret inte redan har en ingresskontroller tillhandahållen av kunden. I så fall måste du lägga till ingressregeln i Argo CD-användargränssnittet efter distributionen. Ingressfunktionen kräver tillägget för programroutning och stöds endast för AKS-kluster.

oidcConfig – ersätt <your-tenant-id> med klientorganisations-ID:t för ditt Microsoft Entra-ID. Ersätt <same-value-as-ssoApplicationClientId-above> med samma värde som ssoApplicationClientId.

policy variabeln är argocd-rbac-cm configmap inställningarna för Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id är Microsoft Entra-grupp-ID:t som ger administratören åtkomst till Argo CD-användargränssnittet. Du hittar Microsoft Entra grupp-ID:t i Azure-portalen under Microsoft Entra ID > Gruppera >egenskaper för ditt gruppnamn>. Du kan använda Microsoft Entra-användar-ID:t i stället för ett Microsoft Entra-grupp-ID. Du hittar Microsoft Entra användar-ID i Azure-portalen under Microsoft Entra ID > Egenskaper för > med ditt användarnamn.>

Skapa autentiseringsuppgifter för arbetsbelastningsidentitet

Följ dessa steg för att konfigurera nya autentiseringsuppgifter för arbetsflödesidentitet:

  1. Hämta URL:en för OIDC-utfärdaren för ditt AKS-kluster eller Arc-aktiverat Kubernetes-kluster.

  2. Skapa en hanterad identitet och anteckna dess klient-ID och hyresgäst-ID.

  3. Upprätta en federerad identitetsautentiseringsuppgift för ditt AKS-kluster eller Arc-aktiverade Kubernetes-kluster. Till exempel:

    # 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
    
  4. Se till att ge rätt behörigheter för arbetsbelastningsidentiteten för den resurs som du vill att ArgoCD, bildreflektorkontrollanten eller ArgoCD-repo-servern ska hämta. Om du till exempel använder Azure Container Registry kontrollerar du att antingen Container Registry Repository Reader (för ABAC-aktiverade register) eller AcrPull (för icke-ABAC-register) tillämpas.

Anslut till privata ACR-register eller ACR-repositorier med hjälp av arbetsbelastningsidentitet

Om du vill använda det privata ACR-registret eller ACR-lagringsplatserna följer du anvisningarna i den officiella Argo CD-dokumentationen för att ansluta till privata ACR-register. Stegen Märka poddar, Skapa federerade identitetsautentiseringsuppgifter och Lägg till anteckning i tjänstkontot i den guiden slutfördes av tillägget med Bicep-distributionen och kan hoppas över.

Migrera från Argo CD OSS till det hanterade Argo CD-tillägget

Använd de här stegen för att migrera från en självhanterad Argo CD-installation till det Azure-hanterade Argo CD-tillägget.

Migreringsväg

Använd följande sekvens för att undvika kontrollantkonflikter och minska migreringsrisken.

  1. Granska din aktuella Argo CD-konfiguration och inventering:

    • Ansökningar
    • Programuppsättningar
    • AppProjekt
    • Autentiseringsuppgifter och mallar för lagringsplats (återbelagda)
    • Klusterhemligheter
  2. Skala självhanterade Argo CD-styrenheter till noll repliker för att förhindra beteende med dubbla styrenheter.

  3. Installera Argo CD-tillägget i klustret med hjälp av inställningar som matchar din befintliga distribution.

  4. Med funktionen Program i valfritt namnområde kan Argo CD hantera resurser utanför dess kärnnamnområde. Om klustret redan använder den här inställningen behöver du inte flytta dina resurser till ett nytt namnområde. Du behöver bara konfigurera det nya tillägget för att titta på ditt befintliga programs namnområden.

    Fall A: Om du redan använder funktionen Applikationer i valfritt namnområde:

    1. Lämna alla program-, ApplicationSet- och AppProject-resurser i sina aktuella namnområden.
    2. Konfigurera det nya hanterade tillägget för att övervaka de externa namnrymderna via tilläggets inställningar.

    Ärende B: Om du flyttar resurser till det nya tilläggsnamnområdet:

    • Migrera Program, ApplicationSets och AppProjects till tilläggets namnområde om det behövs.
  5. Migrera autentiseringsuppgifter för lagringsplatsen, cluster secrets och repocreds till tilläggets namnrymd.

  6. Kontrollera att program synkroniseras och når det förväntade felfria tillståndet.

  7. Ta bort den gamla självhanterade Argo CD-distributionen när valideringen är klar.

Det hanterade tillägget använder samma Argo CD-API:er och anpassade resursdefinitioner (CRD), så att du kan återanvända de flesta befintliga manifest med minimala ändringar.

Aktuella begränsningar

  • Direktuppdateringar till Argo CD ConfigMaps stöds inte.
  • Använd tilläggskonfigurations-API:et och inställningarna för att tillämpa ändringar i Argo CD-konfigurationen.

Konfigurera övervakning med Azure Managed Prometheus och Azure Managed Grafana

Du kan publicera Argo CD-måttvärden till Azure Managed Prometheus och visualisera dem i Azure Managed Grafana.

  1. Aktivera Azure Managed Prometheus för klustret. Se Aktivera övervakning för Azure Kubernetes Service (AKS) kluster.

  2. Uppdatera konfigurationen för tillägget för att aktivera mätvärden och ServiceMonitors.

    var clusterName = '<aks-or-arc-cluster-name>'
    
    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'
        configurationSettings: {
          // Keep your existing settings and add these metrics flags.
          'controller.metrics.enabled': 'true'
          'controller.metrics.serviceMonitor.enabled': 'true'
          'server.metrics.enabled': 'true'
          'server.metrics.serviceMonitor.enabled': 'true'
          'repoServer.metrics.enabled': 'true'
          'repoServer.metrics.serviceMonitor.enabled': 'true'
          'applicationSet.metrics.enabled': 'true'
          'applicationSet.metrics.serviceMonitor.enabled': 'true'
          'apiVersionOverrides.monitoring': 'azmonitoring.coreos.com/v1'
        }
      }
    }
    
  3. Importera Grafana-instrumentpanelen 14584 till din Azure Managed Grafana-instans.

  4. Om paneler visar Inga data uppdaterar du panelfrågor för att ta hänsyn till Azure hanterad Prometheus-jobbnamngivning.

  5. I kontrollanttelemetripaneler (minnesanvändning, CPU-användning, Goroutines) ändrar du:

    • Från job="argocd-metrics"
    • Till job=~"argocd.*-metrics"
  6. I repo-server-paneler (Använt minne, Goroutines) ändra:

    • Från job="argocd-repo-server"
    • Till job="argocd-repo-server-metrics"
  7. Spara instrumentpanelen och verifiera inmatning av mått.

Aktivera Argo CD i Azure-portalen

Du kan aktivera Argo CD i Azure-portalen för att visa programstatus och synkroniseringsstatus och få åtkomst till Argo CD-användargränssnittet. Följ dessa steg för att aktivera Argo CD i Azure portalen:

  1. Gå till klustret i Azure-portalen.

  2. Välj GitOps under Inställningar på tjänstmenyn.

  3. Välj Aktivera Argo CD (förhandsversion).

  4. I avsnittet Grundläggande :

    1. Ange det namnområde där Argo CD körs. Som standard är namnområdet argocd.
    2. Om du vill aktiverar du Redis High Availability (HA). Det här alternativet kräver minst 4 noder i klustret.
    3. Du kan också lägga till ytterligare namnområden som ska observeras.
    4. Endast för AKS-kluster kan du aktivera enkel inloggning (SSO) så att användarna kan logga in med Microsoft Entra ID, ange ett program och en eller flera grupper för att tillåta åtkomst till Argo CD-användargränssnittet.
    5. Om du vill kan du aktivera arbetsbelastningsidentitet så att Argo CD får åtkomst till Azure tjänster på ett säkert sätt utan att lagra hemligheter. Om du vill göra det väljer du rutan Aktivera arbetsbelastningsidentitet och anger en hanterad identitet och en Azure Container Registry som programmanifest eller containerartefakter ska hämtas från.

    Skärmbild som visar fliken Grundläggande med alternativ för att aktivera Argo CD på ett kluster i Azure-portalen.

  5. Klicka på Nästa när du vill fortsätta.

  6. För AKS-kluster som har aktiverat tillägget för programroutning kan du på fliken Ingress skapa en ingressresurs för att dirigera trafik till en tjänst. Om du vill väljer du Aktivera ingress och anger ingressnamn, certifikatinformation och domännamn. Klicka på Nästa när du vill fortsätta.

  7. I avsnittet Granska + distribuera granskar du inställningarna och väljer sedan Distribuera för att aktivera Argo CD i klustret.

Få åtkomst till Argo CD-användargränssnittet

Om det inte finns någon befintlig ingresskontrollant för AKS-klustret kan Argo CD-användargränssnittet exponeras direkt med hjälp av en LoadBalancer-tjänst. Följande kommando exponerar Argo CD-användargränssnittet på port 80 och 443.

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

Om du vill komma åt Argo CD-användargränssnittet från Azure-portalen går du till klustret. I tjänstmenyn går du till Inställningar och väljer GitOps. Välj sedan länken som visas för Argo CD-användargränssnittet.

Skärmbild som visar länken för att komma åt Argo CD-användargränssnittet i Azure-portalen.

Distribuera Argo CD-applikation

När du har installerat Argo CD-tillägget kan du distribuera ett program med hjälp av Argo CD-användargränssnittet eller CLI. I följande exempel används kubectl apply för att distribuera AKS-arkivet i ett Argo CD-program till argo CD-standardprojektet i argocd namnområdet.

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 Store-demoprogrammet installeras i argocd namnområdet. Följ de här anvisningarna om du vill se programmets webbsida. Se till att gå till IP-adressen genom att använda http och inte https.

Uppdatera förlängningskonfiguration

Argo CD-konfigurationsmappar kan uppdateras efter installationen och andra konfigurationsinställningar för tillägg med hjälp av följande kommando:

az k8s-extension update --resource-group <resource-group> \
  --cluster-name <cluster-name> \
  --cluster-type <cluster-type> \
  --name argocd \
  --config "configs.cm.url='https://<public-ip-for-argocd-ui>/auth/callback'"

Uppdatera Argo CD-konfigurationskartan via tillägget så att inställningarna inte skrivs över. Att använda Bicep-mallen är en alternativ metod för att använda Azure CLI för att uppdatera konfigurationen.

Ta bort tillägget

Använd följande kommandon för att ta bort tillägget.

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

Nästa steg

  • Filproblem och funktionsbegäranden på Azure/AKS-lagringsplatsen. Se till att inkludera ordet ArgoCD i beskrivningen eller rubriken.
  • Utforska AKS-Platform teknikexempel, som implementerar OSS Argo CD med Backstage och Cluster API Provider för Azure (CAPZ) eller Crossplane.