Zabalení a nasazení helmových grafů – úloha
Azure Pipelines
Pomocí této úlohy můžete nasadit, nakonfigurovat nebo aktualizovat cluster Kubernetes v Azure Container Service spuštěním příkazů Helm. Helm je nástroj, který zjednodušuje nasazování a správu aplikací Kubernetes pomocí formátu balení, který se nazývá grafy.
K definování, verzi, sdílení, instalaci a upgradu i nejsložitější aplikace Kubernetes můžete použít Helm.
- Helm vám pomůže zkombinovat několik manifestů Kubernetes (yaml), jako jsou služby, nasazení, mapy konfigurace a další, do jedné jednotky nazvané Helm Charts. Nemusíte vynalézat ani používat tokenizaci ani nástroj pro šablonování.
- Grafy Helm vám pomůžou spravovat závislosti aplikací a nasazovat je a také vrátit zpět jako jednotku. Můžete je také snadno vytvářet, vytvářet verze, publikovat a sdílet s ostatními partnerskými týmy.
Azure Pipelines má integrovanou podporu pro grafy Helm:
- Úlohu instalačního programu nástroje Helm je možné použít k instalaci správné verze Nástroje Helm na agenty.
- Balíček Helm a úlohu nasazení je možné použít k zabalení aplikace a nasazení do clusteru Kubernetes. Úlohu můžete použít k instalaci nebo aktualizaci Tilleru na obor názvů Kubernetes, k zabezpečenému připojení k Tilleru přes TLS pro nasazení grafů nebo ke spuštění jakéhokoli příkazu Helm, jako je lint.
- Úloha Helm podporuje připojení k Azure Kubernetes Service pomocí připojení služby Azure. K libovolnému clusteru Kubernetes se můžete připojit pomocí kubeconfig nebo účtu služby.
- Nasazení Helm je možné doplnit pomocí úlohy Kubectl. například create/update, imagepullsecret a další.
Připojení služby
Úloha funguje se dvěma typy připojení služby: Azure Resource Manager a Připojení ke službě Kubernetes.
Poznámka
Připojení ke službě se nevyžaduje, pokud už je ve fázi kanálu zadaný prostředek prostředí, který odkazuje na cluster Kubernetes.
Azure Resource Manager
| Parametry | Popis |
|---|---|
connectionType(Typ připojení služby) | (Vyžaduje se, pokud už není prostředek prostředí k dispozici.) Azure Resource Manager použít Azure Kubernetes Service. Připojení ke službě Kubernetes Service pro jakýkoli jiný cluster. Výchozí hodnota: Azure Resource Manager |
azureSubscriptionEndpoint(předplatné Azure) | (Povinné) Název připojení služby Azure. |
azureResourceGroup(Skupina prostředků) | (Povinné) Název skupiny prostředků v rámci předplatného. |
kubernetesCluster(cluster Kubernetes) | (Povinné) Název clusteru AKS. |
namespace(Obor názvů) | (Volitelné) Obor názvů, ve kterém jsou příkazy kubectl spuštěny. Pokud není zadaný, použije se výchozí obor názvů. |
Tento příklad YAML YAML ukazuje Azure Resource Manager se používá k odkazování na cluster Kubernetes. Používá se s jedním z příkazů Helm a příslušnými hodnotami požadovanými pro příkaz:
variables:
azureSubscriptionEndpoint: Contoso
azureContainerRegistry: contoso.azurecr.io
azureResourceGroup: Contoso
kubernetesCluster: Contoso
- task: HelmDeploy@0
displayName: Helm deploy
inputs:
connectionType: Azure Resource Manager
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
Připojení ke službě Kubernetes Service
| Parametry | Popis |
|---|---|
kubernetesServiceEndpoint(Připojení ke službě Kubernetes) | (Vyžaduje se, pokud už není prostředek prostředí k dispozici.) Vyberte připojení ke službě Kubernetes. |
namespace(Obor názvů) | (Volitelné) Obor názvů, ve kterém jsou příkazy kubectl spuštěny. Pokud není zadaný, použije se výchozí obor názvů. |
Tento příklad YAML YAML ukazuje, jak se připojení ke službě Kubernetes používá k odkazování na cluster Kubernetes. Používá se s jedním z příkazů Helm a příslušnými hodnotami požadovanými pro příkaz:
- task: HelmDeploy@0
displayName: Helm deploy
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
Hodnoty příkazů
Vstup příkazu přijímá jeden z následujících příkazů Helm:create/delete/expose/get/init/install/login/logout/ls/package/rollback/upgrade.
| Parametry | Popis |
|---|---|
command(Příkaz) | (Povinné) Vyberte příkaz Helm. Výchozí hodnota: ls |
arguments(Argumenty) | Možnosti příkazu Helm. |
Tento příklad YAML ukazuje příkaz ls:
- task: HelmDeploy@0
displayName: Helm list
inputs:
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
command: ls
arguments: --all
Init – příkaz
| Parametry | Popis |
|---|---|
command(Příkaz) | (Povinné) Vyberte příkaz Helm. Výchozí hodnota: ls |
canaryimage(Použití verze kanárové image) | Použijte image Canary Tiller, nejnovější předběžnou verzi Tilleru. Výchozí hodnota: false |
upgradetiller(Upgrade Tilleru) | Upgradujte, pokud už je Tiller nainstalovaný. Výchozí hodnota: true |
waitForExecution(Čekání) | Blokujte, dokud se provádění příkazu nedokončí. Výchozí hodnota: true |
arguments(Argumenty) | Možnosti příkazu Helm. |
Tento příklad YAML ukazuje příkaz init:
- task: HelmDeploy@0
displayName: Helm init
inputs:
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
command: init
upgradetiller: true
waitForExecution: true
arguments: --client-only
install – příkaz
| Parametry | Popis |
|---|---|
command(Příkaz) | (Povinné) Vyberte příkaz Helm. Výchozí hodnota: ls |
chartType(Typ grafu) | (Povinné) Vyberte, jak chcete zadat informace o grafu. Můžete zadat název chartu nebo cestu ke složce nebo souboru chartu. Dostupné možnosti: Název, Cesta k souboru. Výchozí hodnota: Název |
chartName(Název grafu) | (Povinné) Odkaz na graf k instalaci, může to být adresa URL nebo název chartu. Pokud je například název chartu stabilní nebo mysql,úloha spustí helm install stable/mysql. |
releaseName(Název verze) | (Volitelné) Název verze. Pokud není zadaný, vygeneruje se automaticky. Vstup releaseName je platný jenom pro příkazy install a upgrade. |
overrideValues(Nastavení hodnot) | (Volitelné) Nastavte hodnoty na příkazovém řádku. Můžete zadat více hodnot oddělením hodnot čárkami. Například key1=val1,key2=val2. Můžete také zadat více hodnot tak, že je oddělujete s novým řádkem: klíč1 = Val1 key2 = Val2 Všimněte si, že pokud máte hodnotu, která obsahuje newlines, použijte valueFile možnost, jinak bude úloha považovat nový řádek za oddělovač. Úloha vytvoří příkaz Helm pomocí těchto hodnot sady. Například Helm Install--set klíč1 = Val1./Redis |
valueFile(Soubor hodnot) | Volitelné Zadejte hodnoty v souboru YAML nebo v adrese URL. Například zadání MyValues. yaml bude mít za následek Helm Install--Values = MyValues. yaml |
updatedependency(Závislost aktualizace) | Volitelné Před instalací grafu spusťte aktualizaci závislostí Helm. Aktualizujte závislosti z požadavků. yaml je před zabalením do grafu nebo adresáře. Výchozí hodnota: false |
waitForExecutionČekací | Volitelné Zablokuje, dokud se provádění příkazu nedokončí. Výchozí hodnota: true |
argumentsNáhodné | Možnosti příkazu Helm |
Tento YAML příklad ukazuje příkaz install :
- task: HelmDeploy@0
displayName: Helm install
inputs:
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
command: install
chartType: FilePath
chartPath: Application/charts/sampleapp
Package – příkaz
| Parametry | Popis |
|---|---|
commandSystému | Požadovanou Vyberte příkaz Helm. Výchozí hodnota: ls |
chartPath(Cesta k grafu) | Požadovanou Cesta k diagramu, který se má nainstalovat Může se jednat o cestu k zabalenému grafu nebo k cestě k rozbalenému adresáři grafu. Pokud například zadáte ./Redis , úloha se spustí Helm Install./Redis. Pokud pracujete s grafem, který je publikován jako artefakt, bude cesta $ (System. DefaultWorkingDirectory)/ARTIFACT-Name/Charts/Chart-Name |
versionZnění | Volitelné Zadejte přesně verzi grafu, která se má nainstalovat. Pokud tento parametr nezadáte, nainstaluje se nejnovější verze. Nastavte verzi v grafu na tuto verzi semver. |
destinationTabulka | Volitelné Zadejte hodnoty v souboru YAML nebo v adrese URL. Výchozí hodnota: $ (Build. ArtifactStagingDirectory) |
updatedependency(Závislost aktualizace) | Volitelné Před instalací grafu spusťte aktualizaci závislostí Helm. Aktualizujte závislosti z požadavků. yaml je před zabalením do grafu nebo adresáře. Výchozí hodnota: false |
saveUloží | Volitelné Uložit zabalený graf do úložiště místního grafu Výchozí hodnota: true |
argumentsNáhodné | Možnosti příkazu Helm |
Tento YAML příklad ukazuje příkaz balíčku :
- task: HelmDeploy@0
displayName: Helm package
inputs:
command: package
chartPath: Application/charts/sampleapp
destination: $(Build.ArtifactStagingDirectory)
upgrade – příkaz
| Parametry | Popis |
|---|---|
commandSystému | Požadovanou Vyberte příkaz Helm. Výchozí hodnota: ls |
chartType(Typ grafu) | Požadovanou Vyberte, jak chcete zadat informace o grafu. Můžete zadat buď název grafu, nebo cestu ke složce nebo souboru do grafu. Dostupné možnosti: název, FilePath. Výchozí hodnota: název |
chartName(Název grafu) | Požadovanou Odkaz na graf k instalaci, může to být adresa URL nebo název grafu. Pokud je například název grafu stabilní/MySQL, úloha spustí Helm instalace stabilní/MySQL |
releaseName(Název verze) | Volitelné Název verze Pokud není zadaný, automaticky se vygeneruje. |
overrideValues(Nastavit hodnoty) | Volitelné Nastavte hodnoty na příkazovém řádku. Můžete zadat více hodnot oddělením hodnot čárkami. Například klíč1 = Val1, key2 = Val2. Můžete také zadat více hodnot tak, že je oddělujete s novým řádkem: klíč1 = Val1 key2 = Val2 Všimněte si, že pokud máte hodnotu, která obsahuje newlines, použijte valueFile možnost, jinak bude úloha považovat nový řádek za oddělovač. Úloha vytvoří příkaz Helm pomocí těchto hodnot sady. Například Helm Install--set klíč1 = Val1./Redis |
valueFile(Soubor hodnot) | Volitelné Zadejte hodnoty v souboru YAML nebo v adrese URL. Například zadání MyValues. yaml bude mít za následek Helm Install--Values = MyValues. yaml |
install(Instalovat, pokud verze není k dispozici) | Volitelné Pokud již neexistuje verze s tímto názvem, spusťte instalaci. Výchozí hodnota: true |
recreate(Znovu vytvořit lusky) | Volitelné Pokud je to možné, provádí restart lusků u prostředku. Výchozí hodnota: false |
resetValues(Resetování hodnot) | Volitelné Obnovte hodnoty do těch, které jsou integrovány do grafu. Výchozí hodnota: false |
forceOde | Volitelné Vynutit aktualizaci prostředků v případě potřeby pomocí Delete nebo Create Výchozí hodnota: false |
waitForExecutionČekací | Volitelné Zablokuje, dokud se provádění příkazu nedokončí. Výchozí hodnota: true |
argumentsNáhodné | Možnosti příkazu Helm |
Tento YAML příklad ukazuje příkaz upgradu :
- task: HelmDeploy@0
displayName: Helm upgrade
inputs:
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
command: upgrade
chartType: filepath
chartPath: $(Build.ArtifactStagingDirectory)/sampleapp-v0.2.0.tgz
releaseName: azuredevopsdemo
install: true
waitForExecution: false
Uložit příkaz
| Parametry | Popis |
|---|---|
commandSystému | Požadovanou Vyberte příkaz Helm. Výchozí hodnota: ls |
chartNameForACR(Název grafu pro Azure Container Registry) | (Povinné) Název grafu, se kterým bude graf uložený v Azure Container Registry. |
chartPathForACR(Cesta grafu pro Azure Container Registry) | (Povinné) Cesta k adresáři chartu. |
azureSubscriptionEndpointForACR(Předplatné Azure pro Container Registry) | (Povinné) Vyberte předplatné Azure s vaším Azure Container Registry. |
azureResourceGroupForACR(Skupina prostředků) | (Povinné) Vyberte skupinu prostředků Azure, která obsahuje vaši Container Registry. |
azureContainerRegistry(Azure Container Registry) | (Povinné) Vyberte instanci Azure Container Registry která se použije k nasazování grafů Helm. |
arguments(Argumenty) | Možnosti příkazu Helm |
Tento příklad YAML ukazuje příkaz save:
- task: HelmDeploy@0
displayName: Helm save
inputs:
command: save
chartNameForACR: mycontainerregistry.azurecr.io/helm/hello-world:v1
chartPathForACR: Application/charts/sampleapp
azureSubscriptionEndpointForACR: $(azureSubscriptionEndpointForACR)
azureResourceGroupForACR: $(azureResourceGroupForACR)
azureContainerRegistry: $(azureContainerRegistry)
Balení a podepisování grafů Helm
V této části se dozvíte, jak zabalit a podepsat grafy Helm v kanálu.
Vygenerování páru privátního a veřejného klíče pro podepisování chartu Helm pomocí GPG
Stáhněte si GPG.
Spusťte příkazový řádek v režimu správce. Spuštěním následujícího příkazu vygenerujte pár privátního a veřejného klíče, který podepíše chart Helm pomocí gpg. Při vytváření klíče se zobrazí výzva k zadání uživatelského jména a e-mailové adresy. Název vytvořeného páru privátního a veřejného klíče se později použije jako "jmenná e-mailová adresa".
gpg --full-generate-key
Zobrazí se výzva k zadání hesla. Dejte hodnotu a klikněte na OK.

Po vytvoření klíče můžete pomocí následujícího příkazu zobrazit seznam klíčů, které obsahují privátní i veřejné klíče.
Zobrazení seznamu privátních klíčů
gpg --list-secret-keys
Zobrazení seznamu veřejných klíčů
gpg --list-keys
Privátní a veřejné klíče uložte do 2 různých souborů s příponou gpg, jak je znázorněno níže.
- Privátní klíč
gpg --export-secret-key 94325E18E53EDD99DD8339C3CFD9DAF0707CB788 contoso@microsoft.com > C:/somepath/privatekeys.gpgUvidíte, že se soubor privatekeys.gpg exportoval do cesty uvedené výše.
- Pro veřejný klíč
gpg --export-key 94325E18E53EDD99DD8339C3CFD9DAF0707CB788 contoso@microsoft.com > C:/somepath/publickey.gpgUvidíte, že se soubor publickey.gpg exportoval do cesty uvedené výše.
V Azure DevOps uložte soubor privatekey.gpg do části Soubory zabezpečení knihovny.
Příklad
pool:
name: Hosted Ubuntu 1604
variables:
# The below variable should be secure
HelmKeyPassphrase: contoso@123
keyName: contoso contoso@microsoft.com
azureSubscriptionEndpoint: contoso
azureResourceGroup: contoso
kubernetesCluster: contoso
steps:
- task: DownloadSecureFile@1
displayName: Download Secure file
inputs:
secureFile: privatekey.gpg
name: privateKeyRing
- task: HelmInstaller@0
displayName: Install Helm 2.12.0
inputs:
helmVersion: 2.12.0
- task: HelmDeploy@0
displayName: helm init
inputs:
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
command: init
arguments: --client-only
- task: HelmDeploy@0
displayName: helm package
inputs:
azureSubscriptionEndpoint: $(azureSubscriptionEndpoint)
azureResourceGroup: $(azureResourceGroup)
kubernetesCluster: $(kubernetesCluster)
command: package
chartPath: Application/charts/sampleapp
arguments: --sign --key "$(keyName)" --keyring $(privateKeyRing.secureFilePath)
env:
HelmKeyPassphrase: $(HelmKeyPassphrase)
Řešení potíží
Úloha HelmDeploy při spuštění helm init --wait --client-only v Helmu verze 3.0.2 vyvolá chybu neznámý příznak: --wait.
Mezi Helmem 2 a Helmem 3 došlo k některým změnám. Jeden z nich zahrnuje odebrání Tilleru, a proto helm init se příkaz už nepodporuje. Pokud používáte Helm verze 3.0 nebo novější, odeberte příkaz init.
Pokud používáte Helm 3 a System.debug je nastavená na true a používá se upgrade Helmu, kanál selže, i když upgrade byl úspěšný.
Jedná se o známý problém v Helmu 3, který některé protokoly zapisuje do výstupu stderr. Úloha HelmDeploy se označí jako neúspěšná, pokud výstup stderr obsahuje protokoly nebo je ukončovací kód nenulový. Nastavte vstup úlohy failOnStderr: false, aby se protokoly zapisované do výstupu stderr ignorovaly.
Open source
Tato úloha je open source na GitHub. Zpětnou vazbu a příspěvky jsou vítané.