Zelfstudie: Toepassingen implementeren met GitOps met Argo CD

In deze zelfstudie wordt beschreven hoe u GitOps gebruikt met Argo CD in Kubernetes-clusters met Azure Arc of AKS-clusters (Azure Kubernetes Service). GitOps met Argo CD is ingeschakeld als clusterextensie waarmee u uw Git-opslagplaats kunt gebruiken als de bron van waarheid voor clusterconfiguratie en toepassingsimplementatie. Argo CD ondersteunt ook andere veelgebruikte bestandsbronnen, zoals Helm- en Open Container Initiative-opslagplaatsen (OCI).

Opmerking

Vanaf versie 1.0.0-preview maakt de Argo CD-extensie gebruik van de Helm-grafiek van de community. Deze wijziging is een belangrijke wijziging omdat de configuratiesleutels zijn gewijzigd. Als u een eerdere versie (0.0.x) van de extensie hebt geïnstalleerd, verwijdert u de extensie en installeert u de meest recente versie opnieuw met bijgewerkte configuratiesleutels.

Belangrijk

GitOps met Argo CD is momenteel in PREVIEW. Zie de aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die bèta, preview of anderszins nog niet zijn uitgebracht in algemene beschikbaarheid.

Vereiste voorwaarden

Als u toepassingen wilt implementeren met GitOps, hebt u een Kubernetes-cluster met Azure Arc of een AKS-cluster nodig.

Kubernetes-clusters beheerd met Azure Arc

Azure Kubernetes Service-clusters

  • Een op MSI gebaseerd AKS-cluster dat operationeel is.

    Belangrijk

    Het AKS-cluster moet worden gemaakt met Managed Service Identity (MSI), niet Service Principal Name (SPN), zodat deze extensie werkt. Voor nieuwe AKS-clusters die zijn gemaakt met az aks create, is het cluster standaard op MSI gebaseerd. Als u clusters op basis van SPN wilt converteren naar MSI, voert u het volgende uit az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Zie Een beheerde identiteit gebruiken in AKS voor meer informatie.

  • Lees- en schrijfmachtigingen voor het Microsoft.ContainerService/managedClusters resourcetype.

Gebruikelijk voor beide clustertypen

  • Lees- en schrijfmachtigingen voor deze resourcetypen:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI versie 2.15 of hoger. Installeer de Azure CLI of gebruik de volgende opdrachten om bij te werken naar de nieuwste versie:

    az version
    az upgrade
    
  • De Kubernetes-opdrachtregelclient, kubectl. kubectl is al geïnstalleerd als u Azure Cloud Shell gebruikt.

    Lokaal installeren kubectl met behulp van de az aks install-cli opdracht:

    az aks install-cli
    
  • Registratie van de volgende Azure-resourceproviders:

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

    Registratie is een asynchroon proces en moet binnen 10 minuten worden voltooid. Gebruik de volgende opdracht om het registratieproces te bewaken:

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

Aanbeveling

Hoewel de bron in deze zelfstudie een Git-opslagplaats is, ondersteunt Argo CD andere algemene bestandsbronnen, zoals Helm- en Open Container Initiative-opslagplaatsen (OCI).

Ondersteuning voor versies en regio's

GitOps wordt momenteel ondersteund in openbare regio's.

Netwerkvereisten

De GitOps-agents vereisen een uitgaande TCP-verbinding naar de repository op poort 22 (SSH) of poort 443 (HTTPS) om te functioneren. De agents hebben ook toegang nodig tot de volgende uitgaande URL's:

Eindpunt (DNS) Beschrijving
https://management.azure.com Vereist dat de agent communiceert met de Kubernetes Configuration-service.
https://<region>.dp.kubernetesconfiguration.azure.com Eindpunt van het datavlak voor de agent om de status door te geven en configuratiegegevens op te halen. Afhankelijk van <region> de eerder genoemde ondersteunde regio's.
https://login.microsoftonline.com Vereist om de Azure Resource Manager-tokens op te halen en bij te werken.
https://mcr.microsoft.com Nodig om containerafbeeldingen voor controllers op te halen.

CLI-extensies inschakelen

Installeer de nieuwste k8s-configuration en k8s-extension CLI-extensiepakketten:

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

Ga als volgt te werk om deze pakketten bij te werken naar de nieuwste versies:

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

Gebruik de volgende opdracht om een lijst weer te geven met alle geïnstalleerde Azure CLI-extensies en de bijbehorende versies:

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

Een GitOps-extensie (Argo CD) maken (eenvoudige installatie)

De GitOps Argo CD-installatie ondersteunt multitenancy in hoge beschikbaarheidsmodus en ondersteunt workloadidentiteit.

Belangrijk

De ha-modus is de standaardconfiguratie en vereist vier knooppunten in het cluster om te kunnen installeren. De onderstaande opdracht voegt --config "redis-ha.enabled=false" toe om de extensie op één knooppunt te installeren.

Met deze opdracht maakt u de eenvoudigste configuratie die de Argo CD-onderdelen installeert in een nieuwe argocd naamruimte met toegang tot het hele cluster. Met clusterbrede toegang kunnen Argo CD-app-definities worden gedetecteerd in elke naamruimte die wordt vermeld in de Argo CD-configmap-configuratie in het cluster. Bijvoorbeeld: 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"

Met deze installatieopdracht maakt u een nieuwe <namespace> naamruimte en installeert u de Argo CD-onderdelen in de <namespace>. Argo CD-toepassingsdefinities in deze configuratie werken alleen in de <namespace> naamruimte.

Opmerking

Zie values.yaml voor aanvullende configuratieopties, zoals resourcelimieten. Gebruik deze configuraties in uw Azure CLI-opdracht bij het configureren van de extensie.

Een GitOps-extensie (Argo CD) maken met workload-identiteit

Een alternatieve installatiemethode die wordt aanbevolen voor productiegebruik, is workloadidentiteit. Deze methode gebruikt Microsoft Entra ID identiteiten om te verifiëren bij Azure resources, zodat u geen geheimen of referenties hoeft te beheren in uw Git-opslagplaats. Deze installatie maakt gebruik van workload identity-authenticatie, zoals ingeschakeld in de OSS-versie 3.0.0-rc2 of hoger van Argo CD.

Belangrijk

De ha-modus is de standaardconfiguratie en vereist vier knooppunten in het cluster om te kunnen installeren. Gebruik 'redis-ha.enabled': false dit om de extensie op één knooppunt te installeren.

Als u de extensie wilt maken met de workloadidentiteit, vervangt u eerst de volgende variabelen door uw eigen waarden in deze Bicep-sjabloon:

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

Maak de Bicep-sjabloon met behulp van de volgende opdracht:

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

Opmerking

Zie values.yaml voor aanvullende configuratieopties, zoals resourcelimieten. Gebruik deze configuraties in de Bicep-sjabloon bij het configureren van de extensie.

Parameterwaarden

clusterName is de naam van het Kubernetes-cluster dat is ingeschakeld met AKS of Arc.

workloadIdentityClientId is de client-id van de door de gebruiker toegewezen beheerde identiteit die wordt gebruikt voor workloadidentiteit door de Argo CD-onderdelen.

ssoApplicationClientId is de toepassings-id (client) van de Microsoft Entra app-registratie die wordt gebruikt voor OIDC SSO-verificatie voor de Argo CD-gebruikersinterface. Zie ssoApplicationClientId voor meer informatie over de algemene installatie en configuratie van.

url is het openbare IP-adres van de Argo CD UI. Er is geen openbare IP- of domeinnaam, tenzij het cluster al een door de klant geleverde ingress controller heeft. Zo ja, dan moet u de regel voor inkomend verkeer toevoegen aan de Argo CD-gebruikersinterface na de implementatie. Voor de ingressfunctionaliteit is de add-on voor toepassingsroutering vereist en deze wordt alleen ondersteund op AKS-clusters.

oidcConfig - vervang door <your-tenant-id> de tenant-id van uw Microsoft Entra-id. Vervang <same-value-as-ssoApplicationClientId-above> door dezelfde waarde als ssoApplicationClientId.

policy variabele zijn de argocd-rbac-cm configmap instellingen van Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id is de Microsoft Entra-groeps-ID die beheerstoegang geeft tot de Argo CD-gebruikersinterface. U vindt de Microsoft Entra-groeps-id in de Azure-portal onder Microsoft Entra ID > Groepen >de naam van uw groep> Eigenschappen. U kunt de Microsoft Entra-gebruikers-id gebruiken in plaats van een Microsoft Entra-groeps-id. U vindt de Microsoft Entra gebruikers-id in de Azure-portal onder Microsoft Entra ID > Eigenschappen van > gebruikers>.

Identiteitsreferenties voor werkbelasting maken

Voer de volgende stappen uit om nieuwe workload-identiteitsreferenties in te stellen:

  1. Haal de URL van de OIDC-verlener op voor uw AKS-cluster of Kubernetes-cluster met Arc.

  2. Maak een beheerde identiteit en noteer de client-id en tenant-id.

  3. Stel een federatieve identiteitsreferentie in voor uw AKS-cluster of Kubernetes-cluster met Arc. Voorbeeld:

    # 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. Zorg ervoor dat u de juiste machtigingen toekent voor de workloadidentiteit zodat de resource wordt opgehaald door argocd, de image-reflector controller of de argocd-repo-server. Als u bijvoorbeeld Azure Container Registry gebruikt, moet u ervoor zorgen dat Container Registry Repository Reader (voor registers met ABAC-functionaliteit) of AcrPull (voor niet-ABAC-registers) is toegepast.

Verbinding maken met privé-ACR-registers of ACR-opslagplaatsen met behulp van workloadidentiteit

Als u het persoonlijke ACR-register of ACR-opslagplaatsen wilt gebruiken, volgt u de instructies in de officiële Argo CD-documentatie voor het maken van verbinding met privé-ACR-registers. De stappen De pods labelen, Federatieve identiteitsreferenties maken, en Aantekeningen toevoegen aan de serviceaccount in die handleiding zijn voltooid door de extensie met de Bicep-implementatie en kunnen worden overgeslagen.

Migreren van Argo CD OSS naar de beheerde Argo CD-extensie

Gebruik deze stappen om te migreren van een zelfbeheerde Argo CD-installatie naar de door Azure beheerde Argo CD-extensie.

Migratiepad

Gebruik de volgende reeks om controllerconflicten te voorkomen en migratierisico's te verminderen.

  1. Controleer uw huidige Argo CD-configuratie en -inventaris:

    • Applications
    • ApplicationSets
    • AppProjects
    • Inloggegevens en sjablonen voor repositories (repocreds)
    • Clustergeheimen
  2. Schaal zelfbeheerde Argo CD-controllers terug naar nul replica's om gedrag met twee controllers te voorkomen.

  3. Installeer de Argo CD-extensie op het cluster met behulp van instellingen die overeenkomen met uw bestaande implementatie.

  4. Met de functie Toepassingen in een naamruimte kan Argo CD resources beheren die zich buiten de kernnaamruimte bevinden. Als uw cluster deze instelling al gebruikt, hoeft u uw resources niet naar een nieuwe naamruimte te verplaatsen. U hoeft alleen de nieuwe extensie te configureren om de naamruimten van uw bestaande toepassing te bekijken.

    Case A: Als u de toepassingen al gebruikt in een naamruimtefunctie :

    1. Laat alle toepassings-, ApplicationSet- en AppProject-resources in hun huidige naamruimten staan.
    2. Configureer de nieuwe beheerde extensie om deze externe naamruimten te bewaken via de instellingen van de extensie.

    Case B: Als u resources naar de nieuwe extensienaamruimte verplaatst:

    • Migreer indien nodig toepassingen, ApplicationSets en AppProjects naar de extensienaamruimte.
  5. Migreer repository-inloggegevens, cluster secrets en repocreds naar de extensie-naamruimte.

  6. Controleer of toepassingen synchroniseren en de verwachte gezonde status bereiken.

  7. Verwijder de oude zelfbeheerde Argo CD-implementatie nadat de validatie is voltooid.

De beheerde extensie maakt gebruik van dezelfde Argo CD-API's en aangepaste resourcedefinities (CRD's), zodat u de meeste bestaande manifesten opnieuw kunt gebruiken met minimale wijzigingen.

Huidige beperkingen

  • Directe updates voor Argo CD ConfigMaps worden niet ondersteund.
  • Gebruik de API en instellingen voor extensieconfiguratie om Argo CD-configuratiewijzigingen toe te passen.

Bewaking configureren met Azure Beheerde Prometheus en Azure Managed Grafana

U kunt metrische gegevens van Argo CD publiceren naar Azure Beheerde Prometheus en deze visualiseren in Azure Managed Grafana.

  1. Schakel Azure Beheerde Prometheus in voor uw cluster. Zie Bewaking inschakelen voor Azure Kubernetes Service (AKS) clusters.

  2. Werk uw extensieconfiguratie bij om metrische gegevens en ServiceMonitors in te schakelen.

    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. Importeer Grafana-dashboard 14584 in uw Azure Managed Grafana-exemplaar.

  4. Als in deelvensters Geen gegevens wordt weergegeven, werk dan de query's voor de deelvensters bij zodat deze rekening houden met de taaknaamgeving van Azure Managed Prometheus.

  5. In de telemetriepanelen van de controller (Geheugenverbruik, CPU-gebruik, Goroutines), wijzig:

    • Vanaf job="argocd-metrics"
    • Aan job=~"argocd.*-metrics"
  6. Wijzig in de repo-server-panelen (Memory Used, Goroutines):

    • Vanaf job="argocd-repo-server"
    • Naar job="argocd-repo-server-metrics"
  7. Sla het dashboard op en controleer de opname van metrische gegevens.

Argo CD inschakelen in de Azure-portal

U kunt Argo CD inschakelen in de Azure-portal om de toepassingsstatus en synchronisatiestatus weer te geven en om toegang te krijgen tot de Argo CD-gebruikersinterface. Voer de volgende stappen uit om Argo CD in te schakelen in de Azure-portal:

  1. Ga naar uw cluster in de Azure-portal.

  2. Selecteer GitOps in het servicemenu onder Instellingen.

  3. Selecteer Argo CD inschakelen (preview).

  4. In de sectie Basisbeginselen :

    1. Stel de naamruimte in waar Argo CD wordt uitgevoerd. Standaard is de naamruimte argocd.
    2. Schakel indien gewenst Redis High Availability (HA) in. Voor deze optie zijn ten minste vier knooppunten in het cluster vereist.
    3. Voeg eventueel aanvullende naamruimten toe die moeten worden gemonitord.
    4. Voor AKS-clusters kunt u desgewenst eenmalige aanmelding (SSO) inschakelen, zodat gebruikers zich kunnen aanmelden met behulp van Microsoft Entra ID, een toepassing en een of meer groepen opgeven om toegang tot de Argo CD-gebruikersinterface toe te staan.
    5. Schakel indien gewenst workloadidentiteit in om Argo CD veilig toegang te geven tot Azure services zonder geheimen op te slaan. Hiervoor selecteert u het vak Workloadidentiteit inschakelen en geeft u een beheerde identiteit en een Azure Container Registry op waaruit toepassingsmanifesten of containerartefacten moeten worden opgehaald.

    Schermopname van het tabblad Basisinformatie met opties voor het inschakelen van Argo CD op een cluster in de Azure-portal.

  5. Selecteer Volgende om door te gaan.

  6. Voor AKS-clusters waarvoor de invoegtoepassing voor toepassingsroutering is ingeschakeld, kunt u op het tabblad Ingress een Ingress-resource maken om verkeer naar een service te routeren. Selecteer indien gewenst Ingress inschakelen en voer uw Ingress-naam, certificaatgegevens en domeinnaam in. Selecteer Volgende om door te gaan.

  7. Controleer uw instellingen in de sectie Beoordelen en implementeren en selecteer Vervolgens Implementeren om Argo CD in te schakelen op uw cluster.

Toegang tot de Argo CD-gebruikersinterface

Als er geen bestaande ingangscontroller voor het AKS-cluster is, kan de Argo CD-gebruikersinterface rechtstreeks worden weergegeven met behulp van een LoadBalancer-service. Met de volgende opdracht wordt de Argo CD-gebruikersinterface weergegeven op poort 80 en 443.

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

Als u de Argo CD-gebruikersinterface wilt openen vanuit de Azure-portal, gaat u naar uw cluster. Selecteer GitOps in het servicemenu onder Instellingen. Selecteer vervolgens de koppeling die wordt weergegeven voor argo CD UI.

Schermopname van de koppeling voor toegang tot de Argo CD-gebruikersinterface in de Azure-portal.

Argo CD-toepassing implementeren

Nadat u de Argo CD-extensie hebt geïnstalleerd, kunt u een toepassing implementeren met behulp van de Argo CD UI of CLI. In het volgende voorbeeld wordt kubectl apply gebruikt om AKS Store te implementeren binnen een Argo CD-applicatie in het standaardproject van Argo CD in de naamruimte argocd.

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

De AKS Store-demotoepassing wordt geïnstalleerd in de argocd naamruimte. Volg deze instructies om de webpagina van de toepassing te bekijken. Zorg ervoor dat u het IP-adres bezoekt met behulp van http en niet https.

Extensieconfiguratie bijwerken

Argo CD-configuratiekaarten kunnen worden bijgewerkt na de installatie en andere configuratie-instellingen voor extensies met behulp van de volgende opdracht:

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

Werk de Argo CD-configuratiemap bij via de extensie, zodat de instellingen niet worden overschreven. Het toepassen van de Bicep-sjabloon is een alternatieve methode voor het gebruik van Azure CLI om de configuratie bij te werken.

De extensie verwijderen

Gebruik de volgende opdrachten om de extensie te verwijderen.

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

Volgende stappen

  • Problemen met bestanden en functieaanvragen in de Azure/AKS-opslagplaats. Zorg ervoor dat u het woord ArgoCD in de beschrijving of titel opneemt.
  • Verken het AKS-Platform technische codevoorbeeld, waarmee OSS Argo CD wordt geïmplementeerd met Backstage en Cluster API Provider voor Azure (CAPZ) of Crossplane.