Dela via


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 smiutfö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 podgå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 smiden 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)

Skärmbild av att välja en autentiseringsmetod för Kubernetes-tjänstanslutning.

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 .

Skärmbild av att välja en dialogruta för autentisering av Kubernetes-tjänstanslutning som fastnat vid inläsning av namnrymder.

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ända secrets indata tillsammans med deploy åtgärden för att utöka indatamanifestfilerna med lämpligt imagePullSecrets 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 med deploy å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 och Istio. Kubernetes-manifestuppgiften mappar SMI-objekt TrafficSplit 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, promoteoch 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:

  1. En distributionsåtgärd som anges med strategy: canary och percentage: $(someValue).
  2. En manuell åtgärdsaktivitet så att du kan pausa pipelinen och jämföra baslinjevarianten med kanarievarianten.
  3. 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