Delen via


KubernetesManifest@0 - Implementeren in Kubernetes v0-taak

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

Deze versie van de taak is afgeschaft; gebruik KubernetesManifest@1 om te profiteren van de nieuwste functies, zoals workloadidentiteitsfederatie.

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

Syntaxis

# 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.

Invoer

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

Geeft de actie aan die moet worden uitgevoerd.


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

Hiermee geeft u een Kubernetes-serviceverbinding.


namespace - naamruimte
string.

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


strategy - strategie
string. Facultatief. Gebruiken 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. Momenteel is canary de enige acceptabele implementatiestrategie.


trafficSplitMethod - methode Verkeer splitsen
string. Facultatief. Gebruiken 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. Met deze taak wordt de indeling van SMI-TrafficSplit objecten verwerkt.

Voor de waarde podis de percentagesplitsing niet mogelijk op aanvraagniveau als er geen service-mesh is. In plaats daarvan wordt het percentage invoer gebruikt voor het berekenen van de replica's voor de basislijn en kanarie. 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 voor basislijnvarianten en canary-varianten van de werkbelastingen die zijn opgenomen in manifestbestanden.

Voor de opgegeven percentageinvoer berekent u:

(percentage × aantal replica's) / 100

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

Stel dat de implementatie hello-world zich in het invoermanifestbestand 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 met elk één replica gemaakt. De basislijnvariant wordt gemaakt met dezelfde installatiekopieën en tags als de stabiele versie. Dit is de variant met vier replica's vóór de implementatie. De canary-variant wordt gemaakt met de installatiekopie en tag die overeenkomt 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 trafficSplitMethod instelt op smi, wordt het percentage verkeer gesplitst in het mesh-vlak van de service. U kunt het werkelijke aantal replica's voor kanarie- en basislijnvarianten onafhankelijk van de splitsing van het verkeer beheren.

Stel dat in het invoerimplementatiemanifest 30 replica's voor de stabiele variant worden opgegeven. Stel ook 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 canaire 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 - manifesten
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 bestandskoppeling is een acceptabele waarde voor elke regel.


containers - Containers
string. Facultatief. Gebruiken wanneer action = deploy || action = promote || action = bake.

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


imagePullSecrets - ImagePullSecrets
string. Facultatief. Gebruiken 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 in het cluster is ingesteld. Elke geheime naam wordt toegevoegd onder imagePullSecrets voor de werkbelastingen die zijn gevonden in de invoermanifestbestanden.


renderType - Render Engine-
string. Facultatief. Gebruiken 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 docker-compose-bestandspad.


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

Hiermee geeft u het Helm-grafiekpad op om te bakken.


releaseName - helm-releasenaam
string. Facultatief. Gebruiken wanneer action = bake && renderType = helm.

Hiermee geeft u de Helm-releasenaam op die moet worden gebruikt.


overrideFiles - Bestanden overschrijven
string. Facultatief. Gebruiken 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 - onderdrukkingen
string. Facultatief. Gebruiken wanneer action = bake && renderType = helm.

Hiermee geeft u de onderdrukkingswaarden op die moeten worden ingesteld.


kustomizationPath - Kustomization Path
string. Facultatief. Gebruiken wanneer action = bake && renderType = kustomize.

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


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 soort 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 op dat moet worden geschaald.


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. Facultatief. Gebruiken wanneer action = delete.

Hiermee geeft u de argumenten voor de opdracht kubectl delete. 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 algemeen of docker-imagepullsecret. Geef dockerRegistry op om de imagepullsecret van het 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 kan ophalen namens uw pod.


secretName - geheime naam
string. Facultatief. Gebruiken 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. Facultatief. Gebruiken wanneer action = createSecret && secretType = generic.

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


dockerRegistryEndpoint - docker-registerserviceverbinding
string. Facultatief. Gebruiken 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 veld imagePullSecrets kunnen vervolgens verwijzen naar de naam van dit geheim.


rolloutStatusTimeout - time-out voor implementatiestatus
string. Facultatief. Gebruiken wanneer action = deploy || action = patch || action = scale || action = promote. Standaardwaarde: 0.

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


Opties voor taakbeheer

Alle taken hebben besturingsopties naast hun taakinvoer. Zie Opties en algemene taakeigenschappenvoor meer informatie.

Uitvoervariabelen

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

manifestsBundle
Hiermee geeft u de locatie op 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 instellen van een Kubernetes-cluster, met behulp van de eigenschap connectionType. Zie KubernetesManifest@1 en KubernetesManifest@1 serviceverbindingsaanmerkingen voor meer informatie

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

Deze taak ondersteunt het volgende:

  • Artefact vervangen: de implementatieactie voert een lijst met containerinstallatiekopieën in die u samen met de bijbehorende tags en samenvattingen kunt opgeven. Dezelfde invoer wordt vervangen in de niet-templatized manifestbestanden voordat de toepassing op het cluster wordt uitgevoerd. 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 een succes of een fout 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/uitvoering
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • Secret handling: met de actie createSecret kunnen Docker-registergeheimen worden gemaakt met behulp van Docker-registerserviceverbindingen. Hiermee kunnen ook algemene geheimen worden gemaakt met behulp van variabelen zonder opmaak of geheime variabelen. Voordat u de implementatie naar het cluster uitvoert, kunt u de secrets invoer samen met de actie deploy gebruiken om de invoermanifestbestanden met de juiste imagePullSecrets waarde te verbeteren.

  • Bake-manifest: met de bake actie van de taak kunt u sjablonen bakken in Kubernetes-manifestbestanden. De actie maakt gebruik van hulpprogramma's zoals Helm, Compose en Kustomize. Met bakken zijn deze Kubernetes-manifestbestanden bruikbaar voor implementaties naar het cluster.

  • Implementatiestrategie: als u de canary strategie kiest met de actie deploy, wordt het achtervoegsel van namen van werkbelastingen met -baseline en -canarygemaakt. De taak ondersteunt twee methoden voor het splitsen van verkeer:

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

      Canary-implementaties die zijn gebaseerd op een service-mesh en die deze taak gebruiken, zijn nauwkeuriger. Deze nauwkeurigheid is te wijten aan de manier waarop service-mesh-providers de gedetailleerd op percentage gebaseerde splitsing van verkeer mogelijk maken. De service-mesh maakt gebruik van het serviceregister en sidecarcontainers 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 percentage dat u wilt splitsen op aanvraagniveau. U kunt echter canary-implementaties uitvoeren met behulp van basislijn- en kanarievarianten naast de stabiele variant.

      De service verzendt aanvragen naar pods van alle drie de workloadvarianten, omdat aan de beperkingen voor selectorlabels wordt voldaan. Kubernetes Manifest volgt deze aanvragen bij het maken van basislijn- en canary-varianten. Dit routeringsgedrag bereikt het beoogde effect van het routeren van slechts een deel van de totale aanvragen naar de canary.

    Vergelijk de basislijn- en kanarieworkloads 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 afwijzen van de taak gebruikt.

Implementatieactie

De volgende YAML-code is een voorbeeld van het implementeren naar 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 tagVariable1 of tagVariable2 toegevoegd als een tag aan de naam van de afbeelding. U kunt ook samenvattingen opgeven in de containersinvoer voor het vervangen van artefacten.

Notitie

Hoewel u deploy, promoteen reject acties kunt maken met YAML-invoer met betrekking tot de implementatiestrategie, is ondersteuning voor een handmatige interventietaak momenteel niet beschikbaar voor buildpijplijnen.

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

  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 Docker Registry-serviceverbinding:

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 Baken

De volgende YAML-code is een voorbeeld van bakmanifestbestanden uit Helm-grafieken. Let op het gebruik van een naaminvoer in de eerste taak. Deze naam wordt later verwezen uit 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 het Pakket en implementeert u helm-grafiekentaak.

Voorbeeld van Kustomize

De volgende YAML-code is een voorbeeld van bakmanifestbestanden 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)

Voorbeeld van kompose

De volgende YAML-code is een voorbeeld van bakmanifestbestanden 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 objectpatching:

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 voorbeeldobjectverwijdering:

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 dit voor canary-implementaties.

Als de taak de invoer van action: deploy en strategy: canarybevat, worden voor elke workload (Implementatie, ReplicaSet, Pod, ...) gedefinieerd in de invoermanifestbestanden een -baseline en -canary variant van de implementatie gemaakt. In dit voorbeeld is er een implementatie sampleapp in het invoermanifestbestand en dat na voltooiing van het uitvoeringsnummer 22 van de pijplijn de stabiele variant van deze implementatie met de naam sampleapp in het cluster wordt geïmplementeerd. In de volgende uitvoering (in dit geval uitvoering nummer 23), kubernetes manifesttaak met action: deploy en strategy: canary zou resulteren in het maken van sampleapp-baseline- en sampleapp-canary-implementaties waarvan het aantal replica's wordt bepaald door het product van percentage 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 door de huidige uitvoering worden geïntroduceerd (in dit geval het nummer 23). Als er na de bovenstaande stap een handmatige interventie in de pijplijn is ingesteld, kan de pijplijn worden onderbroken, zodat de pijplijnbeheerder belangrijke metrische gegevens voor de basislijn en kanarieversies evalueren en de beslissing nemen over of de canary-wijzigingen veilig en goed genoeg zijn voor een volledige implementatie.

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

Vereisten

Voorwaarde Beschrijving
Pijplijntypen YAML, klassieke build, klassieke release
Wordt uitgevoerd op Agent, DeploymentGroup
eisen Geen
mogelijkheden Deze taak voldoet niet aan de vereisten voor volgende taken in de taak.
opdrachtbeperkingen Welk dan ook
variabelen instellen Welk dan ook
Agentversie Alle ondersteunde agentversies.
Taakcategorie Implementeren