Delen via


KubernetesManifest@1 - Implementeren naar Kubernetes v1-taak

Gebruik Kubernetes-manifestbestanden om te implementeren in clusters of zelfs de manifestbestanden te maken die moeten worden gebruikt voor implementaties met behulp van Helm-grafieken.

Syntax

# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
    #kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection. 
    #azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription. 
    #azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group. 
    #kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster. 
    #useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
    #namespace: # string. Namespace. 
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
    #dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file. 
    #helmChart: # string. Required when action = bake && renderType = helm. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides. 
    #kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection. 
    #rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.

Invoerwaarden

action - Actie
string. Toegestane waarden: bake, createSecret (geheim maken), delete, deploy, patch, promote, scale, , reject. Standaardwaarde: deploy.

Hiermee geeft u de actie moet worden uitgevoerd.


connectionType - Serviceverbindingstype
string. Vereist wanneer action != bake. Toegestane waarden: azureResourceManager (Azure Resource Manager), kubernetesServiceConnection (Kubernetes Service Connection). Standaardwaarde: kubernetesServiceConnection.

Selecteer een verbindingstype voor de Kubernetes-service.

  • kubernetesServiceConnection (Kubernetes-serviceverbinding): hiermee kunt u een KubeConfig-bestand opgeven, een serviceaccount opgeven of een AKS-exemplaar importeren met de optie Azure-abonnement . Voor het importeren van een AKS-exemplaar met de optie Azure-abonnement is toegang tot het Kubernetes-cluster vereist tijdens de configuratie van de serviceverbinding.
  • azureResourceManager(Azure Resource Manager): hiermee kunt u een AKS-exemplaar selecteren. Heeft geen toegang tot het Kubernetes-cluster tijdens de configuratie van de serviceverbinding.

Zie Opmerkingen voor meer informatie.


kubernetesServiceConnection - Kubernetes-serviceverbinding
Invoeralias: kubernetesServiceEndpoint. string. Vereist wanneer action != bake && connectionType = kubernetesServiceConnection.

Hiermee geeft u een Kubernetes-serviceverbinding op.


azureSubscriptionConnection - Azure-abonnement
Invoeralias: azureSubscriptionEndpoint. string. Vereist wanneer action != bake && connectionType = azureResourceManager.

Selecteer het Azure Resource Manager-abonnement dat Azure Container Registry bevat. Opmerking: als u een nieuwe serviceverbinding wilt configureren, selecteert u het Azure-abonnement in de lijst en klikt u op Autoriseren. Als uw abonnement niet wordt vermeld of als u een bestaande service-principal wilt gebruiken, kunt u een Azure-serviceverbinding instellen met de knop Toevoegen of Beheren.


azureResourceGroup - Resourcegroep
string. Vereist wanneer action != bake && connectionType = azureResourceManager.

Selecteer een Azure-resourcegroep.


kubernetesCluster - Kubernetes-cluster
string. Vereist wanneer action != bake && connectionType = azureResourceManager.

Selecteer een beheerd Azure-cluster.


useClusterAdmin - Referenties van clusterbeheerder gebruiken
boolean. Optioneel. Gebruik wanneer connectionType = azureResourceManager. Standaardwaarde: false.

Gebruik referenties voor clusterbeheerder in plaats van standaardgebruikersreferenties voor het cluster.


namespace - Naamruimte
string.

Hiermee geeft u de naamruimte voor de opdrachten met behulp van de –namespace vlag. Als de naamruimte niet is opgegeven, worden de opdrachten uitgevoerd in de standaardnaamruimte.


strategy - Strategie
string. Optioneel. Gebruik wanneer action = deploy || action = promote || action = reject. Toegestane waarden: canary, none. Standaardwaarde: none.

Hiermee geeft u de implementatiestrategie op die wordt gebruikt in de deploy actie vóór een promote actie of reject actie. canary Momenteel is de enige acceptabele implementatiestrategie.


trafficSplitMethod - Methode voor het splitsen van verkeer
string. Optioneel. Gebruik wanneer strategy = canary. Toegestane waarden: pod, smi. Standaardwaarde: pod.

Voor de waarde smiwordt het percentage verkeer gesplitst op aanvraagniveau met behulp van een service-mesh. Een service-mesh moet worden ingesteld door een clusterbeheerder. Deze taak verwerkt de indeling van SMI TrafficSplit-objecten .

Voor de waarde podis de percentagesplitsing niet mogelijk op aanvraagniveau als er geen service-mesh is. In plaats daarvan wordt het invoerpercentage gebruikt om de replica's voor basislijn en canary te berekenen. De berekening is een percentage replica's dat is opgegeven in de invoermanifesten voor de stabiele variant.


percentage - Percentage
string. Vereist wanneer strategy = Canary && action = deploy. Standaardwaarde: 0.

Het percentage dat wordt gebruikt voor het berekenen van het aantal replica's van de basislijnvarianten en kanarievarianten van de werkbelastingen die zijn opgenomen in manifestbestanden.

Voor het opgegeven invoerpercentage berekent u het volgende:

(percentage × aantal replica's) / 100

Als het resultaat geen geheel getal is, wordt de wiskundige basis van het resultaat gebruikt wanneer basislijn- en kanarievarianten worden gemaakt.

Stel dat de implementatie hello-world zich in het manifestbestand van de invoer bevindt en dat de volgende regels zich in de taakinvoer bevinden:

replicas: 4
strategy: canary
percentage: 25

In dit geval worden de implementaties hello-world-baseline en hello-world-canary gemaakt met elk één replica. De basislijnvariant wordt gemaakt met dezelfde installatiekopieën en tags als de stabiele versie, de variant met vier replica's vóór de implementatie. De canary-variant wordt gemaakt met de installatiekopie en tag die overeenkomen met de zojuist geïmplementeerde wijzigingen.


baselineAndCanaryReplicas - Basislijn- en canary-replica's
string. Vereist wanneer strategy = Canary && action = deploy && trafficSplitMethod = SMI. Standaardwaarde: 1.

Wanneer u instelt trafficSplitMethod op smi, wordt het percentage verkeerssplitsing beheerd in het service mesh-vlak. U kunt het werkelijke aantal replica's voor kanarie- en basislijnvarianten onafhankelijk van de verkeerssplitsing beheren.

Stel dat in het manifest voor de invoerimplementatie 30 replica's voor de stabiele variant worden opgegeven. Ga er ook van uit dat u de volgende invoer voor de taak opgeeft:

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

In dit geval ontvangt de stabiele variant 80% van het verkeer, terwijl de basislijn- en canary-varianten elk de helft van de opgegeven 20% ontvangen. Basislijn- en canary-varianten ontvangen niet elk drie replica's. In plaats daarvan ontvangen ze het opgegeven aantal replica's, wat betekent dat ze elk één replica ontvangen.


manifests - Manifesteert
string. Vereist wanneer action = deploy || action = promote || action = reject.

Hiermee geeft u het pad naar de manifestbestanden die moeten worden gebruikt voor implementatie. Elke regel vertegenwoordigt één pad. Een patroon voor bestandsvergelijking is een acceptabele waarde voor elke regel.


containers - Containers
string. Optioneel. Gebruik wanneer action = deploy || action = promote || action = bake.

Hiermee geeft u de volledig gekwalificeerde resource-URL van de installatiekopie die moet worden gebruikt voor vervangingen in de manifestbestanden. De URL contosodemo.azurecr.io/helloworld:test is een voorbeeld.


imagePullSecrets - ImagePullSecrets
string. Optioneel. Gebruik wanneer action = deploy || action = promote.

Hiermee geeft u een invoer met meerdere regels op waarbij elke regel de naam bevat van een Docker-registergeheim dat al is ingesteld binnen het cluster. Elke geheime naam wordt toegevoegd onder imagePullSecrets voor de workloads die worden gevonden in de invoermanifestbestanden.


renderType - Render-engine
string. Optioneel. Gebruik wanneer action = bake. Toegestane waarden: helm, kompose, kustomize. Standaardwaarde: helm.

Hiermee geeft u het weergavetype op dat wordt gebruikt om de manifestbestanden te produceren.


dockerComposeFile - Pad naar docker compose-bestand
string. Vereist wanneer action = bake && renderType = kompose.

Hiermee geeft u een pad naar een docker-compose-bestand op.


helmChart - Helm-grafiek
string. Vereist wanneer action = bake && renderType = helm.

Hiermee geeft u het Helm-diagrampad op dat moet worden gebakken.


releaseName - Helm-releasenaam
string. Optioneel. Gebruik wanneer action = bake && renderType = helm.

Hiermee geeft u de naam van de Helm-release te gebruiken.


overrideFiles - Bestanden overschrijven
string. Optioneel. Gebruik wanneer action = bake && renderType = helm.

Hiermee geeft u een invoer met meerdere regels op die het pad naar de onderdrukkingsbestanden accepteert. De bestanden worden gebruikt wanneer manifestbestanden uit Helm-grafieken worden gebakken.


overrides - Overschrijft
string. Optioneel. Gebruik wanneer action = bake && renderType = helm.

Hiermee geeft u de onderdrukkingswaarden die moeten worden ingesteld.


kustomizationPath - Kustomization-pad
string. Optioneel. Gebruik wanneer action = bake && renderType = kustomize.

Hiermee geeft u het argument op dat het pad naar de map met het bestand moet zijn, of een GIT-opslagplaats-URL met een padachtervoegsel dat aangeeft same met betrekking tot de hoofdmap van de opslagplaats.


resourceToPatch - Resource om te patchen
string. Vereist wanneer action = patch. Toegestane waarden: file, name. Standaardwaarde: file.

Geeft een van de volgende patchmethoden aan:

  • Een manifestbestand identificeert de objecten die moeten worden gepatcht.
  • Een afzonderlijk object wordt geïdentificeerd op soort en naam als het patchdoel.

Acceptabele waarden zijn bestand en naam.


resourceFileToPatch - Bestandspad
string. Vereist wanneer action = patch && resourceToPatch = file.

Hiermee geeft u het pad naar het bestand dat wordt gebruikt voor een patch.


kind - Soort
string. Vereist wanneer action = scale || resourceToPatch = name. Toegestane waarden: deployment, replicaset, statefulset.

Hiermee geeft u het type K8s-object op, zoals deployment, replicaSet en meer.


name - Naam
string. Vereist wanneer action = scale || resourceToPatch = name.

Hiermee geeft u de naam van het K8s-object.


replicas - Aantal replica's
string. Vereist wanneer action = scale.

Hiermee geeft u het aantal replica's om naar te schalen.


replicas - Aantal replica's
string. Vereist wanneer action = scale.

Hiermee geeft u de naam van het K8s-object.


mergeStrategy - Samenvoegstrategie
string. Vereist wanneer action = patch. Toegestane waarden: json, merge, strategic. Standaardwaarde: strategic.

Hiermee geeft u het type patch dat wordt opgegeven.


arguments - Argumenten
string. Optioneel. Gebruik wanneer action = delete.

Hiermee geeft u de argumenten voor de kubectl delete opdracht. Een voorbeeld is: arguments: deployment hello-world foo-bar


patch - Patch
string. Vereist wanneer action = patch.

Hiermee geeft u de inhoud van de patch op.


secretType - Type geheim
string. Vereist wanneer action = createSecret. Toegestane waarden: dockerRegistry, generic. Standaardwaarde: dockerRegistry.

Hiermee maakt of werkt u een algemene of docker imagepullsecretbij. Geef op dockerRegistry om het imagepullsecret geselecteerde register te maken of bij te werken. Een imagePullSecret is een manier om een geheim met een containerregisterwachtwoord door te geven aan de Kubelet, zodat deze een persoonlijke installatiekopie namens uw Pod kan ophalen.


secretName - Geheime naam
string. Optioneel. Gebruik wanneer action = createSecret.

Hiermee geeft u de naam van het geheim. U kunt deze geheime naam gebruiken in het Kubernetes YAML-configuratiebestand.


secretArguments - Argumenten
string. Optioneel. Gebruik wanneer action = createSecret && secretType = generic.

Hiermee geeft u sleutels en letterlijke waarden die in het geheim moeten worden ingevoegd. Bijvoorbeeld --from-literal=key1=value1--from-literal=key2="top secret".


dockerRegistryEndpoint - Verbinding met docker-registerservice
string. Optioneel. Gebruik wanneer action = createSecret && secretType = dockerRegistry.

Hiermee geeft u de referenties van de opgegeven serviceverbinding die worden gebruikt voor het maken van een Docker-registergeheim binnen het cluster. Manifestbestanden onder het imagePullSecrets veld kunnen vervolgens verwijzen naar de naam van dit geheim.


rolloutStatusTimeout - Time-out voor implementatiestatus
string. Optioneel. Gebruik wanneer action = deploy || action = patch || action = scale || action = promote. Standaardwaarde: 0.

Hiermee geeft u de tijdsduur (in seconden) op die moet worden gewacht voordat de status wordt beëindigd watch on rollout .


Opties voor taakbeheer

Alle taken hebben besturingsopties naast hun taakinvoer. Zie Opties voor besturingselementen en algemene taakeigenschappen voor meer informatie.

Uitvoervariabelen

Deze taak definieert de volgende uitvoervariabelen, die u kunt gebruiken in downstreamstappen, taken en fasen.

manifestsBundle
De locatie van de manifestbundels die zijn gemaakt door de bak-actie

Opmerkingen

Aandachtspunten voor kubernetes-serviceverbindingen bij het openen van AKS

U kunt een Kubernetes-serviceverbinding maken met een van de volgende opties.

  • KubeConfig
  • Serviceaccount
  • Azure-abonnement

Schermopname van het kiezen van een verificatiemethode voor een Kubernetes-serviceverbinding.

Wanneer u de optie Azure-abonnement selecteert, moet Kubernetes tijdens de configuratietijd van de serviceverbinding toegankelijk zijn voor Azure DevOps. Er kunnen verschillende redenen zijn waarom een serviceverbinding niet kan worden gemaakt, bijvoorbeeld omdat u een privécluster hebt gemaakt of dat lokale accounts voor het cluster zijn uitgeschakeld. In deze gevallen kan Azure DevOps geen verbinding maken met uw cluster tijdens de configuratietijd van de serviceverbinding en ziet u een vastgelopen scherm Naamruimten laden .

Schermopname van het kiezen van een dialoogvenster voor verbindingsverificatie van de Kubernetes-service die vastloopt bij het laden van naamruimten.

Vanaf Kubernetes 1.24 worden tokens met een lange levensduur niet meer standaard gemaakt. Kubernetes raadt aan geen tokens met een lange levensduur te gebruiken. Als gevolg hiervan hebben taken die gebruikmaken van een Kubernetes-serviceverbinding die is gemaakt met de optie Azure-abonnement geen toegang tot het permanente token dat is vereist voor verificatie en hebben ze geen toegang tot uw Kubernetes-cluster. Dit resulteert ook in het geblokkeerde dialoogvenster Naamruimten laden .

Azure Resource Manager Service Connection gebruiken om toegang te krijgen tot AKS

Voor AKS-klanten biedt het verbindingstype Azure Resource Manager-service de beste methode om verbinding te maken met een privécluster of een cluster waarvoor lokale accounts zijn uitgeschakeld. Deze methode is niet afhankelijk van de clusterconnectiviteit op het moment dat u een serviceverbinding maakt. Toegang tot AKS wordt uitgesteld tot pijplijnruntime, wat de volgende voordelen heeft:

  • Toegang tot een (privé) AKS-cluster kan worden uitgevoerd vanuit een zelf-hostende of schaalsetagent met zichtlijn naar het cluster.
  • Er wordt een token gemaakt voor elke taak die gebruikmaakt van een Azure Resource Manager serviceverbinding. Dit zorgt ervoor dat u verbinding maakt met Kubernetes met een token met een korte levensduur. Dit is de Kubernetes-aanbeveling.
  • AKS is toegankelijk, zelfs wanneer lokale accounts zijn uitgeschakeld.

Veelgestelde vragen over serviceverbindingen

Ik krijg het volgende foutbericht: Kan geen geheim vinden dat is gekoppeld aan het serviceaccount. Wat gebeurt er?

U gebruikt de kubernetes-serviceverbinding met de optie Azure-abonnement. Deze methode wordt bijgewerkt om tokens met een lange levensduur te maken. Dit is naar verwachting halverwege mei beschikbaar. Het wordt echter aanbevolen om te beginnen met het azure-serviceverbindingstype en niet om tokens met een lange levensduur te gebruiken volgens de Richtlijnen van Kubernetes.

Ik gebruik AKS en wil niets wijzigen. Kan ik taken blijven gebruiken met de Kubernetes-serviceverbinding?

Deze methode wordt bijgewerkt om tokens met een lange levensduur te maken. Dit is naar verwachting halverwege mei beschikbaar. Houd er echter rekening mee dat deze benadering in strijd is met kubernetes-richtlijnen.

Ik gebruik de Kubernetes-taken en kubernetes-serviceverbinding, maar niet AKS. Moet ik me zorgen maken?

Uw taken blijven werken zoals voorheen.

Wordt het verbindingstype van de Kubernetes-service verwijderd?

Onze Kubernetes-taken werken met elk Kubernetes-cluster, ongeacht waar ze worden uitgevoerd. De Kubernetes-serviceverbinding blijft bestaan.

Ik ben een AKS-klant en alles loopt goed, moet ik actie ondernemen?

U hoeft niets te wijzigen. Als u de Kubernetes-serviceverbinding en het geselecteerde Azure-abonnement gebruikt tijdens het maken, moet u rekening houden met de Kubernetes-richtlijnen voor het gebruik van tokens met een lange levensduur.

Ik maak een Kubernetes-omgeving en ik heb geen optie om serviceverbindingen te gebruiken

Als u geen toegang hebt tot uw AKS tijdens het maken van de omgeving, kunt u een lege omgeving gebruiken en de connectionType invoer instellen op een Azure Resource Manager-serviceverbinding.

Ik heb AKS geconfigureerd met Azure Active Directory RBAC en mijn pijplijn werkt niet. Lossen deze updates dit op?

Toegang tot Kubernetes wanneer AAD RBAC is ingeschakeld, is niet gerelateerd aan het maken van tokens. Om een interactieve prompt te voorkomen, ondersteunen we kubelogin in een toekomstige update.

Gebruik een Kubernetes-manifesttaak in een build- of release-pijplijn om manifesten te bakken en te implementeren in Kubernetes-clusters.

Deze taak ondersteunt het volgende:

  • Vervanging van artefacten: de implementatieactie voert een lijst met containerinstallatiekopieën in die u kunt opgeven, samen met hun tags en digests. Dezelfde invoer wordt vervangen door de niet-getemplatiseerde manifestbestanden voordat deze worden toegepast op het cluster. Deze vervanging zorgt ervoor dat de clusterknooppunten de juiste versie van de installatiekopie ophalen.

  • Manifeststabiliteit: de implementatiestatus van de geïmplementeerde Kubernetes-objecten wordt gecontroleerd. De stabiliteitscontroles worden opgenomen om te bepalen of de taakstatus geslaagd of mislukt is.

  • Aantekeningen bij traceerbaarheid: aantekeningen worden toegevoegd aan de geïmplementeerde Kubernetes-objecten om traceringsinformatie over elkaar te plaatsen. De volgende aantekeningen worden ondersteund:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/execution
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • Geheime verwerking: Met deze createSecret actie kunnen Docker-registergeheimen worden gemaakt met behulp van Docker-registerserviceverbindingen. Hiermee kunnen ook algemene geheimen worden gemaakt met behulp van variabelen voor tekst zonder opmaak of met geheime variabelen. Voordat u naar het cluster gaat implementeren, kunt u de secrets invoer samen met de deploy actie gebruiken om de invoermanifestbestanden uit te voeren met de juiste imagePullSecrets waarde.

  • Manifest bakken: Met de bake actie van de taak kunnen sjablonen in Kubernetes-manifestbestanden worden gebakken. De actie maakt gebruik van hulpprogramma's zoals Helm, Compose en Kustomize. Met bakken zijn deze Kubernetes-manifestbestanden bruikbaar voor implementaties in het cluster.

  • Implementatiestrategie: Als u de canary strategie kiest met de deploy actie, worden workloadnamen gemaakt met -baseline het achtervoegsel en -canary. De taak ondersteunt twee methoden voor het splitsen van verkeer:

    • Service Mesh Interface: SMI-abstractie ( Service Mesh Interface ) maakt configuratie mogelijk met service mesh-providers zoals Linkerd en Istio. De Kubernetes Manifest-taak wijst SMI-objecten TrafficSplit toe aan de stabiele, basislijn- en canary-services tijdens de levenscyclus van de implementatiestrategie.

      Canary-implementaties die zijn gebaseerd op een service-mesh en deze taak gebruiken, zijn nauwkeuriger. Deze nauwkeurigheid wordt veroorzaakt door de manier waarop service mesh-providers de gedetailleerde verdeling van verkeer op basis van percentages mogelijk maken. De service-mesh maakt gebruik van het serviceregister en sidecar-containers die in pods worden geïnjecteerd. Deze injectie vindt plaats naast toepassingscontainers om de gedetailleerde verkeerssplitsing te bereiken.

    • Kubernetes zonder service-mesh: als er geen service-mesh is, krijgt u mogelijk niet het exacte percentagesplitsing dat u wilt op aanvraagniveau. U kunt echter kanarie-implementaties uitvoeren met behulp van basislijn- en kanarievarianten naast de stabiele variant.

      De service verzendt aanvragen naar pods van alle drie de workloadvarianten als aan de beperkingen van selectorlabels wordt voldaan. Het Kubernetes-manifest honoreert deze aanvragen bij het maken van basislijn- en canary-varianten. Dit routeringsgedrag bereikt het beoogde effect van het routeren van slechts een deel van het totale aantal aanvragen naar de kanarie.

    Vergelijk de basis- en canary-workloads met behulp van een handmatige interventietaak in release-pijplijnen of een vertragingstaak in YAML-pijplijnen. Voer de vergelijking uit voordat u de actie verhogen of negeren van de taak gebruikt.

Actie implementeren

De volgende YAML-code is een voorbeeld van implementatie in een Kubernetes-naamruimte met behulp van manifestbestanden:

steps:
- task: KubernetesManifest@0
  displayName: Deploy
  inputs:
    kubernetesServiceConnection: someK8sSC1
    namespace: default
    manifests: |
      manifests/deployment.yml
      manifests/service.yml
    containers: |
      foo/demo:$(tagVariable1)
      bar/demo:$(tagVariable2)
    imagePullSecrets: |
      some-secret
      some-other-secret

In het bovenstaande voorbeeld probeert de taak overeenkomsten te vinden voor de afbeeldingen foo/demo en bar/demo in de afbeeldingsvelden van manifestbestanden. Voor elke gevonden overeenkomst wordt de waarde van of tagVariable1tagVariable2 als tag toegevoegd aan de naam van de afbeelding. U kunt ook digests opgeven in de containerinvoer voor het vervangen van artefacten.

Notitie

Hoewel u acties , en reject kunt maken deploypromotemet YAML-invoer met betrekking tot de implementatiestrategie, is ondersteuning voor een handmatige interventietaak momenteel niet beschikbaar voor build-pijplijnen.

Voor release-pijplijnen raden we u aan om acties en invoer met betrekking tot de implementatiestrategie in de volgende volgorde te gebruiken:

  1. Een implementatieactie die is opgegeven met strategy: canary en percentage: $(someValue).
  2. Een handmatige interventietaak, zodat u de pijplijn kunt onderbreken en de basislijnvariant kunt vergelijken met de canary-variant.
  3. Een promotieactie die wordt uitgevoerd als een handmatige interventietaak wordt hervat en een weigeringsactie die wordt uitgevoerd als een handmatige interventietaak wordt geweigerd.

Geheime actie maken

De volgende YAML-code toont een voorbeeld van het maken van Docker-registergeheimen met behulp van een verbinding met de Docker Registry-service:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

Deze YAML-code toont een voorbeeld van het maken van algemene geheimen:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

Actie Bakken

De volgende YAML-code is een voorbeeld van het bakken van manifestbestanden uit Helm-grafieken. Let op het gebruik van een naaminvoer in de eerste taak. Naar deze naam wordt later verwezen vanuit de implementatiestap voor het opgeven van het pad naar de manifesten die zijn geproduceerd door de bake-stap.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Helm chart
  inputs:
    action: bake
    helmChart: charts/sample
    overrides: 'image.repository:nginx'

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: someK8sSC
    namespace: default
    manifests: $(bake.manifestsBundle)
    containers: |
      nginx: 1.7.9

Notitie

Als u Helm rechtstreeks wilt gebruiken voor het beheren van releases en terugdraaiacties, raadpleegt u de taak Helm-grafieken verpakken en implementeren.

Kustomize-voorbeeld

De volgende YAML-code is een voorbeeld van het bakken van manifestbestanden die zijn gegenereerd met Kustomize die een kustomization.yaml bestand bevatten.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from kustomization path
  inputs:
    action: bake
    renderType: kustomize
    kustomizationPath: folderContainingKustomizationFile

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Kompose-voorbeeld

De volgende YAML-code is een voorbeeld van het bakken van manifestbestanden die zijn gegenereerd met Kompose, een conversieprogramma voor Docker Compose.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Docker Compose
  inputs:
    action: bake
    renderType: kompose
    dockerComposeFile: docker-compose.yaml

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Schaalactie

In de volgende YAML-code ziet u een voorbeeld van het schalen van objecten:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

Patchactie

De volgende YAML-code toont een voorbeeld van het patchen van objecten:

steps:
- task: KubernetesManifest@0
  displayName: Patch
  inputs: 
    action: patch
    kind: pod
    name: demo-5fbc4d6cd9-pgxn4
    mergeStrategy: strategic
    patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
    kubernetesServiceConnection: someK8sSC
    namespace: default

Actie Verwijderen

Deze YAML-code toont een voorbeeld van het verwijderen van een object:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

Problemen oplossen

Mijn Kubernetes-cluster bevindt zich achter een firewall en ik gebruik gehoste agents. Hoe kan ik op dit cluster implementeren?

U kunt gehoste agents toegang verlenen via uw firewall door de IP-adressen voor de gehoste agents toe te staan. Zie IP-bereiken van agent voor meer details.

Hoe werken aanvragen voor stabiele en variante serviceroutes met canary-implementaties?

De labelselectorrelatie tussen pods en services in Kubernetes maakt het mogelijk implementaties in te stellen, zodat één service aanvragen naar zowel de stabiele als de canary-variant routeert. De Kubernetes-manifesttaak gebruikt deze voor canary-implementaties.

Als de taak de invoer van action: deploy en strategy: canarybevat voor elke workload (Implementatie, ReplicaSet, Pod, ...) die is gedefinieerd in de invoermanifestbestanden, worden een -baseline en -canary variant van de implementatie gemaakt. In dit voorbeeld is er een implementatie sampleapp in het invoermanifestbestand en wordt na voltooiing van uitvoering nummer 22 van de pijplijn de stabiele variant van deze implementatie met de naam sampleapp geïmplementeerd in het cluster. In de volgende uitvoering (in dit geval run number 23) zou de Kubernetes-manifesttaak met action: deploy en strategy: canary resulteren in het maken van sampleapp-baseline- en sampleapp-canary-implementaties waarvan het aantal replica's wordt bepaald door het product van percentage de taakinvoer met de waarde van het gewenste aantal replica's voor de laatste stabiele variant van sampleapp volgens de invoermanifestbestanden.

Met uitzondering van het aantal replica's heeft de basislijnversie dezelfde configuratie als de stabiele variant, terwijl de canary-versie de nieuwe wijzigingen bevat die worden geïntroduceerd door de huidige uitvoering (in dit geval run number 23). Als er na de bovenstaande stap een handmatige interventie in de pijplijn wordt ingesteld, kan de pijplijn worden onderbroken, zodat de pijplijnbeheerder belangrijke metrische gegevens voor de basislijn- en canary-versies kan evalueren en de beslissing kan nemen of de kanariewijzigingen veilig en goed genoeg zijn voor een volledige implementatie.

Deaction: promote invoer en strategy: canary of action: reject en strategy: canary van de Kubernetes-manifesttaken kunnen worden gebruikt om respectievelijk de canary-wijzigingen te promoten of te negeren. Houd er rekening mee dat in beide gevallen aan het einde van deze stap alleen de stabiele variant van de werkbelastingen die zijn gedeclareerd in de invoermanifestbestanden in het cluster wordt geïmplementeerd, terwijl de tijdelijke basislijn en canary-versies worden opgeschoond.

Vereisten

Vereiste Beschrijving
Pijplijntypen YAML, klassieke build, klassieke release
Wordt uitgevoerd op Agent, DeploymentGroup
Eisen Geen
Functies Deze taak voldoet niet aan eventuele vereisten voor volgende taken in de taak.
Opdrachtbeperkingen Alle
Instelbare variabelen Alle
Agentversie Alle ondersteunde agentversies.
Taakcategorie Implementeren