Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd Kubernetes-manifestfiler för att distribuera till kluster eller till och med baka manifestfilerna som ska användas för distributioner med hjälp av Helm-diagram.
Syntax
# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
inputs:
#action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
#connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
#kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection.
#azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription.
#azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group.
#kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster.
#useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
#namespace: # string. Namespace.
#strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
#trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
#percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
#baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
#manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests.
#containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers.
#imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets.
#renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
#dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file.
#helmChart: # string. Required when action = bake && renderType = helm. Helm Chart.
#releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name.
#overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files.
#overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides.
#kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path.
#resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
#resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path.
#kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind.
#name: # string. Required when action = scale || resourceToPatch = name. Name.
#replicas: # string. Required when action = scale. Replica count.
#mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
#arguments: # string. Optional. Use when action = delete. Arguments.
#patch: # string. Required when action = patch. Patch.
#secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
#secretName: # string. Optional. Use when action = createSecret. Secret name.
#secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments.
#dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection.
#rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.
#resourceType: 'Microsoft.ContainerService/managedClusters' # string. Optional. Use when action = deploy. Resource type. Default: Microsoft.ContainerService/managedClusters.
# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
inputs:
#action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
#connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
#kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection.
#azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription.
#azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group.
#kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster.
#useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
#namespace: # string. Namespace.
#strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
#trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
#percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
#baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
#manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests.
#containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers.
#imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets.
#renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
#dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file.
#helmChart: # string. Required when action = bake && renderType = helm. Helm Chart.
#releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name.
#overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files.
#overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides.
#kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path.
#resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
#resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path.
#kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind.
#name: # string. Required when action = scale || resourceToPatch = name. Name.
#replicas: # string. Required when action = scale. Replica count.
#mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
#arguments: # string. Optional. Use when action = delete. Arguments.
#patch: # string. Required when action = patch. Patch.
#secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
#secretName: # string. Optional. Use when action = createSecret. Secret name.
#secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments.
#dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection.
#rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.
Ingångar
action
-
åtgärd
string. Tillåtna värden: bake, createSecret (skapa hemlighet), delete, deploy, patch, promote, scale, reject. Standardvärde: deploy.
Anger vilken åtgärd som ska utföras.
connectionType
-
Tjänstanslutningstyp
string. Krävs när action != bake. Tillåtna värden: azureResourceManager (Azure Resource Manager), kubernetesServiceConnection (Kubernetes Service Connection). Standardvärde: kubernetesServiceConnection.
Välj en anslutningstyp för Kubernetes-tjänsten.
-
kubernetesServiceConnection(Kubernetes Service-anslutning) – Gör att du kan ange en KubeConfig-fil, ange ett tjänstkonto eller importera en AKS-instans med alternativet Azure-prenumeration . Om du importerar en AKS-instans med alternativet Azure-prenumeration krävs Kubernetes-klusteråtkomst vid konfigurationstiden för tjänstanslutning. -
azureResourceManager(Azure Resource Manager) – Gör att du kan välja en AKS-instans. Har inte åtkomst till Kubernetes-klustret vid konfigurationstillfället för tjänstanslutning.
Mer information finns i Kommentarer.
kubernetesServiceConnection
-
Kubernetes-tjänstanslutning
Indataalias: kubernetesServiceEndpoint.
string. Krävs när action != bake && connectionType = kubernetesServiceConnection.
Anger en Kubernetes-tjänstanslutning.
azureSubscriptionConnection
-
Azure-prenumeration
Indataalias: azureSubscriptionEndpoint.
string. Krävs när action != bake && connectionType = azureResourceManager.
Välj Azure Resource Manager-prenumerationen, som innehåller Azure Container Registry.Obs: Om du vill konfigurera en ny tjänstanslutning väljer du Azure-prenumerationen i listan och klickar på "Auktorisera". Om din prenumeration inte finns med i listan eller om du vill använda ett befintligt huvudnamn för tjänsten kan du konfigurera en Azure-tjänstanslutning med knappen "Lägg till" eller "Hantera".
azureResourceGroup
-
resursgrupp
string. Krävs när action != bake && connectionType = azureResourceManager.
Välj en Azure-resursgrupp.
kubernetesCluster
-
Kubernetes-kluster
string. Krävs när action != bake && connectionType = azureResourceManager.
Välj ett Azure-hanterat kluster.
useClusterAdmin
-
Använd autentiseringsuppgifter för klusteradministratör
boolean. Valfritt. Använd när connectionType = azureResourceManager. Standardvärde: false.
Använd autentiseringsuppgifter för klusteradministratör i stället för standardautentiseringsuppgifter för klusteranvändare.
namespace
-
namnområde
string.
Anger namnområdet för kommandona med hjälp av flaggan –namespace. Om namnområdet inte anges körs kommandona i standardnamnområdet.
strategy
-
strategi
string. Valfritt. Använd när action = deploy || action = promote || action = reject. Tillåtna värden: canary, none. Standardvärde: none.
Anger distributionsstrategin som används i den deploy åtgärden före en promote åtgärd eller reject åtgärd. För närvarande är canary den enda acceptabla distributionsstrategin.
trafficSplitMethod
-
trafikdelningsmetod
string. Valfritt. Använd när strategy = canary. Tillåtna värden: pod, smi. Standardvärde: pod.
För värdet smiutförs den procentuella trafikdelningen på begärandenivå med hjälp av ett servicenät. Ett tjänstnät måste konfigureras av en klusteradministratör. Den här uppgiften hanterar orkestrering av SMI-TrafficSplit- objekt.
För värdet podär den procentuella uppdelningen inte möjlig på begärandenivå i avsaknad av ett tjänstnät. I stället används procentandelsindata för att beräkna replikerna för baslinje och kanariefågel. Beräkningen är en procentandel repliker som anges i indatamanifesten för den stabila varianten.
percentage
-
procentsats
string. Krävs när strategy = Canary && action = deploy. Standardvärde: 0.
Den procentandel som används för att beräkna antalet repliker med baslinjevarianter och kanarievarianter för de arbetsbelastningar som finns i manifestfiler.
För den angivna procentandelen beräknar du:
(procentsats × antal repliker) / 100
Om resultatet inte är ett heltal används det matematiska golvet i resultatet när baslinje- och kanarievarianter skapas.
Anta till exempel att distributionen hello-world finns i manifestfilen för indata och att följande rader finns i uppgiftsindata:
replicas: 4
strategy: canary
percentage: 25
I det här fallet skapas distributionerna hello-world-baseline och hello-world-canary med en replik vardera. Baslinjevarianten skapas med samma avbildning och tagg som den stabila versionen, som är varianten med fyra repliker före distributionen. Kanarievarianten skapas med avbildningen och taggen som motsvarar de nyligen distribuerade ändringarna.
baselineAndCanaryReplicas
-
baslinje och kanarierepliker
string. Krävs när strategy = Canary && action = deploy && trafficSplitMethod = SMI. Standardvärde: 1.
När du anger trafficSplitMethod till smistyrs den procentuella trafikdelningen i service mesh-planet. Du kan styra det faktiska antalet repliker för kanarie- och baslinjevarianter oberoende av trafikdelningen.
Anta till exempel att indatadistributionsmanifestet anger 30 repliker för den stabila varianten. Anta också att du anger följande indata för uppgiften:
strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1
I det här fallet tar den stabila varianten emot 80% av trafiken, medan baslinje- och kanarievarianterna tar emot hälften av de angivna 20%. Originalplans- och kanarievarianter tar inte emot tre repliker vardera. De får i stället det angivna antalet repliker, vilket innebär att de var och en får en replik.
manifests
-
manifest
string. Krävs när action = deploy || action = promote || action = reject.
Anger sökvägen till de manifestfiler som ska användas för distribution. Varje rad representerar en enskild sökväg. Ett filmatchningsmönster är ett acceptabelt värde för varje rad.
containers
-
containrar
string. Valfritt. Använd när action = deploy || action = promote || action = bake.
Anger den fullständigt kvalificerade resurs-URL:en för avbildningen som ska användas för ersättningar i manifestfilerna. URL-contosodemo.azurecr.io/helloworld:test är ett exempel.
imagePullSecrets
-
ImagePullSecrets (på engelska)
string. Valfritt. Använd när action = deploy || action = promote.
Anger en indata för flera rader där varje rad innehåller namnet på en Docker-registerhemlighet som redan har konfigurerats i klustret. Varje hemligt namn läggs till under imagePullSecrets för de arbetsbelastningar som finns i indatamanifestfilerna.
renderType
-
Rendera motor
string. Valfritt. Använd när action = bake. Tillåtna värden: helm, kompose, kustomize. Standardvärde: helm.
Anger den återgivningstyp som används för att skapa manifestfilerna.
dockerComposeFile
-
sökväg till docker-
string. Krävs när action = bake && renderType = kompose.
Anger en docker-compose-filsökväg.
helmChart
-
Helm-diagram
string. Krävs när action = bake && renderType = helm.
Anger helm-diagramsökvägen som ska bakas.
releaseName
-
Helm-versionsnamn
string. Valfritt. Använd när action = bake && renderType = helm.
Anger det Helm-versionsnamn som ska användas.
overrideFiles
-
åsidosätt filer
string. Valfritt. Använd när action = bake && renderType = helm.
Anger en flerradsinmatning som accepterar sökvägen till åsidosättningsfilerna. Filerna används när manifestfiler från Helm-diagram bakas.
overrides
-
åsidosätter
string. Valfritt. Använd när action = bake && renderType = helm.
Anger de åsidosättningsvärden som ska anges.
kustomizationPath
-
Sökväg till kustomisering
string. Valfritt. Använd när action = bake && renderType = kustomize.
Anger det argument som måste vara sökvägen till katalogen som innehåller filen, eller en GIT-lagringsplats-URL med ett sökvägssuffix som anger same med avseende på lagringsplatsens rot.
resourceToPatch
-
resurs för att korrigera
string. Krävs när action = patch. Tillåtna värden: file, name. Standardvärde: file.
Anger någon av följande korrigeringsmetoder:
- En manifestfil identifierar de objekt som ska korrigeras.
- Ett enskilt objekt identifieras med typ och namn som korrigeringsmål.
Godtagbara värden är fil och namn.
resourceFileToPatch
-
Filsökväg
string. Krävs när action = patch && resourceToPatch = file.
Anger sökvägen till filen som används för en korrigering.
kind
-
Typ
string. Krävs när action = scale || resourceToPatch = name. Tillåtna värden: deployment, replicaset, statefulset.
Anger typen av K8s-objekt, till exempel deployment, replicaSet med mera.
name
-
namn
string. Krävs när action = scale || resourceToPatch = name.
Anger namnet på K8s-objektet.
replicas
-
antal repliker
string. Krävs när action = scale.
Anger antalet repliker som ska skalas till.
replicas
-
antal repliker
string. Krävs när action = scale.
Anger namnet på K8s-objektet.
mergeStrategy
-
sammanslagningsstrategi
string. Krävs när action = patch. Tillåtna värden: json, merge, strategic. Standardvärde: strategic.
Anger vilken typ av korrigering som tillhandahålls.
arguments
-
argument
string. Valfritt. Använd när action = delete.
Anger argumenten för kommandot kubectl delete. Ett exempel är: arguments: deployment hello-world foo-bar
patch
-
Lapp
string. Krävs när action = patch.
Anger innehållet i korrigeringen.
secretType
-
typ av hemlighet
string. Krävs när action = createSecret. Tillåtna värden: dockerRegistry, generic. Standardvärde: dockerRegistry.
Skapar eller uppdaterar en allmän eller docker-imagepullsecret. Ange dockerRegistry för att skapa eller uppdatera imagepullsecret för det valda registret. En imagePullSecret är ett sätt att skicka en hemlighet som innehåller ett containerregisterlösenord till Kubelet, så att den kan hämta en privat avbildning för din podd.
secretName
-
Hemligt namn
string. Valfritt. Använd när action = createSecret.
Anger namnet på hemligheten. Du kan använda det här hemliga namnet i Kubernetes YAML-konfigurationsfilen.
secretArguments
-
argument
string. Valfritt. Använd när action = createSecret && secretType = generic.
Anger nycklar och literalvärden som ska infogas i hemlighet. Till exempel --from-literal=key1=value1--from-literal=key2="top secret".
dockerRegistryEndpoint
-
Docker-registertjänstanslutning
string. Valfritt. Använd när action = createSecret && secretType = dockerRegistry.
Anger autentiseringsuppgifterna för den angivna tjänstanslutningen som används för att skapa en Docker-registerhemlighet i klustret. Manifestfiler under fältet imagePullSecrets kan sedan referera till hemlighetens namn.
rolloutStatusTimeout
-
timeout för distributionsstatus
string. Valfritt. Använd när action = deploy || action = patch || action = scale || action = promote. Standardvärde: 0.
Anger hur lång tid (i sekunder) som ska vänta innan statusen watch on rollout avslutas.
resourceType
-
Resurstyp
string. Valfritt. Använd när action = deploy. Standardvärde: Microsoft.ContainerService/managedClusters.
Typen av resurs (flotta, hanterat kluster).
Alternativ för uppgiftskontroll
Alla aktiviteter har kontrollalternativ utöver sina aktivitetsindata. Mer information finns i Kontrollalternativ och vanliga uppgiftsegenskaper.
Utdatavariabler
Den här uppgiften definierar följande utdatavariabler, som du kan använda i underordnade steg, jobb och steg.
manifestsBundle
Platsen för manifestbuntarna som skapats av bake-åtgärden
Anmärkningar
Överväganden för Kubernetes-tjänstanslutning vid åtkomst till AKS
Du kan skapa en Kubernetes-tjänstanslutning med något av följande alternativ.
- KubeConfig
- Servicekonto
- Azure-prenumeration
När du väljer alternativet Azure-prenumeration måste Kubernetes vara tillgängligt för Azure DevOps vid tjänstanslutningskonfigurationen. Det kan finnas olika orsaker till att det inte går att skapa en tjänstanslutning, till exempel att du skapat ett privat kluster eller att klustret har lokala konton inaktiverade. I dessa fall kan Azure DevOps inte ansluta till klustret vid konfigurationstiden för tjänstanslutning och du ser en fastnad Skärmen Läser in namnområden.
Från och med Kubernetes 1.24 skapas inte längre långlivade token som standard. Kubernetes rekommenderar att du inte använder långlivade token. Det innebär att uppgifter som använder en Kubernetes-tjänstanslutning som skapats med alternativet Azure-prenumeration inte har åtkomst till den permanenta token som krävs för att autentisera och inte kan komma åt ditt Kubernetes-kluster. Detta resulterar också i dialogrutan frozen Loading namespaces .
Använda Azure Resource Manager-tjänstanslutningen för att få åtkomst till AKS
För AKS-kunder är Anslutningstypen för Azure Resource Manager-tjänsten den bästa metoden för att ansluta till ett privat kluster eller ett kluster som har inaktiverat lokala konton. Den här metoden är inte beroende av klusteranslutningen när du skapar en tjänstanslutning. Åtkomsten till AKS skjuts upp till pipelinekörning, vilket har följande fördelar:
- Åtkomst till ett (privat) AKS-kluster kan utföras från en lokalt installerad agent eller skalningsuppsättningsagent med siktlinje till klustret.
- En token skapas för varje uppgift som använder en Azure Resource Manager-tjänstanslutning. Detta säkerställer att du ansluter till Kubernetes med en kortlivad token, vilket är Kubernetes-rekommendationen.
- AKS kan nås även när lokala konton är inaktiverade.
Vanliga frågor och svar om tjänstanslutning
Jag får följande felmeddelande: Det gick inte att hitta någon hemlighet som är associerad med tjänstkontot. Vad händer?
Du använder kubernetes-tjänstanslutningen med azure-prenumerationsalternativet. Vi uppdaterar den här metoden för att skapa långlivade token. Detta förväntas vara tillgängligt i mitten av maj. Vi rekommenderar dock att du börjar använda Anslutningstypen för Azure-tjänsten och inte o använda långlivade token enligt Kubernetes-vägledning.
Jag använder AKS och vill inte ändra något, kan jag fortsätta att använda uppgifter med Kubernetes-tjänstanslutningen?
Vi uppdaterar den här metoden för att skapa långlivade token. Detta förväntas vara tillgängligt i mitten av maj. Tänk dock på att den här metoden är emot Kubernetes-vägledning.
Jag använder Kubernetes-uppgifter och Kubernetes-tjänstanslutning men inte AKS. Borde jag vara orolig?
Aktiviteterna fortsätter att fungera som tidigare.
Kommer Kubernetes-tjänstanslutningstypen att tas bort?
Våra Kubernetes-uppgifter fungerar med alla Kubernetes-kluster, oavsett var de körs. Kubernetes-tjänstanslutningen fortsätter att finnas.
Jag är AKS-kund och allt fungerar bra, ska jag agera?
Det finns inget behov av att ändra något. Om du använder Kubernetes-tjänstanslutningen och valde Azure-prenumeration när du skapade den bör du känna till Kubernetes-vägledningen om hur du använder långlivade token.
Jag skapar en Kubernetes-miljö och har inget alternativ för att använda tjänstanslutningar
Om du inte kan komma åt din AKS när miljön skapas kan du använda en tom miljö och ange connectionType indata till en Azure Resource Manager-tjänstanslutning.
Jag har AKS konfigurerat med Azure Active Directory RBAC och min pipeline fungerar inte. Löser de här uppdateringarna det?
Åtkomst till Kubernetes när AAD RBAC är aktiverat är inte relaterat till att skapa token. För att förhindra en interaktiv fråga stöder vi kubelogin- i en framtida uppdatering.
Använd en Kubernetes-manifestuppgift i en bygg- eller versionspipeline för att baka och distribuera manifest till Kubernetes-kluster.
Den här uppgiften stöder följande:
Artefaktersättning: Distributionsåtgärden tar som indata en lista över containeravbildningar som du kan ange tillsammans med deras taggar och sammanfattningar. Samma indata ersätts med de icke-templaterade manifestfilerna före programmet till klustret. Den här ersättningen säkerställer att klusternoderna hämtar rätt version av avbildningen.
Manifeststabilitet: Distributionsstatusen för de distribuerade Kubernetes-objekten är markerad. Stabilitetskontrollerna införlivas för att avgöra om uppgiftsstatusen är en lyckad uppgift eller ett fel.
Spårningsanteckningar: Anteckningar läggs till i de distribuerade Kubernetes-objekten för att lägga till spårningsinformation ovanpå. Följande anteckningar stöds:
- azure-pipelines/org
- azure-pipelines/project
- azure-pipelines/pipeline
- azure-pipelines/pipelineId
- azure-pipelines/execution
- azure-pipelines/executionuri
- azure-pipelines/jobName
Hemlighetshantering: Med åtgärden
createSecretkan Docker-registerhemligheter skapas med hjälp av Docker-registertjänstanslutningar. Det gör också att generiska hemligheter kan skapas med hjälp av antingen oformaterade variabler eller hemliga variabler. Innan du distribuerar till klustret kan du användasecrets-indata tillsammans med åtgärdendeployför att utöka indatamanifestfilerna med lämpligtimagePullSecretsvärde.Bake-manifestet: Uppgiftens
bakeåtgärd möjliggör bakning av mallar i Kubernetes-manifestfiler. Åtgärden använder verktyg som Helm, Compose och Kustomize. Med bakning kan dessa Kubernetes-manifestfiler användas för distributioner till klustret.Distributionsstrategi: Om du väljer
canarystrategi med åtgärdendeployskapas arbetsbelastningsnamn med-baselineoch-canary. Uppgiften stöder två metoder för trafikdelning:Service Mesh Interface: SMI-abstraktion (Service Mesh Interface) möjliggör konfiguration med tjänstnätleverantörer som
LinkerdochIstio. Kubernetes Manifest-uppgiften mappar SMI-TrafficSplitobjekt till stabila, baslinje- och kanarietjänster under distributionsstrategins livscykel.Kanariedistributioner som baseras på ett tjänstnät och använder den här uppgiften är mer exakta. Den här noggrannheten beror på hur tjänstenätprovidrar möjliggör den detaljerade procentbaserade trafikdelningen. Service Mesh använder tjänstregistret och sidovagnscontainrar som matas in i poddar. Den här inmatningen sker tillsammans med programcontainrar för att uppnå den detaljerade trafikdelningen.
Kubernetes utan tjänstnät: I avsaknad av ett tjänstnät kanske du inte får den exakta procentuella uppdelning du vill ha på begärandenivån. Du kan dock göra kanariedistributioner med hjälp av baslinje- och kanarievarianter bredvid den stabila varianten.
Tjänsten skickar begäranden till poddar för alla tre arbetsbelastningsvarianterna när begränsningarna för väljare-etikett uppfylls. Kubernetes-manifestet respekterar dessa begäranden när du skapar baslinjevarianter och kanarievarianter. Det här routningsbeteendet uppnår den avsedda effekten av att endast en del av de totala begärandena dirigeras till kanariefågeln.
Jämför baslinje- och kanariearbetsbelastningar med hjälp av antingen en manuell åtgärdsaktivitet i versionspipelines eller en Fördröj uppgift i YAML-pipelines. Gör jämförelsen innan du använder åtgärden flytta upp eller avvisa för uppgiften.
Distribuera åtgärd
Följande YAML-kod är ett exempel på distribution till ett Kubernetes-namnområde med hjälp av manifestfiler:
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
I exemplet ovan försöker uppgiften hitta matchningar för bilderna foo/demo och bar/demo i bildfälten i manifestfilerna. För varje matchning som hittas läggs värdet för antingen tagVariable1 eller tagVariable2 till som en tagg i avbildningsnamnet. Du kan också ange sammandrag i containrarnas indata för artefaktersättning.
Anmärkning
Du kan skapa deploy, promoteoch reject åtgärder med YAML-indata relaterade till distributionsstrategi, men stöd för en manuell åtgärdsaktivitet är för närvarande inte tillgängligt för bygg-pipelines.
För versionspipelines rekommenderar vi att du använder åtgärder och indata relaterade till distributionsstrategin i följande sekvens:
- En distributionsåtgärd som anges med
strategy: canaryochpercentage: $(someValue). - En manuell åtgärdsaktivitet så att du kan pausa pipelinen och jämföra baslinjevarianten med kanarievarianten.
- En framhävd åtgärd som körs om en manuell åtgärd återupptas och en avvisande åtgärd som körs om en manuell åtgärdsaktivitet avvisas.
Skapa hemlig åtgärd
Följande YAML-kod visar ett exempel på hur Du skapar Docker-registerhemligheter med hjälp av Docker Registry-tjänstanslutning:
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: dockerRegistry
secretName: foobar
dockerRegistryEndpoint: demoACR
kubernetesServiceConnection: someK8sSC
namespace: default
Den här YAML-koden visar ett exempel på hur generiska hemligheter skapas:
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: generic
secretName: some-secret
secretArguments: --from-literal=key1=value1
kubernetesServiceConnection: someK8sSC
namespace: default
Baka åtgärd
Följande YAML-kod är ett exempel på att baka manifestfiler från Helm-diagram. Observera användningen av en namninmatning i den första aktiviteten. Det här namnet refereras senare från distributionssteget för att ange sökvägen till de manifest som skapades av baksteget.
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
Anmärkning
Om du vill använda Helm direkt för att hantera versioner och återställningar läser du uppgiften Package och distribuerar Helm-diagram.
Kustomize-exempel
Följande YAML-kod är ett exempel på bakningsmanifestfiler som genererats med Kustomize som innehåller en kustomization.yaml fil.
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-exempel
Följande YAML-kod är ett exempel på bakningsmanifestfiler som genererats med Kompose, ett konverteringsverktyg för 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)
Skalningsåtgärd
Följande YAML-kod visar ett exempel på skalningsobjekt:
steps:
- task: KubernetesManifest@0
displayName: Scale
inputs:
action: scale
kind: deployment
name: bootcamp-demo
replicas: 5
kubernetesServiceConnection: someK8sSC
namespace: default
Korrigeringsåtgärd
Följande YAML-kod visar ett exempel på objektkorrigering:
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
Ta bort åtgärd
Den här YAML-koden visar ett exempel på borttagning av objekt:
steps:
- task: KubernetesManifest@0
displayName: Delete
inputs:
action: delete
arguments: deployment expressapp
kubernetesServiceConnection: someK8sSC
namespace: default
Felsökning
Mitt Kubernetes-kluster ligger bakom en brandvägg och jag använder värdbaserade agenter. Hur kan jag distribuera till det här klustret?
Du kan ge värdbaserade agenter åtkomst via brandväggen genom att tillåta IP-adresserna för de värdbaserade agenterna. Mer information finns i IP-intervall för agenter.
Hur fungerar begäranden för stabila och varianter av tjänstvägar med kanariedistributioner?
Etikettväljarens relation mellan poddar och tjänster i Kubernetes gör det möjligt att konfigurera distributioner så att en enda tjänst dirigerar begäranden till både stabila varianter och kanarievarianter. Kubernetes-manifestaktiviteten använder detta för kanariedistributioner.
Om uppgiften innehåller indata från action: deploy och strategy: canaryskapas en -baseline och -canary variant av distributionen för varje arbetsbelastning (distribution, replikuppsättning, podd, ...) som definierats i indatamanifestfilerna. I det här exemplet finns det en distribution sampleapp i manifestfilen för indata och att den stabila varianten av den här distributionen med namnet sampleapp distribueras i klustret efter att körning nummer 22 av pipelinen har slutförts. I den efterföljande körningen (i det här fallet kör du nummer 23) skulle Kubernetes manifestaktivitet med action: deploy och strategy: canary resultera i skapande av sampleapp-baseline- och sampleapp-canary-distributioner vars antal repliker bestäms av produkten av percentage uppgiftsindata med värdet för önskat antal repliker för den slutliga stabila varianten av sampleapp enligt indatamanifestfilerna.
Förutom antalet repliker har baslinjeversionen samma konfiguration som den stabila varianten medan kanarieversionen har de nya ändringar som introduceras av den aktuella körningen (i det här fallet kör du nummer 23). Om en manuell åtgärd har konfigurerats i pipelinen efter ovanstående steg skulle det ge möjlighet att pausa pipelinen så att pipelineadministratören kan utvärdera viktiga mått för baslinje- och kanarieversionerna och fatta beslut om huruvida kanarieändringarna är säkra och tillräckligt bra för en fullständig distribution.
action: promote- och strategy: canary- eller action: reject- och strategy: canary-indata för Kubernetes-manifestuppgifterna kan användas för att höja upp eller avvisa kanarieändringarna. Observera att i båda fallen, i slutet av det här steget, kommer endast den stabila varianten av arbetsbelastningarna som deklareras i indatamanifestfilerna att förbli distribuerad i klustret, medan den tillfälliga baslinjen och kanarieversionerna rensas.
Kravspecifikation
| Krav | Beskrivning |
|---|---|
| Pipelinetyper | YAML, klassisk version, klassisk version |
| Körs på | Agent, DeploymentGroup |
| Krav | Ingen |
| Kapaciteter | Den här aktiviteten uppfyller inte några krav på efterföljande uppgifter i jobbet. |
| Kommandobegränsningar | Vilken som helst |
| variabler som kan | Vilken som helst |
| Agentversion | Alla agentversioner som stöds. |
| Aktivitetskategori | Rulla ut |