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 smi
wordt 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 pod
is 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 desecrets
invoer samen met de actiedeploy
gebruiken om de invoermanifestbestanden met de juisteimagePullSecrets
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 actiedeploy
, wordt het achtervoegsel van namen van werkbelastingen met-baseline
en-canary
gemaakt. De taak ondersteunt twee methoden voor het splitsen van verkeer:Service Mesh Interface: met SMI-abstractie (Service Mesh Interface) kunnen service-meshproviders, zoals
Linkerd
enIstio
, 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
, promote
en 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:
- Een implementatieactie die is opgegeven met
strategy: canary
enpercentage: $(someValue)
. - Een handmatige interventietaak, zodat u de pijplijn kunt onderbreken en de basislijnvariant kunt vergelijken met de canary-variant.
- 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: canary
bevat, 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 |