Sdílet prostřednictvím


KubernetesManifest@1 – Úloha nasazení do Kubernetes v1

Soubory manifestu Kubernetes můžete použít k nasazení do clusterů nebo dokonce k pečení souborů manifestu, které se mají použít pro nasazení pomocí chartů Helm.

Syntaxe

# 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.

Vstupy

action - akce
string. Povolené hodnoty: bake, createSecret (vytvořit tajný klíč), delete, deploy, patch, promotescale, , reject. Výchozí hodnota: deploy.

Určuje akci, která se má provést.


connectionType - Typ připojení služby
string. Požadováno při action != bake. Povolené hodnoty: azureResourceManager (Azure Resource Manager), kubernetesServiceConnection (Připojení ke službě Kubernetes). Výchozí hodnota: kubernetesServiceConnection.

Vyberte typ připojení služby Kubernetes.

  • kubernetesServiceConnection (Připojení služby Kubernetes) – Umožňuje zadat soubor KubeConfig, zadat účet služby nebo importovat instanci AKS s možností předplatného Azure . Import instance AKS s možností předplatného Azure vyžaduje přístup ke clusteru Kubernetes v době konfigurace připojení ke službě.
  • azureResourceManager (Azure Resource Manager) – Umožňuje vybrat instanci AKS. Nemá přístup ke clusteru Kubernetes v době konfigurace připojení ke službě.

Další informace naleznete v tématu Poznámky.


kubernetesServiceConnection - připojení ke službě Kubernetes
Vstupní alias: kubernetesServiceEndpoint. string. Požadováno při action != bake && connectionType = kubernetesServiceConnection.

Určuje připojení ke službě Kubernetes.


azureSubscriptionConnection - předplatného Azure
Vstupní alias: azureSubscriptionEndpoint. string. Požadováno při action != bake && connectionType = azureResourceManager.

Vyberte předplatné Azure Resource Manager, které obsahuje Azure Container Registry.Poznámka: Chcete-li nakonfigurovat nové připojení služby, vyberte ze seznamu předplatné Azure a klikněte na možnost "Autorizovat". Pokud vaše předplatné není uvedené nebo pokud chcete použít existující instanční objekt, můžete nastavit připojení ke službě Azure pomocí tlačítka Přidat nebo Spravovat.


skupiny prostředků
string. Požadováno při action != bake && connectionType = azureResourceManager.

Vyberte skupinu prostředků Azure.


kubernetesCluster - clusteru Kubernetes
string. Požadováno při action != bake && connectionType = azureResourceManager.

Vyberte spravovaný cluster Azure.


useClusterAdmin - Použití přihlašovacích údajů správce clusteru
boolean. Volitelný. Používá se při connectionType = azureResourceManager. Výchozí hodnota: false.

Místo výchozích přihlašovacích údajů uživatele clusteru použijte přihlašovací údaje správce clusteru.


oboru názvů
string.

Určuje obor názvů pro příkazy pomocí příznaku –namespace . Pokud obor názvů není zadaný, příkazy se spustí ve výchozím oboru názvů.


strategy - Strategie
string. Volitelný. Používá se při action = deploy || action = promote || action = reject. Povolené hodnoty: canary, none. Výchozí hodnota: none.

Určuje strategii nasazení použitou deploy v akci před akcí nebo reject akcí.promote canary V současné době je jedinou přijatelnou strategií nasazení.


trafficSplitMethod - Metoda rozdělení provozu
string. Volitelný. Používá se při strategy = canary. Povolené hodnoty: pod, smi. Výchozí hodnota: pod.

Pro hodnotu smi, procentuální rozdělení provozu se provádí na úrovni požadavku pomocí sítě služeb. Síť služeb musí být nastavena správcem clusteru. Tato úloha zpracovává orchestraci objektů SMI TrafficSplit .

Pro hodnotu podnení procentuální rozdělení možné na úrovni požadavku při absenci sítě služeb. Místo toho se procentuální vstup používá k výpočtu replik pro základní a kanárské hodnoty. Výpočet je procento replik, které jsou zadány ve vstupních manifestech pro stabilní variantu.


percentage - Procento
string. Požadováno při strategy = Canary && action = deploy. Výchozí hodnota: 0.

Procentuální hodnota, která se používá k výpočtu počtu replik úloh obsažených v souborech manifestu se směrným plánem a kanárárskými variantami.

Pro zadaný procentuální vstup vypočítejte:

(procento × počet replik) / 100

Pokud výsledkem není celé číslo, použije se při vytváření základních a kanárkových variant matematický základ výsledku.

Předpokládejme například, že nasazení hello-world je ve vstupním souboru manifestu a že ve vstupu úlohy jsou následující řádky:

replicas: 4
strategy: canary
percentage: 25

V tomto případě se nasazení hello-world-baseline a hello-world-canary vytvoří s jednou replikou. Základní varianta se vytvoří se stejným obrázkem a značkou jako stabilní verze, což je varianta se čtyřmi replikami před nasazením. Vytvoří se kanárková varianta s obrázkem a tagem odpovídajícím nově nasazeným změnám.


baselineAndCanaryReplicas - Základní a kanárské repliky
string. Požadováno při strategy = Canary && action = deploy && trafficSplitMethod = SMI. Výchozí hodnota: 1.

Pokud nastavíte trafficSplitMethod hodnotu smi, procentuální rozdělení provozu je řízeno v rovině sítě servisních služeb. Skutečný počet replik pro kanárkové a základní varianty můžete řídit nezávisle na rozdělení provozu.

Předpokládejme například, že vstupní manifest nasazení určuje 30 replik pro stabilní variantu. Předpokládejme také, že pro úlohu zadáte následující vstup:

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

V tomto případě stabilní varianta obdrží 80% provozu, zatímco základní a kanárková varianta obdrží každá polovinu ze zadaných 20%. Základní a kanárková varianta neobdrží po třech replikách. Místo toho obdrží zadaný počet replik, což znamená, že každý z nich obdrží jednu repliku.


manifests - Manifesty
string. Požadováno při action = deploy || action = promote || action = reject.

Určuje cestu k souborům manifestu, které mají být použity pro nasazení. Každá čára představuje jednu cestu. Vzorek pro porovnávání souborů je přijatelná hodnota pro každý řádek.


containers - Kontejnery
string. Volitelný. Používá se při action = deploy || action = promote || action = bake.

Určuje plně kvalifikovanou adresu URL prostředku obrazu, který má být použit pro náhrady v souborech manifestu. Adresa URL contosodemo.azurecr.io/helloworld:test je příkladem.


imagePullSecrets - ImagePullSecrets
string. Volitelný. Používá se při action = deploy || action = promote.

Určuje víceřádkový vstup, kde každý řádek obsahuje název tajného klíče registru Dockeru, který již byl v clusteru nastaven. Každý název tajného klíče je přidán do části imagePullSecrets pro úlohy, které se nacházejí ve vstupních souborech manifestu.


renderType - Modul vykreslování
string. Volitelný. Používá se při action = bake. Povolené hodnoty: helm, kompose, kustomize. Výchozí hodnota: helm.

Určuje typ vykreslování použitý k vytvoření souborů manifestu.


dockerComposeFile - Cesta k souboru docker compose
string. Požadováno při action = bake && renderType = kompose.

Určuje cestu k souboru docker-compose.


helmChart - Helmův diagram
string. Požadováno při action = bake && renderType = helm.

Určuje cestu k diagramu Helm, která se má zapéct.


releaseName - Název verze nástroje Helm
string. Volitelný. Používá se při action = bake && renderType = helm.

Určuje název verze Helm, který se má použít.


overrideFiles - Přepsat soubory
string. Volitelný. Používá se při action = bake && renderType = helm.

Určuje víceřádkový vstup, který přijímá cestu k přepsaným souborům. Soubory se používají při vypalování souborů manifestu z grafů Helm.


overrides - Potlačuje
string. Volitelný. Používá se při action = bake && renderType = helm.

Určuje hodnoty přepsání, které se mají nastavit.


kustomizationPath - Cesta kustomizace
string. Volitelný. Používá se při action = bake && renderType = kustomize.

Určuje argument, kterým musí být cesta k adresáři obsahujícímu soubor, nebo adresa URL úložiště git s příponou cesty specifikovanou same s ohledem na kořen úložiště.


resourceToPatch - Zdroj k záplatě
string. Požadováno při action = patch. Povolené hodnoty: file, name. Výchozí hodnota: file.

Označuje jednu z následujících metod opravy:

  • Soubor manifestu identifikuje objekty, které mají být opraveny.
  • Jednotlivý objekt je identifikován druhem a názvem jako cíl záplaty.

Přijatelné hodnoty jsou soubor a název.


cesta k souboru resourceFileToPatch -
string. Požadováno při action = patch && resourceToPatch = file.

Určuje cestu k souboru použitému pro záplatu.


kind - Laskavý
string. Požadováno při action = scale || resourceToPatch = name. Povolené hodnoty: deployment, replicaset, statefulset.

Určuje druh objektu K8s, například deployment, replicaSet a další.


name - Jméno
string. Požadováno při action = scale || resourceToPatch = name.

Určuje název objektu K8s.


replicas - Počet replik
string. Požadováno při action = scale.

Určuje počet replik, na které se má škálovat.


replicas - Počet replik
string. Požadováno při action = scale.

Určuje název objektu K8s.


mergeStrategy - Strategie sloučení
string. Požadováno při action = patch. Povolené hodnoty: json, merge, strategic. Výchozí hodnota: strategic.

Určuje typ poskytované záplaty.


argumentů
string. Volitelný. Používá se při action = delete.

Určuje argumenty příkazu kubectl delete . Příklad: arguments: deployment hello-world foo-bar


patch - Záplata
string. Požadováno při action = patch.

Určuje obsah záplaty.


typ tajnéhosecretType -
string. Požadováno při action = createSecret. Povolené hodnoty: dockerRegistry, generic. Výchozí hodnota: dockerRegistry.

Vytvoří nebo aktualizuje obecnou imagepullsecretnebo docker . Zadejte dockerRegistry k vytvoření nebo aktualizaci imagepullsecret vybraného registru. imagePullSecret je způsob, jak předat tajný kód, který obsahuje heslo registru kontejneru do Kubeletu, aby mohl za váš pod načíst privátní image.


secretName - název tajného kódu
string. Volitelný. Používá se při action = createSecret.

Určuje název tajného klíče. Tento název tajného kódu můžete použít v konfiguračním souboru YAML Kubernetes.


argumentů
string. Volitelný. Používá se při action = createSecret && secretType = generic.

Určuje klíče a hodnoty literálů, které se mají vložit do tajného kódu. Například --from-literal=key1=value1--from-literal=key2="top secret".


dockerRegistryEndpoint - připojení ke službě registru Dockeru
string. Volitelný. Používá se při action = createSecret && secretType = dockerRegistry.

Určuje přihlašovací údaje zadaného připojení služby, které se používají k vytvoření tajného klíče registru Dockeru v rámci clusteru. Soubory manifestu pod polem imagePullSecrets pak mohou odkazovat na název tohoto tajného klíče.


rolloutStatusTimeout - Časový limit pro stav zavedení
string. Volitelný. Používá se při action = deploy || action = patch || action = scale || action = promote. Výchozí hodnota: 0.

Určuje dobu čekání (v sekundách) před ukončením watch on rollout stavu.


resourceType - Typ prostředku
string. Volitelný. Používá se při action = deploy. Výchozí hodnota: Microsoft.ContainerService/managedClusters.

Typ zdroje (flotila, spravovaný cluster).


Možnosti ovládání úloh

Všechny úlohy mají kromě vstupů také možnosti ovládání. Další informace naleznete v tématu Možnosti ovládacího prvku a běžné vlastnosti úloh.

Výstupní proměnné

Tato úloha definuje následující výstupní proměnné, které můžete využívat v podřízených krocích, úlohách a fázích.

manifestsBundle
Umístění balíčků manifestu vytvořených akcí pečení

Poznámky

Aspekty připojení ke službě Kubernetes Service při přístupu k AKS

Můžete vytvořit připojení služby Kubernetes s některou z následujících možností.

  • KubeConfig
  • Účet služby
  • Předplatné Azure

snímek obrazovky s výběrem metody ověřování připojení ke službě Kubernetes

Při výběru možnosti předplatného Azure musí být Kubernetes přístupný pro Azure DevOps v době konfigurace připojení služby. Může se jednat o různé důvody, proč není možné vytvořit připojení služby, například jste vytvořili privátní cluster nebo cluster má místní účty zakázané. V těchto případech se Azure DevOps nemůže připojit ke clusteru v době konfigurace připojení služby a uvidíte zablokovaný Načítá se obory názvů obrazovce.

snímek obrazovky s výběrem dialogového okna ověřování připojení ke službě Kubernetes zablokovaným při načítání oborů názvů

Počínaje Kubernetes 1.24 se dlouhodobé tokeny ve výchozím nastaveníuž nevytvořily. Kubernetes nedoporučuje používat dlouhodobé tokeny. V důsledku toho úlohy využívající připojení služby Kubernetes vytvořené s možností předplatného Azure nemají přístup k trvalému tokenu potřebnému k ověření a nemají přístup ke clusteru Kubernetes. Výsledkem je také zablokovaný dialog Načítání oborů názvů.

Použití připojení ke službě Azure Resource Manager pro přístup k AKS

Pro zákazníky AKS poskytuje typ připojení služby Azure Resource Manager nejlepší způsob připojení k privátnímu clusteru nebo cluster, který má zakázané místní účty. Tato metoda není závislá na připojení ke clusteru v době, kdy vytváříte připojení služby. Přístup k AKS se odloží do modulu runtime kanálu, který má následující výhody:

  • Přístup k (privátnímu) clusteru AKS je možné provést z agenta škálovací sady v místním prostředí nebo agentu škálovací sady, který je v dohledu clusteru.
  • Vytvoří se token pro každou úlohu, která používá připojení služby Azure Resource Manager. Tím zajistíte, že se připojujete k Kubernetes pomocí krátkodobého tokenu, což je doporučení Kubernetes.
  • K AKS se dostanete i v případě, že jsou místní účty zakázané.

Nejčastější dotazy k připojení ke službám

Zobrazuje se mi následující chybová zpráva: Nepodařilo se najít žádný tajný kód přidružený k účtu služby. Co se děje?

Používáte připojení ke službě Kubernetes s možností předplatného Azure. Tuto metodu aktualizujeme, abychom vytvořili dlouhodobé tokeny. Očekává se, že bude k dispozici v polovině května. Doporučuje se ale začít používat typ připojení služby Azure, a ne používat dlouhodobé tokeny podle pokynů Kubernetes.

Používám AKS a nechci nic měnit, můžu dál používat úlohy s připojením ke službě Kubernetes?

Tuto metodu aktualizujeme, abychom vytvořili dlouhodobé tokeny. Očekává se, že bude k dispozici v polovině května. Mějte však na paměti, že tento přístup se pokyny kubernetes.

Používám úlohy Kubernetes a připojení ke službě Kubernetes, ale ne AKS. Mám se obtěžovat?

Úkoly budou dál fungovat jako předtím.

Odebere se typ připojení služby Kubernetes?

Naše úlohy Kubernetes pracují s jakýmkoli clusterem Kubernetes bez ohledu na to, kde běží. Připojení ke službě Kubernetes bude i nadále existovat.

Jsem zákazník AKS a všechno funguje správně, mám jednat?

Není potřeba nic měnit. Pokud během vytváření používáte připojení ke službě Kubernetes a vybrané předplatné Azure, měli byste vědět o pokynech k Kubernetes při používání dlouhodobých tokenů.

Vytvářím prostředí Kubernetes a nemám možnost používat připojení služeb

V případě, že během vytváření prostředí nemáte přístup ke službě AKS, můžete použít prázdné prostředí a nastavit connectionType vstup na připojení služby Azure Resource Manager.

Mám AKS nakonfigurované s Azure Active Directory RBAC a kanál nefunguje. Vyřeší to tyto aktualizace?

Přístup k Kubernetes, když je povolený AAD RBAC, nesouvisí s vytvářením tokenů. Abychom zabránili interaktivní výzvě, budeme podporovat kubelogin v budoucí aktualizaci.

Pomocí úlohy manifestu Kubernetes v kanálu sestavení nebo verze můžete zapéct a nasadit manifesty do clusterů Kubernetes.

Tato úloha podporuje následující položky:

  • Nahrazení artefaktů: Akce nasazení bere jako vstup seznam bitových kopií kontejnerů, které můžete zadat spolu s jejich značkami a souhrnnými úpravami. Stejný vstup je nahrazen do nešablonovaných souborů manifestu před aplikací do clusteru. Tato náhrada zajistí, že uzly clusteru načtou správnou verzi image.

  • Stabilita manifestu: Kontroluje se stav nasazení nasazených objektů Kubernetes. Kontroly stability jsou začleněny k určení, zda je stav úlohy úspěšný nebo neúspěšný.

  • Anotace sledovatelnosti: K nasazeným objektům Kubernetes se přidávají anotace, které překrývají informace o sledovatelnosti. Podporovány jsou následující poznámky:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/spuštění
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • Zpracování tajných kódů: Tato createSecret akce umožňuje vytvářet tajné kódy registru Docker pomocí připojení ke službě registru Docker. Umožňuje také vytvářet obecné tajné kódy pomocí proměnných ve formátu prostého textu nebo tajných proměnných. Před nasazením secrets do clusteru můžete použít vstup spolu s deploy akcí k rozšíření vstupních souborů manifestu o příslušnou imagePullSecrets hodnotu.

  • Manifest pečení: Akce bake úlohy umožňuje zapékání šablon do souborů manifestu Kubernetes. Akce používá nástroje, jako jsou Helm, Compose a Kustomize. Při pečení jsou tyto soubory manifestu Kubernetes použitelné pro nasazení do clusteru.

  • Strategie nasazení: Výběr canary strategie s akcí deploy vede k vytvoření názvů úloh s příponou -baseline a -canary. Úloha podporuje dva způsoby rozdělení provozu:

    • Rozhraní Service Mesh: Abstrakce rozhraní SMI (Service Mesh Interface ) umožňuje konfiguraci s poskytovateli sítě služeb, jako jsou Linkerd a Istio. Úloha manifestu Kubernetes mapuje objekty SMI TrafficSplit na stabilní, základní a kanárkové služby během životního cyklu strategie nasazení.

      Kanárková nasazení, která jsou založena na síti služeb a používají tuto úlohu, jsou přesnější. Tato přesnost je způsobena tím, jak poskytovatelé sítě služeb umožňují granulární rozdělení provozu na základě procent. Síť služeb používá registr služeb a kontejnery sajdkár, které jsou vloženy do podů. K této injektáži dochází společně s kontejnery aplikací, aby se dosáhlo podrobného rozdělení provozu.

    • Kubernetes bez sítě služeb: Pokud síť služeb neexistuje, nemusí se na úrovni požadavku zobrazit přesné procentuální rozdělení, které chcete. Kanárkové nasazení ale můžete provést pomocí základních a kanárkových variant vedle stabilní varianty.

      Služba odesílá požadavky do podů všech tří variant úloh, pokud jsou splněna omezení selektor-label. Manifest Kubernetes tyto požadavky respektuje při vytváření základních a kanárkových variant. Toto chování směrování dosahuje zamýšleného efektu směrování pouze části celkových požadavků na kanárského nástroje.

    Porovnejte základní a kanárkové úlohy pomocí úlohy ručního zásahu v kanálech vydání nebo úlohy zpoždění v kanálech YAML. Před použitím akce zvýšení nebo zamítnutí úkolu proveďte porovnání.

Nasazení akce

Následující kód YAML je příkladem nasazení do oboru názvů Kubernetes pomocí souborů manifestu:

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

Ve výše uvedeném příkladu se úloha pokusí najít shody pro obrázky foo/demo a bar/demo v obrazových polích souborů manifestu. Pro každou nalezenou shodu je hodnota buď tagVariable1 nebo tagVariable2 připojena jako tag k názvu obrazu. Hodnoty hash můžete také zadat ve vstupu kontejnerů pro nahrazování artefaktů.

Poznámka:

I když můžete vytvářet deployakce se promotereject vstupem YAML související se strategií nasazení, podpora úlohy ručního zásahu není v současné době pro kanály sestavení k dispozici.

U kanálů verze doporučujeme používat akce a vstupy související se strategií nasazení v následujícím pořadí:

  1. Akce nasazení určená pomocí strategy: canary a percentage: $(someValue).
  2. Úloha ručního zásahu, abyste mohli pozastavit kanál a porovnat základní variantu s kanárkovou variantou.
  3. Akce povýšení, která se spustí v případě obnovení úlohy ručního zásahu, a akce odmítnutí, která se spustí v případě odmítnutí úlohy ručního zásahu.

Vytvoření tajné akce

Následující kód YAML ukazuje ukázkové vytvoření tajných kódů registru Docker pomocí připojení služby Docker Registry:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

Tento kód YAML ukazuje ukázkové vytvoření obecných tajných kódů:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

Akce pečení

Následující kód YAML je příkladem zapečení souborů manifestu z grafů Helm. Všimněte si použití zadání názvu v první úloze. Na tento název se později odkazuje z kroku nasazení pro určení cesty k manifestům, které byly vytvořeny krokem bake.

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

Poznámka:

Pokud chcete Helm používat přímo ke správě vydání a vrácení zpět, přečtěte si úlohu Balení a nasazení grafů Helm.

Příklad Kustomize

Následující kód YAML je příkladem souborů manifestu pečení vygenerovaných pomocí Kustomize, které obsahují kustomization.yaml soubor.

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)

Příklad aplikace Kompose

Následující kód YAML je příkladem pečení souborů manifestu vygenerovaných pomocí Kompose, nástroje pro převod pro 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)

Operace škálování

Následující kód YAML ukazuje příklad změny měřítka objektů:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

Akce opravy

Následující kód YAML ukazuje příklad záplatování objektů:

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

Akce Smazat

Tento kód YAML ukazuje ukázkové odstranění objektu:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

Řešení problémů

Můj cluster Kubernetes se nachází za bránou firewall a používám hostované agenty. Jak můžu provést nasazení do tohoto clusteru?

Hostovaným agentům můžete udělit přístup přes bránu firewall povolením IP adres hostovaných agentů. Další podrobnosti najdete v části věnované rozsahům IP adres agentů.

Jak u testovacích nasazení fungují požadavky na stabilní a proměnlivé trasy služby?

Vztah selektoru popisku mezi pody a službami v Kubernetes umožňuje nastavit nasazení tak, aby jedna služba směrovala požadavky jak na stabilní, tak na testovací variantu. Úloha manifestu Kubernetes ji používá pro kanárková nasazení.

Pokud úloha obsahuje vstupy action: deploy a strategy: canary, pro každou úlohu (nasazení, sada replik, pod, ...) definované ve vstupních souborech manifestu se vytvoří varianta -baseline-canary a a nasazení. V tomto příkladu je nasazení sampleapp ve vstupním souboru manifestu a po dokončení spuštění číslo 22 kanálu se v clusteru nasadí stabilní varianta tohoto nasazení s názvem sampleapp . V následném spuštění (v tomto případě spuštění číslo 23) by úloha manifestu Kubernetes s action: deploy a strategy: canary vedla by k vytvoření nasazení sampleapp-baseline a sampleapp-canary, jejichž počet replik je určen součinem percentage vstupu úlohy s hodnotou požadovaného počtu replik pro konečnou stabilní variantu sampleapp podle vstupních souborů manifestu.

Bez zahrnutí počtu replik má základní verze stejnou konfiguraci jako stabilní varianta, zatímco kanárková verze má nové změny, které zavádí aktuální spuštění (v tomto případě spuštění číslo 23). Pokud je po výše uvedeném kroku v pipeline nastaven ruční zásah, umožnilo by to pozastavit pipeline, aby správce pipeline mohl vyhodnotit klíčové metriky pro základní a kanárkovou verzi a rozhodnout o tom, zda jsou kanárkové změny bezpečné a dostatečně dobré pro úplné nasazení.

Vstupyaction: promote and strategy: canary nebo action: reject a úloh strategy: canary manifestu Kubernetes lze použít k povýšení nebo odmítnutí kanárkových změn. Všimněte si, že v obou případech na konci tohoto kroku zůstane v clusteru nasazena pouze stabilní varianta úloh deklarovaných ve vstupních souborech manifestu, zatímco dočasné základní a kanárkové verze budou vyčištěny.

Požadavky

Požadavek Popis
Typy kanálů YAML, klasické sestavení, klasická verze
Běží na Agent, DeploymentGroup
Požadavky Žádné
možnosti Tento úkol nesplňuje žádné požadavky na následné úkoly v úloze.
omezení příkazů Jakýkoliv
nastavitelné proměnné Jakýkoliv
Verze agenta Všechny podporované verze agenta.
Kategorie úkolu Nasadit