KubernetesManifest@0: Aufgabe "Bereitstellen in Kubernetes v0"
Verwenden Sie einen Kubernetes-Manifesttask in einer Build- oder Releasepipeline, um Manifeste mithilfe von Helm-Diagrammen in Kubernetes-Clustern zu backen und bereitzustellen.
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.
Eingaben
action
- Aktion
string
. Zulässige Werte: bake
, createSecret
(Geheimnis erstellen), delete
, deploy
, patch
, promote
, scale
, , . reject
Standardwert. deploy
.
Gibt die auszuführende Aktion an.
kubernetesServiceConnection
- Kubernetes-Dienstverbindung
string
. Erforderlich, wenn action != bake
.
Gibt eine Kubernetes-Dienstverbindung an.
namespace
- Namespace
string
.
Gibt den Namespace für die Befehle mithilfe des Flags an –namespace
. Wenn der Namespace nicht bereitgestellt wird, werden die Befehle im Standardnamespace ausgeführt.
namespace
- Namespace
string
. Erforderlich, wenn action != bake
. Standardwert. default
.
Gibt den Namespace für die Befehle mithilfe des Flags an –namespace
. Wenn der Namespace nicht bereitgestellt wird, werden die Befehle im Standardnamespace ausgeführt.
strategy
- Strategie
string
. Optional. Verwenden Sie , wenn action = deploy || action = promote || action = reject
. Zulässige Werte: canary
, none
. Standardwert. none
.
Gibt die Bereitstellungsstrategie an, die in der deploy
Aktion vor einer promote
Aktion oder reject
Aktion verwendet wird. canary
Derzeit ist die einzige zulässige Bereitstellungsstrategie.
trafficSplitMethod
- Methode für die Aufteilung des Datenverkehrs
string
. Optional. Verwenden Sie , wenn strategy = canary
. Zulässige Werte: pod
, smi
. Standardwert. pod
.
Für den Wert smi
erfolgt die prozentuale Datenverkehrsaufteilung auf Anforderungsebene mithilfe eines Dienstgitters. Ein Dienstgitter muss von einem Clusteradministrator eingerichtet werden. Diese Aufgabe verarbeitet die Orchestrierung von SMI TrafficSplit-Objekten .
Für den Wert pod
ist die Prozentuale Aufteilung auf Anforderungsebene nicht möglich, wenn kein Dienstgitter vorhanden ist. Stattdessen wird die Prozentuale Eingabe verwendet, um die Replikate für Baseline und Canary zu berechnen. Die Berechnung ist ein Prozentsatz der Replikate, die in den Eingabemanifesten für die stabile Variante angegeben werden.
percentage
- Prozentsatz
string
. Erforderlich, wenn strategy = Canary && action = deploy
. Standardwert. 0
.
Der Prozentsatz, der verwendet wird, um die Anzahl der Replikate von Baselinevarianten und Canary-Varianten der Workloads zu berechnen, die in Manifestdateien enthalten sind.
Berechnen Sie für die angegebene Prozentuale Eingabe Folgendes:
(Prozentsatz × Anzahl von Replikaten) / 100
Wenn das Ergebnis keine ganze Zahl ist, wird der mathematische Boden des Ergebnisses verwendet, wenn Baseline- und Canary-Varianten erstellt werden.
Angenommen, die Bereitstellung hello-world
befindet sich in der Eingabemanifestdatei und die folgenden Zeilen befinden sich in der Aufgabeneingabe:
replicas: 4
strategy: canary
percentage: 25
In diesem Fall werden die Bereitstellungen hello-world-baseline
und hello-world-canary
mit jeweils einem Replikat erstellt. Die Baselinevariante wird mit demselben Image und Tag wie die stabile Version erstellt, d. h. die Variante mit vier Replikaten vor der Bereitstellung. Die canary-Variante wird mit dem Image und Tag erstellt, das den neu bereitgestellten Änderungen entspricht.
baselineAndCanaryReplicas
- Baseline- und Canary-Replikate
string
. Erforderlich, wenn strategy = Canary && action = deploy && trafficSplitMethod = SMI
. Standardwert. 1
.
Wenn Sie auf smi
festlegentrafficSplitMethod
, wird die prozentuale Datenverkehrsteilung in der Dienstnetzebene gesteuert. Sie können die tatsächliche Anzahl von Replikaten für Canary- und Baseline-Varianten unabhängig von der Datenverkehrsteilung steuern.
Angenommen, das Eingabebereitstellungsmanifest gibt 30 Replikate für die stabile Variante an. Gehen Sie außerdem davon aus, dass Sie die folgende Eingabe für die Aufgabe angeben:
strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1
In diesem Fall empfängt die stabile Variante 80 % des Datenverkehrs, während die Baseline- und Canary-Variante jeweils die Hälfte der angegebenen 20 % erhalten. Baseline- und Canary-Varianten erhalten keine jeweils drei Replikate. Sie erhalten stattdessen die angegebene Anzahl von Replikaten, was bedeutet, dass sie jeweils ein Replikat erhalten.
manifests
- Manifeste
string
. Erforderlich, wenn action = deploy || action = promote || action = reject
.
Gibt den Pfad zu den Manifestdateien an, die für die Bereitstellung verwendet werden sollen. Jede Zeile stellt einen einzelnen Pfad dar. Ein Dateiabgleichsmuster ist ein akzeptabler Wert für jede Zeile.
containers
- Container
string
. Optional. Verwenden Sie , wenn action = deploy || action = promote || action = bake
.
Gibt die vollqualifizierte Ressourcen-URL des Bilds an, das für Ersetzungen in den Manifestdateien verwendet werden soll. Die URL contosodemo.azurecr.io/helloworld:test
ist ein Beispiel.
containers
- Container
string
. Optional. Verwenden Sie , wenn action = deploy || action = promote
.
Gibt die vollqualifizierte URL des Bilds an, das für Ersetzungen in den Manifestdateien verwendet werden soll. Diese Eingabe akzeptiert die Spezifikation mehrerer Artefaktersetzungen in einer newline-getrennten Form. Hier sehen Sie ein Beispiel:
containers: |
contosodemo.azurecr.io/foo:test1
contosodemo.azurecr.io/bar:test2
In diesem Beispiel werden alle Verweise auf contosodemo.azurecr.io/foo
und contosodemo.azurecr.io/bar
im Bildfeld der Eingabemanifestdateien gesucht. Für jede gefundene Übereinstimmung wird das -Tag test1
oder test2
der entsprechende Verweis ersetzt.
imagePullSecrets
- ImagePullSecrets
string
. Optional. Verwenden Sie , wenn action = deploy || action = promote
.
Gibt eine mehrzeilige Eingabe an, bei der jede Zeile den Namen eines Docker-Registrierungsgeheimnisses enthält, das bereits im Cluster eingerichtet wurde. Jeder Geheimname wird unter imagePullSecrets
für die Workloads hinzugefügt, die sich in den Eingabemanifestdateien befinden.
renderType
- Rendermodul
string
. Optional. Verwenden Sie , wenn action = bake
. Zulässige Werte: helm
, kompose
und kustomize
. Standardwert. helm
.
Gibt den Rendertyp an, der zum Erstellen der Manifestdateien verwendet wird.
renderType
- Rendermodul
string
. Optional. Verwenden Sie , wenn action = bake
. Zulässige Werte: helm2
(Helm 2). Standardwert. helm2
.
Gibt den Rendertyp an, der zum Erstellen der Manifestdateien verwendet wird.
dockerComposeFile
- Pfad zur Docker Compose-Datei
string
. Erforderlich, wenn action = bake && renderType = kompose
.
Gibt einen docker-compose-Dateipfad an.
helmChart
- Helm-Diagramm
string
. Erforderlich, wenn action = bake && renderType = helm
.
Gibt den Zubackpfad des Helm-Diagramms an.
helmChart
- Helm-Diagramm
string
. Erforderlich, wenn action = bake && renderType = helm2
.
Gibt den Zubackpfad des Helm-Diagramms an.
releaseName
- Helm-Releasename
string
. Optional. Verwenden Sie , wenn action = bake && renderType = helm
.
Gibt den zu verwendenden Helm-Releasenamen an.
releaseName
- Helm-Releasename
string
. Optional. Verwenden Sie , wenn action = bake && renderType = helm2
.
Gibt den zu verwendenden Helm-Releasenamen an.
overrideFiles
- Überschreiben von Dateien
string
. Optional. Verwenden Sie , wenn action = bake && renderType = helm
.
Gibt eine mehrzeile Eingabe an, die den Pfad zu den Außerkraftsetzungsdateien akzeptiert. Die Dateien werden verwendet, wenn Manifestdateien aus Helm-Diagrammen erstellt werden.
overrideFiles
- Überschreiben von Dateien
string
. Optional. Verwenden Sie , wenn action = bake && renderType = helm2
.
Gibt eine mehrzeile Eingabe an, die den Pfad zu den Außerkraftsetzungsdateien akzeptiert. Die Dateien werden verwendet, wenn Manifestdateien aus Helm-Diagrammen erstellt werden.
overrides
- Überschreibt
string
. Optional. Verwenden Sie , wenn action = bake && renderType = helm
.
Gibt die festzulegenden Außerkraftsetzungswerte an.
overrides
- Überschreibt
string
. Optional. Verwenden Sie , wenn action = bake && renderType = helm2
.
Gibt zusätzliche Außerkraftsetzungswerte an, die über den Befehlszeilenschalter --set
verwendet werden, wenn Manifestdateien mit Helm erstellt werden.
Geben Sie Überschreibungswerte als key-value
Paare im Format key:value
an. Wenn Sie mehrere überschreibende key-value
Paare verwenden, geben Sie jedes key-value
Paar in einer separaten Zeile an. Verwenden Sie ein Zeilenumbruchzeichen als Trennzeichen zwischen verschiedenen key-value
Paaren.
kustomizationPath
- Kustomisierungspfad
string
. Optional. Verwenden Sie , wenn action = bake && renderType = kustomize
.
Gibt das Argument an, das der Pfad zu dem Verzeichnis sein muss, das die Datei enthält, oder eine Git-Repository-URL mit einem Pfadsuffix, das in Bezug auf den Repositorystamm angegeben same
ist.
resourceToPatch
- Zu patchende Ressource
string
. Erforderlich, wenn action = patch
. Zulässige Werte: file
, name
. Standardwert. file
.
Gibt eine der folgenden Patchmethoden an:
- Eine Manifestdatei identifiziert die zu patchenden Objekte.
- Ein einzelnes Objekt wird nach Art und Name als Patchziel identifiziert.
Zulässige Werte sind Datei und Name.
resourceFileToPatch
- Dateipfad
string
. Erforderlich, wenn action = patch && resourceToPatch = file
.
Gibt den Pfad zu der Datei an, die für einen Patch verwendet wird.
kind
- Art
string
. Erforderlich, wenn action = scale || resourceToPatch = name
. Zulässige Werte: deployment
, replicaset
und statefulset
.
Gibt die Art des K8s-Objekts an, z deployment
. B. , replicaSet
und mehr.
name
- Namen
string
. Erforderlich, wenn action = scale || resourceToPatch = name
.
Gibt den Namen des K8s-Objekts an.
replicas
- Replikatanzahl
string
. Erforderlich, wenn action = scale
.
Gibt die Anzahl der Replikate an, auf die skaliert werden soll.
mergeStrategy
- Mergestrategie
string
. Erforderlich, wenn action = patch
. Zulässige Werte: json
, merge
und strategic
. Standardwert. strategic
.
Gibt den Typ des bereitgestellten Patches an.
arguments
- Argumente
string
. Optional. Verwenden Sie , wenn action = delete
.
Gibt die Argumente für den kubectl delete
Befehl an. Ein Beispiel hierfür ist: arguments: deployment hello-world foo-bar
patch
- Patch
string
. Erforderlich, wenn action = patch
.
Gibt den Inhalt des Patches an.
secretType
- Typ des Geheimnisses
string
. Erforderlich, wenn action = createSecret
. Zulässige Werte: dockerRegistry
, generic
. Standardwert. dockerRegistry
.
Erstellt oder aktualisiert ein generisches oder docker imagepullsecret
. Geben Sie an dockerRegistry
, um die imagepullsecret
der ausgewählten Registrierung zu erstellen oder zu aktualisieren. Ein imagePullSecret
ist eine Möglichkeit, ein Geheimnis, das ein Containerregistrierungskennwort enthält, an das Kubelet zu übergeben, damit es ein privates Image im Namen Ihres Pods pullen kann.
secretName
- Geheimnisname
string
. Optional. Verwenden Sie , wenn action = createSecret
.
Gibt den Namen des Geheimnisses an. Sie können diesen Geheimnisnamen in der Kubernetes-YAML-Konfigurationsdatei verwenden.
secretArguments
- Argumente
string
. Optional. Verwenden Sie , wenn action = createSecret && secretType = generic
.
Gibt Schlüssel und Literalwerte an, die im Geheimnis eingefügt werden sollen. Beispiel: --from-literal=key1=value1
--from-literal=key2="top secret"
.
dockerRegistryEndpoint
- Docker-Registrierungsdienstverbindung
string
. Optional. Verwenden Sie , wenn action = createSecret && secretType = dockerRegistry
.
Gibt die Anmeldeinformationen der angegebenen Dienstverbindung an, die zum Erstellen eines Docker-Registrierungsgeheimnisses innerhalb des Clusters verwendet werden. Manifestdateien unter dem imagePullSecrets
Feld können dann auf den Namen dieses Geheimnisses verweisen.
rolloutStatusTimeout
- Timeout für Rollout-status
string
. Optional. Verwenden Sie , wenn action = deploy || action = patch || action = scale || action = promote
. Standardwert. 0
.
Gibt die Zeitdauer (in Sekunden) an, die gewartet werden soll, bevor status beendet wird watch on rollout
.
Aufgabensteuerungsoptionen
Alle Aufgaben verfügen zusätzlich zu ihren Aufgabeneingaben über Steuerungsoptionen. Weitere Informationen finden Sie unter Steuerungsoptionen und allgemeine Aufgabeneigenschaften.
Ausgabevariablen
Diese Aufgabe definiert die folgenden Ausgabevariablen, die Sie in Downstreamschritten, Aufträgen und Phasen verwenden können.
manifestsBundle
Gibt den Speicherort der Manifestbündel an, die von der Bake-Aktion erstellt wurden.
Hinweise
Hinweis
Es ist eine neuere Version dieser Aufgabe verfügbar, die zusätzliche Unterstützung für das Ziel eines Kubernetes-Clusters auf unterschiedliche Weise mit der connectionType
-Eigenschaft bietet. Weitere Informationen finden Sie in KubernetesManifest@1- und KubernetesManifest@1-Dienstverbindungsbemerkungen.
Verwenden Sie einen Kubernetes-Manifesttask in einer Build- oder Releasepipeline, um Manifeste zu baken und in Kubernetes-Clustern bereitzustellen.
Diese Aufgabe unterstützt Folgendes:
Artefaktersetzung: Die Bereitstellungsaktion verwendet als Eingabe eine Liste von Containerimages, die Sie zusammen mit ihren Tags und Digests angeben können. Die gleiche Eingabe wird vor der Anwendung im Cluster in die nicht durchtemplatisierten Manifestdateien ersetzt. Durch diese Ersetzung wird sichergestellt, dass die Clusterknoten die richtige Version des Images pullen.
Manifeststabilität: Die Rollout-status der bereitgestellten Kubernetes-Objekte wird überprüft. Die Stabilitätsüberprüfungen werden integriert, um zu bestimmen, ob die aufgabe status ein Erfolg oder ein Fehler ist.
Anmerkungen zur Rückverfolgbarkeit: Anmerkungen werden den bereitgestellten Kubernetes-Objekten hinzugefügt, um Informationen zur Nachverfolgbarkeit zu überlagern. Die folgenden Anmerkungen werden unterstützt:
- azure-pipelines/org
- azure-pipelines/project
- azure-pipelines/pipeline
- azure-pipelines/pipelineId
- azure-pipelines/execution
- azure-pipelines/executionuri
- azure-pipelines/jobName
Geheimnisbehandlung: Mit der
createSecret
Aktion können Docker-Registrierungsgeheimnisse mithilfe von Docker-Registrierungsdienstverbindungen erstellt werden. Außerdem können generische Geheimnisse mithilfe von Nur-Text-Variablen oder Geheimnisvariablen erstellt werden. Vor der Bereitstellung im Cluster können Sie die Eingabe zusammen mit dersecrets
deploy
Aktion verwenden, um die Eingabemanifestdateien um den entsprechendenimagePullSecrets
Wert zu erweitern.Bake-Manifest: Die
bake
Aktion der Aufgabe ermöglicht das Baken von Vorlagen in Kubernetes-Manifestdateien. Die Aktion verwendet Tools wie Helm, Compose und Kustomize. Beim Baken können diese Kubernetes-Manifestdateien für Bereitstellungen im Cluster verwendet werden.Bereitstellungsstrategie: Die Auswahl der
canary
Strategie mit derdeploy
Aktion führt zur Erstellung von Workloadnamen mit-baseline
dem Suffix und-canary
. Der Task unterstützt zwei Methoden der Datenverkehrsaufteilung:Service Mesh-Schnittstelle: Die SMI-Abstraktion (Service Mesh Interface ) ermöglicht die Konfiguration mit Service Mesh-Anbietern wie
Linkerd
undIstio
. Der Kubernetes-Manifesttask ordnet SMI-ObjekteTrafficSplit
den stabilen Diensten, Baselinediensten und Canary-Diensten während des Lebenszyklus der Bereitstellungsstrategie zu.Canary-Bereitstellungen, die auf einem Dienstnetz basieren und diese Aufgabe verwenden, sind genauer. Diese Genauigkeit ist darauf zurückzuführen, wie Service Mesh-Anbieter die differenzierte prozentuale Aufteilung des Datenverkehrs ermöglichen. Das Dienstnetz verwendet die Dienstregistrierung und Sidecar-Container, die in Pods eingefügt werden. Diese Einschleusung erfolgt zusammen mit Anwendungscontainern, um die differenzierte Datenverkehrsaufteilung zu erreichen.
Kubernetes ohne Dienstgitter: Wenn kein Dienstgitter vorhanden ist, erhalten Sie möglicherweise nicht die genaue prozentuale Aufteilung, die Sie auf Anforderungsebene benötigen. Sie können canary-Bereitstellungen jedoch mithilfe von Baseline- und Canary-Varianten neben der stabilen Variante durchführen.
Der Dienst sendet Anforderungen an Pods aller drei Workloadvarianten, wenn die Selektorbezeichnungseinschränkungen erfüllt sind. Kubernetes Manifest berücksichtigt diese Anforderungen beim Erstellen von Baseline- und Canary-Varianten. Dieses Routingverhalten erzielt den beabsichtigten Effekt, dass nur ein Teil der Gesamtanforderungen an den Canary weitergeleitet wird.
Vergleichen Sie die Baseline- und Canary-Workloads, indem Sie entweder einen Manuellen Eingriffstask in Releasepipelines oder einen Verzögerungstask in YAML-Pipelines verwenden. Führen Sie den Vergleich aus, bevor Sie die Aktion "Höherstufen" oder "Ablehnen" der Aufgabe verwenden.
Bereitstellen einer Aktion
Der folgende YAML-Code ist ein Beispiel für die Bereitstellung in einem Kubernetes-Namespace mithilfe von Manifestdateien:
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
Im obigen Beispiel versucht die Aufgabe, Übereinstimmungen für die Bilder foo/demo
und bar/demo
in den Bildfeldern von Manifestdateien zu finden. Für jede gefundene Übereinstimmung wird der Wert von tagVariable1
oder tagVariable2
als Tag an den Bildnamen angefügt. Sie können auch Digests in der Containereingabe für die Artefaktersetzung angeben.
Hinweis
Sie können zwar Aktionen, promote
, und reject
mit YAML-Eingaben im Zusammenhang mit der Bereitstellungsstrategie erstellendeploy
, aber für Buildpipelines steht derzeit keine Unterstützung für einen Manuellen Eingriffstask zur Verfügung.
Für Releasepipelines empfehlen wir Ihnen, Aktionen und Eingaben im Zusammenhang mit der Bereitstellungsstrategie in der folgenden Reihenfolge zu verwenden:
- Eine bereitstellungsaktion, die mit
strategy: canary
undpercentage: $(someValue)
angegeben ist. - Ein Manueller Eingriffstask, damit Sie die Pipeline anhalten und die Baselinevariante mit der Canary-Variante vergleichen können.
- Eine Höherstaufst-Aktion, die ausgeführt wird, wenn ein Manueller Eingriffstask fortgesetzt wird, und eine Ablehnungsaktion, die ausgeführt wird, wenn ein Manueller Eingriffstask abgelehnt wird.
Erstellen einer Geheimaktion
Der folgende YAML-Code zeigt ein Beispiel für die Erstellung von Docker-Registrierungsgeheimnissen mithilfe der Docker-Registrierungsdienstverbindung:
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: dockerRegistry
secretName: foobar
dockerRegistryEndpoint: demoACR
kubernetesServiceConnection: someK8sSC
namespace: default
Dieser YAML-Code zeigt ein Beispiel für die Erstellung generischer Geheimnisse:
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: generic
secretName: some-secret
secretArguments: --from-literal=key1=value1
kubernetesServiceConnection: someK8sSC
namespace: default
Bake-Aktion
Der folgende YAML-Code ist ein Beispiel für das Baken von Manifestdateien aus Helm-Diagrammen. Beachten Sie die Verwendung einer Namenseingabe in der ersten Aufgabe. Auf diesen Namen wird später aus dem Bereitstellungsschritt verwiesen, um den Pfad zu den Manifesten anzugeben, die vom Bake-Schritt erstellt wurden.
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
Hinweis
Informationen zur direkten Verwendung von Helm zum Verwalten von Releases und Rollbacks finden Sie unter der Aufgabe Paketieren und Bereitstellen von Helm-Diagrammen.
Kustomize-Beispiel
Der folgende YAML-Code ist ein Beispiel für das Baking von Manifestdateien, die mit Kustomize generiert wurden und eine kustomization.yaml
Datei enthalten.
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-Beispiel
Der folgende YAML-Code ist ein Beispiel für das Baken von Manifestdateien, die mit Kompose, einem Konvertierungstool für Docker Compose, generiert wurden.
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)
Skalierungsaktion
Der folgende YAML-Code zeigt ein Beispiel für die Skalierung von Objekten:
steps:
- task: KubernetesManifest@0
displayName: Scale
inputs:
action: scale
kind: deployment
name: bootcamp-demo
replicas: 5
kubernetesServiceConnection: someK8sSC
namespace: default
Patchaktion
Der folgende YAML-Code zeigt ein Beispiel für Objektpatches:
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
Aktion löschen
Dieser YAML-Code zeigt ein Beispiel für das Löschen eines Objekts:
steps:
- task: KubernetesManifest@0
displayName: Delete
inputs:
action: delete
arguments: deployment expressapp
kubernetesServiceConnection: someK8sSC
namespace: default
Problembehandlung
Mein Kubernetes-Cluster befindet sich hinter einer Firewall, und ich verwende gehostete Agents. Wie kann ich die Bereitstellung für diesen Cluster durchführen?
Sie können für gehostete Agents den Zugriff über Ihre Firewall gewähren, indem Sie die IP-Adressen für die gehosteten Agents zulassen. Ausführlichere Informationen finden Sie im Artikel mit den IP-Adressbereichen für Agents.
Wie funktionieren Anforderungen an stabile und variantenreiche Dienstrouten bei Canary-Bereitstellungen?
Die Bezeichnungsauswahlbeziehung zwischen Pods und Diensten in Kubernetes ermöglicht es, Bereitstellungen so festzulegen, dass ein einzelner Dienst Anforderungen sowohl an die stabilen als auch an die Canary-Varianten weiterleitet. Der Task „Kubernetes-Manifest“ verwendet dies für Canary-Bereitstellungen.
Wenn die Aufgabe die Eingaben von action: deploy
und strategy: canary
enthält, werden für jede In den Eingabemanifestdateien definierte Workload (Bereitstellung, ReplicaSet, Pod, ...) eine - und -canary
--baseline
Variante der Bereitstellung erstellt. In diesem Beispiel gibt es eine Bereitstellung sampleapp
in der Eingabemanifestdatei, und nach Abschluss der Ausführungsnummer 22 der Pipeline wird die stabile Variante dieser Bereitstellung namens sampleapp
im Cluster bereitgestellt. In der anschließenden Ausführung (in diesem Fall Ausführungsnummer 23) führt der Kubernetes-Manifesttask mit action: deploy
und strategy: canary
zur Erstellung von bereitstellungen sampleapp-baseline und sampleapp-canary, deren Anzahl der Replikate durch das Produkt der percentage
Taskeingabe mit dem Wert der gewünschten Anzahl von Replikaten für die endgültige stabile Variante von sampleapp
gemäß den Eingabemanifestdateien bestimmt wird.
Mit Ausnahme der Anzahl der Replikate verfügt die Baselineversion über dieselbe Konfiguration wie die stabile Variante, während die Canary-Version die neuen Änderungen aufweist, die durch die aktuelle Ausführung eingeführt werden (in diesem Fall Ausführungsnummer 23). Wenn nach dem oben genannten Schritt ein manueller Eingriff in der Pipeline eingerichtet wird, bietet dies die Möglichkeit, die Pipeline anzuhalten, damit der Pipelineadministrator wichtige Metriken für die Baseline- und Canaryversionen auswerten und entscheiden kann, ob die Canary-Änderungen sicher und ausreichend für einen vollständigen Rollout sind.
Dieaction: promote
Eingaben und oder strategy: canary
action: reject
und strategy: canary
der Kubernetes-Manifesttasks können verwendet werden, um die Canary-Änderungen bzw. abzulehnen. Beachten Sie, dass in beiden Fällen am Ende dieses Schritts nur die stabile Variante der in den Eingabemanifestdateien deklarierten Workloads im Cluster bereitgestellt wird, während die kurzlebigen Baseline- und Canary-Versionen bereinigt werden.
Anforderungen
Anforderung | BESCHREIBUNG |
---|---|
Pipelinetypen | YAML, Klassischer Build, klassisches Release |
Wird ausgeführt auf | Agent, DeploymentGroup |
Forderungen | Keine |
Capabilities | Diese Aufgabe erfüllt keine Anforderungen an nachfolgende Aufgaben im Auftrag. |
Befehlseinschränkungen | Any |
Einstellbare Variablen | Any |
Agent-Version | Alle unterstützten Agent-Versionen. |
Aufgabenkategorie | Bereitstellen |