KubernetesManifest@1 – Distribuera till Kubernetes v1-uppgift
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.
Indata
action
- Åtgärder
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 Kubernetes-tjänstanslutningstyp.
kubernetesServiceConnection
(Kubernetes-tjänstanslutning) – 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änstanslutningen.azureResourceManager
(Azure Resource Manager) – Låter dig välja en AKS-instans. Har inte åtkomst till Kubernetes-kluster vid konfigurationstiden för tjänstanslutningen.
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 den Azure Resource Manager-prenumeration 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 visas eller om du vill använda ett befintligt huvudnamn för tjänsten kan du konfigurera en Azure-tjänstanslutning med hjälp av 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ända 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 –namespace
av flaggan . 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 den distributionsstrategi som används i deploy
åtgärden före en promote
åtgärd eller reject
åtgärd. canary
Är för närvarande den enda godtagbara distributionsstrategin.
trafficSplitMethod
- Trafikdelningsmetod
string
. Valfritt. Använd när strategy = canary
. Tillåtna värden: pod
, smi
. Standardvärde: pod
.
För värdet smi
utförs den procentuella trafikdelningen på begärandenivå med hjälp av ett tjänstnä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
går det inte att dela procentandelen på begäransnivå om det inte finns något tjänstnät. I stället används procentuella indata för att beräkna replikerna för baslinje och kanarie. Beräkningen är en procentandel repliker som anges i indatamanifesten för den stabila varianten.
percentage
- Procent
string
. Krävs när strategy = Canary && action = deploy
. Standardvärde: 0
.
Den procentandel som används för att beräkna antalet repliker av typen baseline-variant och canary-variant av de arbetsbelastningar som finns i manifestfiler.
För angivna procentuella indata beräknar du:
(procentandel × antal repliker) / 100
Om resultatet inte är ett heltal används det matematiska golvet i resultatet när originalvarianter och kanarievarianter skapas.
Anta till exempel att distributionen hello-world
finns i indatamanifestfilen och att följande rader finns i aktivitetens indata:
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
- Baslinjerepliker och kanarierepliker
string
. Krävs när strategy = Canary && action = deploy && trafficSplitMethod = SMI
. Standardvärde: 1
.
När du anger trafficSplitMethod
styrs smi
den procentuella trafikdelningen i servicenätplanet. Du kan styra det faktiska antalet repliker för kanarie- och baslinjevarianter oberoende av trafikdelningen.
Anta till exempel att manifestet för indatadistributionen anger 30 repliker för den stabila varianten. Anta också att du anger följande indata för aktiviteten:
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 får hälften av de angivna 20 %. Originalvarianter 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
- Manifesterar
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 enda sökväg. Ett filmatchningsmönster är ett acceptabelt värde för varje rad.
containers
- Behållare
string
. Valfritt. Använd när action = deploy || action = promote || action = bake
.
Anger den fullständigt kvalificerade resurs-URL:en för bilden som ska användas för ersättningar på manifestfilerna. URL:en contosodemo.azurecr.io/helloworld:test
är ett exempel.
imagePullSecrets
- ImagePullSecrets
string
. Valfritt. Använd när action = deploy || action = promote
.
Anger indata med 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
- Återgivningsmotor
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 compose-fil
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 helm-versionsnamnet 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
- Kustomization Path
string
. Valfritt. Använd när action = bake && renderType = kustomize
.
Anger argumentet 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 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.
Godkända 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 K8-objekt, till exempel deployment
, replicaSet
och mer.
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 kubectl delete
för kommandot. Ett exempel är: arguments: deployment hello-world foo-bar
patch
- Patch
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 det imagepullsecret
valda registret. Ett 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 poddens räkning.
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 den här hemlighetens namn.
rolloutStatusTimeout
- Tidsgräns 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 avslutas watch on rollout
.
Kontrollalternativ för aktivitet
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 manifestpaketen som skapats av bake-åtgärden
Kommentarer
Ö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
- Tjänstkonto
- Azure Subscription (Azure-prenumeration)
När du väljer alternativet Azure-prenumeration måste Kubernetes vara tillgängligt för Azure DevOps vid konfigurationstiden för tjänstanslutningen. Det kan finnas olika orsaker till att det inte går att skapa en tjänstanslutning, till exempel att du har skapat ett privat kluster eller att klustret har inaktiverat lokala konton. I dessa fall kan Azure DevOps inte ansluta till klustret vid konfigurationstiden för tjänstanslutningen, och du ser en skärm för inläsning av namnrymder som fastnat .
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. Därför har uppgifter som använder en Kubernetes-tjänstanslutning som skapats med alternativet Azure-prenumeration inte åtkomst till den permanenta token som krävs för att autentisera och kan inte komma åt ditt Kubernetes-kluster. Detta resulterar också i dialogrutan Låst inläsning av namnrymder .
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 alternativet Kubernetes-tjänstanslutning med Azure-prenumeration. 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 använda långlivade token enligt Kubernetes-vägledningen.
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ägledningen.
Jag använder Kubernetes-uppgifter och Kubernetes-tjänstanslutningen, men inte AKS. Ska jag oroa mig?
Aktiviteterna fortsätter att fungera som tidigare.
Kommer Kubernetes-tjänstens anslutningstyp 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ågonting. 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 konfigurerat AKS med Azure Active Directory RBAC och min pipeline fungerar inte. Kommer de här uppdateringarna att lösa det?
Åtkomst till Kubernetes när AAD RBAC är aktiverat är inte relaterat till att skapa token. För att förhindra en interaktiv uppmaning 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 sammandrag. Samma indata ersätts med de icke-mallade manifestfilerna före programmet i 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 framgång eller ett fel.
Spårningsanteckningar: Anteckningar läggs till i de distribuerade Kubernetes-objekten för att lägga till spårbarhetsinformation i överordnad. 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
createSecret
åtgärden kan Docker-registerhemligheter skapas med hjälp av Docker-registertjänstanslutningar. Det gör också att allmänna hemligheter kan skapas med hjälp av variabler med oformaterad text eller hemliga variabler. Innan du distribuerar till klustret kan du användasecrets
indata tillsammans meddeploy
åtgärden för att utöka indatamanifestfilerna med lämpligtimagePullSecrets
värde.Baka manifest: Åtgärden
bake
för uppgiften gör det möjligt att baka mallar till Kubernetes-manifestfiler. Åtgärden använder verktyg som Helm, Compose och Kustomize. När du bakar kan dessa Kubernetes-manifestfiler användas för distributioner till klustret.Distributionsstrategi: Om du väljer
canary
strategi meddeploy
åtgärden skapas arbetsbelastningsnamn-baseline
med suffixet och-canary
. Uppgiften stöder två metoder för trafikdelning:Service Mesh-gränssnitt: SMI-abstraktion ( Service Mesh Interface ) tillåter konfiguration med tjänstnätproviders som
Linkerd
ochIstio
. Kubernetes-manifestuppgiften mappar SMI-objektTrafficSplit
till stabila tjänster, baslinje- och kanarietjänster under distributionsstrategins livscykel.Canary-distributioner 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ätsleverantörer möjliggör den detaljerade procentbaserade trafikdelningen. Tjänstnätet 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: Om det inte finns något tjänstnät kanske du inte får den exakta procentandelsdelning som du vill ha på begäransnivå. Du kan dock utföra kanariedistributioner med hjälp av baslinjevarianter och kanarievarianter bredvid den stabila varianten.
Tjänsten skickar begäranden till poddar för alla tre arbetsbelastningsvarianterna när begränsningarna för selector-label 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 det totala antalet begäranden dirigeras till kanariefågeln.
Jämför baslinje- och kanariearbetsbelastningar med hjälp av antingen en manuell åtgärdsuppgift i versionspipelines eller en fördröjningsaktivitet i YAML-pipelines. Gör jämförelsen innan du använder åtgärden för att höja upp eller avvisa 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 manifestfiler. För varje matchning som hittas läggs värdet för antingen tagVariable1
eller tagVariable2
till som en tagg till avbildningens namn. Du kan också ange sammandrag i containrarnas indata för artefaktersättning.
Anteckning
Du kan skapa deploy
, promote
och reject
åtgärder med YAML-indata relaterade till distributionsstrategi, men stöd för en manuell åtgärdsuppgift ä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 ordning:
- En distributionsåtgärd som anges med
strategy: canary
ochpercentage: $(someValue)
. - En manuell åtgärdsaktivitet så att du kan pausa pipelinen och jämföra baslinjevarianten med kanarievarianten.
- En upphöjd åtgärd som körs om en manuell åtgärd återupptas och en avvisande åtgärd som körs om en manuell åtgärd avvisas.
Skapa hemlighetsåtgärd
Följande YAML-kod visar ett exempel på hur du skapar Docker-registerhemligheter med hjälp av Docker Registry-tjänstanslutningen:
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 allmänna 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 namnindata i den första aktiviteten. Det här namnet refereras senare från distributionssteget för att ange sökvägen till manifesten 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
Anteckning
Information om hur du använder Helm direkt för att hantera versioner och återställningar finns i uppgiften Paketera och distribuera Helm-diagram.
Kustomize-exempel
Följande YAML-kod är ett exempel på bakning av manifestfiler som genereras 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å bakning av manifestfiler som genereras 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 gör jag för att distribuera till det här klustret?
Du kan bevilja värdbaserade agenter åtkomst genom brandväggen genom att tillåta IP-adresserna för värdbaserade agenter. 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 action: deploy
för och strategy: canary
, för varje arbetsbelastning (distribution, replikuppsättning, podd, ...) som definierats i indatamanifestfilerna, skapas en och -canary
variant -baseline
av distributionen. I det här exemplet finns det en distribution sampleapp
i indatamanifestfilen 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 manifestuppgift med action: deploy
och strategy: canary
resultera i skapandet av sampleapp-baseline- och sampleapp-canary-distributioner vars antal repliker bestäms av produkten av percentage
uppgiftsindata med värdet för det önskade antalet 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.
Indataaction: promote
och strategy: canary
och action: reject
och strategy: canary
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 de arbetsbelastningar som deklareras i indatamanifestfilerna att förbli distribuerad i klustret, medan de tillfälliga baslinje- och kanarieversionerna rensas.
Krav
Krav | Beskrivning |
---|---|
Pipelinetyper | YAML, klassisk version, klassisk version |
Körs på | Agent, DeploymentGroup |
Krav | Ingen |
Funktioner | Den här aktiviteten uppfyller inte några krav för efterföljande uppgifter i jobbet. |
Kommandobegränsningar | Valfri |
Inställningsbara variabler | Valfri |
Agentversion | Alla agentversioner som stöds. |
Uppgiftskategori | Distribuera |