Share via


KubernetesManifest@0 - Implementeren naar Kubernetes v0-taak

Gebruik een Kubernetes-manifesttaak in een build- of release-pijplijn om manifesten te bakken en te implementeren in Kubernetes-clusters met behulp van Helm-grafieken.

Syntax

# Deploy to Kubernetes v0
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@0
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #kubernetesServiceConnection: # string. Required when action != bake. Kubernetes service connection. 
    #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.
# Deploy Kubernetes manifests v0
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@0
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #kubernetesServiceConnection: # string. Required when action != bake. Kubernetes service connection. 
    #namespace: 'default' # string. Required when action != bake. Namespace. Default: default.
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm2' # 'helm2'. Optional. Use when action = bake. Render Engine. Default: helm2.
    #helmChart: # string. Required when action = bake && renderType = helm2. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm2. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm2. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm2. Overrides. 
    #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.

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.


kubernetesServiceConnection - Kubernetes-serviceverbinding
string. Vereist wanneer action != bake.

Hiermee geeft u een Kubernetes-serviceverbinding op.


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.


namespace - Naamruimte
string. Vereist wanneer action != bake. Standaardwaarde: default.

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 canary-varianten 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 kanarievarianten 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.


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

Hiermee geeft u de volledig gekwalificeerde URL van de afbeelding moet worden gebruikt voor vervangingen in de manifestbestanden. Deze invoer accepteert de specificatie van meerdere artefactvervangingen in een door nieuwe regels gescheiden vorm. Hier volgt een voorbeeld:

containers: |
  contosodemo.azurecr.io/foo:test1
  contosodemo.azurecr.io/bar:test2

In dit voorbeeld worden alle verwijzingen naar contosodemo.azurecr.io/foo en contosodemo.azurecr.io/bar gezocht in het afbeeldingsveld van de invoermanifestbestanden. Voor elke gevonden overeenkomst, de tag test1 of test2 vervangt de overeenkomende verwijzing.


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 type render dat wordt gebruikt om de manifestbestanden te produceren.


renderType - Render-engine
string. Optioneel. Gebruik wanneer action = bake. Toegestane waarden: helm2 (Helm 2). Standaardwaarde: helm2.

Hiermee geeft u het type render 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 docker-compose-bestandspad op.


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

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


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

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.


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

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.


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

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.


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

Hiermee geeft u extra onderdrukkingswaarden op die worden gebruikt via de opdrachtregeloptie --set wanneer manifestbestanden met Behulp van Helm worden gebakken.

Geef onderdrukkingswaarden op als key-value paren in de indeling key:value. Als u meerdere overschrijvende paren key-value gebruikt, geeft u elk key-value paar op in een afzonderlijke regel. Gebruik een nieuw regelteken als scheidingsteken tussen verschillende key-value paren.


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 moet worden opgegeven 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.


mergeStrategy - Strategie voor samenvoegen
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.


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 van 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 in het geheim in. 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 om te wachten voordat de status wordt beëindigd watch on rollout .


Opties voor taakbeheer

Alle taken hebben naast de taakinvoer besturingsopties. Zie Besturingsopties en algemene taakeigenschappen voor meer informatie.

Uitvoervariabelen

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

manifestsBundle
Hiermee geeft u de locatie van de manifestbundels die zijn gemaakt door bake-actie.

Opmerkingen

Notitie

Er is een nieuwere versie van deze taak beschikbaar die aanvullende ondersteuning biedt voor het op verschillende manieren targeten van een Kubernetes-cluster, met behulp van de connectionType eigenschap . Zie opmerkingen bij KubernetesManifest@1 en KubernetesManifest@1 serviceverbinding voor meer informatie

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 de bijbehorende tags en digests. Dezelfde invoer wordt vervangen door de niet-templatized manifestbestanden voordat deze worden gebruikt voor 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 voor traceerbaarheid: aantekeningen worden toegevoegd aan de geïmplementeerde Kubernetes-objecten om traceringsinformatie te vervangen. 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 de 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: het kiezen van de canary strategie met de deploy actie leidt tot het maken van workloadnamen 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, op percentages gebaseerde splitsing van verkeer mogelijk maken. Het 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 canary-varianten naast de stabiele variant.

      De service verzendt aanvragen naar pods van alle drie de workloadvarianten als aan de beperkingen van selectorlabels wordt voldaan. 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 releasepijplijnen of een vertragingstaak in YAML-pijplijnen. Voer de vergelijking uit voordat u de actie Niveau 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 tagVariable2 als tag toegevoegd aan de naam van tagVariable1 de afbeelding. U kunt ook digests opgeven in de invoer van containers 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

De volgende YAML-code toont 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 na de bovenstaande stap een handmatige interventie wordt ingesteld in de pijplijn, kan de pijplijn worden onderbroken, zodat de pijplijnbeheerder belangrijke metrische gegevens voor de basislijn- en canary-versies kan evalueren en kan beslissen 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