Skicka och hämta Helm-diagram till ett Azure-containerregister
Om du snabbt vill hantera och distribuera program för Kubernetes kan du använda Helm-pakethanteraren med öppen källkod. Med Helm definieras programpaket som diagram, som samlas in och lagras på en Helm-diagramdatabas.
Den här artikeln visar hur du är värd för Helm-diagramlagringsplatsen i ett Azure-containerregister med hjälp av Helm 3-kommandon och lagring av diagram som OCI-artefakter. I många scenarier skulle du skapa och ladda upp egna diagram för de program som du utvecklar. Mer information om hur du skapar egna Helm-diagram finns i utvecklarhandboken för diagrammallen. Du kan också lagra ett befintligt Helm-diagram från en annan Helm-lagringsplats.
Viktigt
Den här artikeln har uppdaterats med Helm 3-kommandon från och med version 3.7.1. Helm 3.7.1 innehåller ändringar av Helm CLI-kommandon och OCI-stöd som introducerades i tidigare versioner av Helm 3.
Helm 3 eller Helm 2?
Om du vill lagra, hantera och installera Helm-diagram använder du kommandon i Helm CLI. Viktiga Helm-versioner är Helm 3 och Helm 2. Mer information om versionsskillnader finns i Vanliga frågor och svar om versionen.
Helm 3 bör användas som värd för Helm-diagram i Azure Container Registry. Med Helm 3 gör du följande:
- Kan lagra och hantera Helm-diagram i lagringsplatsen i ett Azure-containerregister
- Lagra Helm-diagram i registret som OCI-artefakter. Azure Container Registry ger GA-stöd för OCI-artefakter, inklusive Helm-diagram.
- Autentisera med registret med hjälp av
helm registry loginaz acr loginkommandot eller . - Använda
helmkommandon för att skicka, hämta och hantera Helm-diagram i ett register - Använd
helm installför att installera diagram till ett Kubernetes-kluster från registret.
Funktionsstöd
Azure Container Registry stöder specifika hanteringsfunktioner för Helm-diagram, beroende på om du använder Helm 3 (aktuell) eller Helm 2 (inaktuell).
| Funktion | Helm 2 | Helm 3 |
|---|---|---|
Hantera diagram med az acr helm kommandon |
✔️ | |
| Lagra diagram som OCI-artefakter | ✔️ | |
Hantera diagram med az acr repository kommandon och bladet Lagringsplatsen i Azure Portal |
✔️ |
Anteckning
Från och med Helm 3 blir az acr helm-kommandon för användning med Helm 2-klienten inaktuella. Minst tre månaders varsel ges innan kommandot tas bort.
Diagramversionskompatibilitet
Följande Helm-diagramversioner kan lagras i Azure Container Registry och kan installeras av Helm 2- och Helm 3-klienterna.
| Version | Helm 2 | Helm 3 |
|---|---|---|
| apiVersion v1 | ✔️ | ✔️ |
| apiVersion v2 | ✔️ |
Migrera från Helm 2 till Helm 3
Om du tidigare har lagrat och distribuerat diagram med helm 2 och Azure Container Registry rekommenderar vi att du migrerar till Helm 3. Se:
- Migrera Helm 2 till 3 i Helm-dokumentationen.
- Migrera registret för att lagra Helm OCI-artefaktersenare i den här artikeln
Förutsättningar
Följande resurser behövs för scenariot i den här artikeln:
- Ett Azure-containerregister i din Azure-prenumeration. Om det behövs skapar du ett register med hjälp Azure Portal eller Azure CLI.
- Helm-klientversion 3.7.1 eller senare – Kör för
helm versionatt hitta din aktuella version. Mer information om hur du installerar och uppgraderar Helm finns i Installera Helm. Om du uppgraderar från en tidigare version av Helm 3 kan du läsa viktig information. - Ett Kubernetes-kluster där du installerar ett Helm-diagram. Om det behövs skapar du Azure Kubernetes Service kluster.
- Azure CLI version 2.0.71 eller senare – Kör
az --versionför att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
Aktivera OCI-stöd
Använd kommandot helm version för att kontrollera att du har installerat Helm 3:
helm version
Ange följande miljövariabel för att aktivera OCI-stöd i Helm 3-klienten. För närvarande är det här stödet experimentellt och kan komma att ändras.
export HELM_EXPERIMENTAL_OCI=1
Ange följande miljövariabler för målregistret. Namnet ACR_NAME är namnet på registerresursen. Om ACR-registrets URL myregistry.azurecr.io anger du ACR_NAME till myregistry
ACR_NAME=<container-registry-name>
Skapa ett exempeldiagram
Skapa ett testdiagram med följande kommandon:
mkdir helmtest
cd helmtest
helm create hello-world
Som ett grundläggande exempel ändrar du katalogen till templates mappen och tar först bort innehållet där:
cd hello-world/templates
rm -rf *
Skapa en templates fil med namnet i mappen genom att köra följande configmap.yaml kommando:
cat <<EOF > configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: hello-world-configmap
data:
myvalue: "Hello World"
EOF
Mer information om hur du skapar och kör det här exemplet finns Komma igång i Helm Docs.
Spara diagram till lokalt arkiv
Ändra katalogen till hello-world -underkatalogen. Kör sedan för helm package att spara diagrammet i ett lokalt arkiv.
I följande exempel sparas diagrammet med namnet och versionen i Chart.yaml .
cd ..
helm package .
Utdata liknar följande:
Successfully packaged chart and saved it to: /my/path/hello-world-0.1.0.tgz
Autentisera med registret
Kör helm registry login för att autentisera med registret. Du kan skicka registerautentiseringsuppgifter som är lämpliga för ditt scenario, till exempel autentiseringsuppgifter för tjänstens huvudnamn, användaridentitet eller en token som är begränsad till lagringsplatsen.
- Autentisera med en Azure Active Directory tjänstens huvudnamn med pull- och push-behörigheter (rollen AcrPush) till registret.
SERVICE_PRINCIPAL_NAME=<acr-helm-sp> ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv) PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME \ --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \ --role acrpull \ --query "password" --output tsv) USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv) - Autentisera med din enskilda Azure AD-identitet för att skicka och hämta Helm-diagram med hjälp av en AD-token.
USER_NAME="00000000-0000-0000-0000-000000000000" PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken) - Autentisera med en token som är begränsad till lagringsplatsen (förhandsversion).
USER_NAME="helm-token" PASSWORD=$(az acr token create -n $USER_NAME \ -r $ACR_NAME \ --scope-map _repositories_admin \ --only-show-errors \ --query "credentials.passwords[0].value" -o tsv) - Ange sedan autentiseringsuppgifterna till
helm registry login.helm registry login $ACR_NAME.azurecr.io \ --username $USER_NAME \ --password $PASSWORD
Push-diagram till registret som OCI-artefakt
Kör kommandot helm push i Helm 3 CLI för att skicka diagramarkivet till den fullständigt kvalificerade mållagringsplatsen. I följande exempel är måldatabasens namnområde helm/hello-world , och diagrammet är taggat 0.1.0 :
helm push hello-world-0.1.0.tgz oci://$ACR_NAME.azurecr.io/helm
Efter en lyckad push-push ser utdata ut ungefär så här:
Pushed: <registry>.azurecr.io/helm/hello-world:0.1.0
digest: sha256:5899db028dcf96aeaabdadfa5899db02589b2899b025899b059db02
Lista diagram på lagringsplatsen
Precis som med avbildningar som lagras i ett Azure-containerregister kan du använda az acr repository-kommandon för att visa lagringsplatserna som är värdar för dina diagram samt diagramtaggar och manifest.
Kör till exempel az acr repository show för att se egenskaperna för den lagringsplats som du skapade i föregående steg:
az acr repository show \
--name $ACR_NAME \
--repository helm/hello-world
Utdata liknar följande:
{
"changeableAttributes": {
"deleteEnabled": true,
"listEnabled": true,
"readEnabled": true,
"writeEnabled": true
},
"createdTime": "2021-10-05T12:11:37.6701689Z",
"imageName": "helm/hello-world",
"lastUpdateTime": "2021-10-05T12:11:37.7637082Z",
"manifestCount": 1,
"registry": "mycontainerregistry.azurecr.io",
"tagCount": 1
}
Kör kommandot az acr repository show-manifests för att se information om diagrammet som lagras på lagringsplatsen. Ett exempel:
az acr repository show-manifests \
--name $ACR_NAME \
--repository helm/hello-world --detail
Utdata, förkortade i det här exemplet, visar configMediaType ett av application/vnd.cncf.helm.config.v1+json :
[
{
[...]
"configMediaType": "application/vnd.cncf.helm.config.v1+json",
"createdTime": "2021-10-05T12:11:37.7167893Z",
"digest": "sha256:0c03b71c225c3ddff53660258ea16ca7412b53b1f6811bf769d8c85a1f0663ee",
"imageSize": 3301,
"lastUpdateTime": "2021-10-05T12:11:37.7167893Z",
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"tags": [
"0.1.0"
]
Installera Helm-diagram
Kör helm install för att installera Helm-diagrammet som du push-översade till registret. Diagramtaggen skickas med --version parametern . Ange ett versionnamn, till exempel myhelmtest, eller skicka --generate-name parametern . Ett exempel:
helm install myhelmtest oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0
Utdata efter en lyckad diagraminstallation liknar:
NAME: myhelmtest
LAST DEPLOYED: Tue Oct 4 16:59:51 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Verifiera installationen genom att köra helm get manifest kommandot .
helm get manifest myhelmtest
Kommandot returnerar YAML-data i configmap.yaml mallfilen.
Kör helm uninstall för att avinstallera diagramutgåren i klustret:
helm uninstall myhelmtest
Hämta diagram till lokalt arkiv
Du kan också hämta ett diagram från containerregistret till ett lokalt arkiv med hjälp av helm pull . Diagramtaggen skickas med --version parametern . Om det finns ett lokalt arkiv på den aktuella sökvägen skriver det här kommandot över det.
helm pull oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0
Ta bort diagram från registret
Om du vill ta bort ett diagram från containerregistret använder du kommandot az acr repository delete. Kör följande kommando och bekräfta åtgärden när du tillfrågas:
az acr repository delete --name $ACR_NAME --image helm/hello-world:0.1.0
Migrera registret för att lagra Helm OCI-artefakter
Om du tidigare konfigurerade Azure-containerregistret som en diagramlagringsplats med hjälp av Helm 2 och kommandona rekommenderar vi att du uppgraderar till az acr helm Helm 3-klienten. Följ sedan dessa steg för att lagra diagrammen som OCI-artefakter i registret.
Viktigt
- När du har slutfört migreringen från en diagramdatabas i Helm i 2-format (index.yaml-baserad) till OCI-artefaktdatabaser använder du Helm CLI och kommandon för att hantera
az acr repositorydiagrammen. Se föregående avsnitt i den här artikeln. - Det går inte att identifiera Helm OCI-artefaktdatabaser med hjälp av Helm-kommandon som
helm searchochhelm repo list. Mer information om Helm-kommandon som används för att lagra diagram som OCI-artefakter finns i Helm-dokumentationen.
Aktivera OCI-stöd
Kontrollera att du använder Helm 3-klienten:
helm version
Aktivera OCI-stöd i Helm 3-klienten. För närvarande är det här stödet experimentellt och kan komma att ändras.
export HELM_EXPERIMENTAL_OCI=1
Visa en lista över aktuella diagram
Lista diagrammen som för närvarande lagras i registret, här med namnet myregistry:
helm search repo myregistry
Utdata visar diagram- och diagramversionerna:
NAME CHART VERSION APP VERSION DESCRIPTION
myregistry/ingress-nginx 3.20.1 0.43.0 Ingress controller for Kubernetes...
myregistry/wordpress 9.0.3 5.3.2 Web publishing platform for building...
[...]
Arkiv för pull-diagram lokalt
För varje diagram på lagringsplatsen hämtar du diagramarkivet lokalt och noterar filnamnet:
helm pull myregisry/ingress-nginx
ls *.tgz
Ett lokalt diagramarkiv som ingress-nginx-3.20.1.tgz skapas.
Skicka diagram som OCI-artefakter till registret
Logga in på registret:
az acr login --name $ACR_NAME
Skicka varje diagramarkiv till registret. Exempel:
helm push ingress-nginx-3.20.1.tgz oci://$ACR_NAME.azurecr.io/helm
När du har push-push-lagt ett diagram bekräftar du att det lagras i registret:
az acr repository list --name $ACR_NAME
När du har push-push-styrt alla diagram kan du ta bort lagringsplatsen för Helm-diagram i 2-format från registret. Detta minskar lagringen i registret:
helm repo remove $ACR_NAME
Nästa steg
- Mer information om hur du skapar och distribuerar Helm-diagram finns i Utveckla Helm-diagram.
- Läs mer om hur du installerar program med Helm i Azure Kubernetes Service (AKS).
- Helm-diagram kan användas som en del av containerbyggprocessen. Mer information finns i Använda Azure Container Registry-uppgifter.