Wypychanie i ściąganie wykresów helm do rejestru kontenerów platformy Azure

Aby szybko zarządzać i wdrażać aplikacje dla platformy Kubernetes, możesz użyć menedżera pakietów Helm typu open source. Za pomocą programu Helm pakiety aplikacji są definiowane jako wykresy, które są zbierane i przechowywane w repozytorium pakietu Helm.

W tym artykule pokazano, jak hostować repozytoria pakietów Helm w rejestrze kontenerów platformy Azure przy użyciu poleceń programu Helm 3 i przechowywać wykresy jako artefakty OCI. W wielu scenariuszach utworzysz i przekażesz własne wykresy dla opracowywanych aplikacji. Aby uzyskać więcej informacji na temat tworzenia własnych wykresów helm, zobacz Przewodnik dewelopera szablonu wykresu. Możesz również przechowywać istniejący wykres helm z innego repozytorium Helm.

Ważne

Ten artykuł został zaktualizowany za pomocą poleceń programu Helm 3. Program Helm 3.7 zawiera zmiany poleceń interfejsu wiersza polecenia programu Helm i obsługę OCI wprowadzonych we wcześniejszych wersjach programu Helm 3. Zgodnie z projektem helm przechodzi do przodu z wersją. Zalecamy użycie wersji 3.7.2 lub nowszej.

Helm 3 lub Helm 2?

Aby przechowywać i instalować wykresy helm oraz zarządzać nimi, należy używać poleceń w interfejsie wiersza polecenia programu Helm. Główne wersje programu Helm obejmują narzędzia Helm 3 i Helm 2. Aby uzyskać szczegółowe informacje na temat różnic wersji, zobacz często zadawane pytania dotyczące wersji.

Program Helm 3 powinien służyć do hostowania pakietów Helm w usłudze Azure Container Registry. Za pomocą programu Helm 3:

  • Może przechowywać wykresy helm i zarządzać nimi w repozytoriach w rejestrze kontenerów platformy Azure
  • Przechowuj wykresy helm w rejestrze jako artefakty OCI. Usługa Azure Container Registry zapewnia obsługę artefaktów OCI, w tym wykresów helm.
  • Uwierzytelnij się w rejestrze helm registry login przy użyciu polecenia lub az acr login .
  • Używanie helm poleceń do wypychania, ściągania i zarządzania wykresami helm w rejestrze
  • Służy helm install do instalowania wykresów w klastrze Kubernetes z rejestru.

Obsługa funkcji

Usługa Azure Container Registry obsługuje określone funkcje zarządzania pakietem Helm w zależności od tego, czy używasz programu Helm 3 (bieżącego) czy Helm 2 (przestarzałe).

Funkcja Helm 2 Helm 3
Zarządzanie wykresami przy użyciu az acr helm poleceń ✔️
Przechowywanie wykresów jako artefaktów OCI ✔️
Zarządzanie wykresami przy użyciu az acr repository poleceń i bloku Repozytoria w witrynie Azure Portal ✔️

Uwaga

Począwszy od programu Helm 3, polecenia az acr helm do użycia z klientem Helm 2 są przestarzałe. Powiadomienie o co najmniej 3 miesiącach zostanie podane przed usunięciem polecenia.

Zgodność wersji wykresu

Następujące wersje pakietu Helm mogą być przechowywane w usłudze Azure Container Registry i można je zainstalować przez klientów helm 2 i Helm 3.

Wersja Helm 2 Helm 3
apiVersion v1 ✔️ ✔️
apiVersion, wersja 2 ✔️

Migrowanie z programu Helm 2 do programu Helm 3

Jeśli wcześniej były przechowywane i wdrażane wykresy przy użyciu programu Helm 2 i usługi Azure Container Registry, zalecamy migrację do programu Helm 3. Zobacz:

Wymagania wstępne

W tym artykule potrzebne są następujące zasoby:

Konfigurowanie klienta programu Helm

helm version Użyj polecenia , aby sprawdzić, czy zainstalowano program Helm 3:

helm version

Uwaga

Wskazana wersja musi być co najmniej 3.8.0, ponieważ obsługa OCI we wcześniejszych wersjach była eksperymentalna.

Ustaw następujące zmienne środowiskowe dla rejestru docelowego. ACR_NAME jest nazwą zasobu rejestru. Jeśli adres URL rejestru usługi ACR jest myregistry.azurecr.io, ustaw ACR_NAME na wartość myregistry

ACR_NAME=<container-registry-name>

Tworzenie przykładowego wykresu

Utwórz wykres testowy przy użyciu następujących poleceń:

mkdir helmtest

cd helmtest
helm create hello-world

W podstawowym przykładzie zmień katalog na templates folder i najpierw usuń zawartość:

cd hello-world/templates
rm -rf *

W folderze templates utwórz plik o nazwie configmap.yaml, uruchamiając następujące polecenie:

cat <<EOF > configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: hello-world-configmap
data:
  myvalue: "Hello World"
EOF

Aby uzyskać więcej informacji na temat tworzenia i uruchamiania tego przykładu, zobacz Wprowadzenie w witrynie Helm Docs.

Zapisywanie wykresu w archiwum lokalnym

Zmień katalog na hello-world podkatalog. Następnie uruchom polecenie helm package , aby zapisać wykres w lokalnym archiwum.

W poniższym przykładzie wykres jest zapisywany przy użyciu nazwy i wersji w pliku Chart.yaml.

cd ..
helm package .

Dane wyjściowe są podobne do następujących:

Successfully packaged chart and saved it to: /my/path/hello-world-0.1.0.tgz

Uwierzytelnianie przy użyciu rejestru

Uruchom polecenie helm registry login , aby uwierzytelnić się w rejestrze. Możesz przekazać poświadczenia rejestru odpowiednie dla danego scenariusza, takie jak poświadczenia jednostki usługi, tożsamość użytkownika lub token o zakresie repozytorium.

  • Uwierzytelnianie za pomocą jednostki usługi Microsoft Entra przy użyciu uprawnień ściągnięcia i wypychania (rola AcrPush) do rejestru.
    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 acrpush \
              --query "password" --output tsv)
    USER_NAME=$(az identity show -n $SERVICE_PRINCIPAL_NAME -g $RESOURCE_GROUP_NAME --subscription $SUBSCRIPTION_ID --query "clientId" -o tsv)
    
  • Uwierzytelnij się przy użyciu indywidualnej tożsamości firmy Microsoft Entra, aby wypychać i ściągać wykresy helm przy użyciu tokenu usługi AD.
    USER_NAME="00000000-0000-0000-0000-000000000000"
    PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)
    
  • Uwierzytelnianie przy użyciu tokenu o zakresie repozytorium (wersja zapoznawcza).
    USER_NAME="helmtoken"
    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)
    
  • Następnie podaj poświadczenia do helm registry login.
    helm registry login $ACR_NAME.azurecr.io \
      --username $USER_NAME \
      --password $PASSWORD
    

Wypychanie wykresu do rejestru jako artefaktu OCI

helm push Uruchom polecenie w interfejsie wiersza polecenia programu Helm 3, aby wypchnąć archiwum wykresów do w pełni kwalifikowanego repozytorium docelowego. Oddziel wyrazy w nazwach wykresów i używaj tylko małych liter i cyfr. W poniższym przykładzie przestrzeń nazw repozytorium docelowego to helm/hello-world, a wykres jest oznaczony tagiem 0.1.0:

helm push hello-world-0.1.0.tgz oci://$ACR_NAME.azurecr.io/helm

Po pomyślnym wypchnięciu dane wyjściowe są podobne do następujących:

Pushed: <registry>.azurecr.io/helm/hello-world:0.1.0
digest: sha256:5899db028dcf96aeaabdadfa5899db02589b2899b025899b059db02

Wyświetlanie listy wykresów w repozytorium

Podobnie jak w przypadku obrazów przechowywanych w rejestrze kontenerów platformy Azure, możesz użyć poleceń az acr repository , aby wyświetlić repozytoria hostowane wykresy oraz tagi wykresu i manifesty.

Na przykład uruchom polecenie az acr repository show , aby wyświetlić właściwości repozytorium utworzonego w poprzednim kroku:

az acr repository show \
  --name $ACR_NAME \
  --repository helm/hello-world

Dane wyjściowe są podobne do następujących:

{
  "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
}

Uruchom polecenie az acr manifest list-metadata, aby wyświetlić szczegóły wykresu przechowywanego w repozytorium. Przykład:

az acr manifest list-metadata \
  --registry $ACR_NAME \
  --name helm/hello-world

Dane wyjściowe, skrócone w tym przykładzie, przedstawiają wartość typu configMediaTypeapplication/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"
    ]

Instalowanie pakietu Helm chart

Uruchom polecenie helm install , aby zainstalować pakiet Helm wypchnięty do rejestru. Tag wykresu jest przekazywany przy użyciu parametru --version . Określ nazwę wydania, taką jak myhelmtest, lub przekaż --generate-name parametr . Przykład:

helm install myhelmtest oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0

Dane wyjściowe po pomyślnym zainstalowaniu wykresu są podobne do następujących:

NAME: myhelmtest
LAST DEPLOYED: Tue Oct  4 16:59:51 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

Aby zweryfikować instalację helm get manifest , uruchom polecenie .

helm get manifest myhelmtest

Polecenie zwraca dane YAML w configmap.yaml pliku szablonu.

Uruchom polecenie helm uninstall , aby odinstalować wydanie wykresu w klastrze:

helm uninstall myhelmtest

Ściąganie wykresu do archiwum lokalnego

Opcjonalnie możesz ściągnąć wykres z rejestru kontenerów do lokalnego archiwum przy użyciu polecenia helm pull. Tag wykresu jest przekazywany przy użyciu parametru --version . Jeśli lokalne archiwum istnieje w bieżącej ścieżce, to polecenie zastępuje je.

helm pull oci://$ACR_NAME.azurecr.io/helm/hello-world --version 0.1.0

Usuwanie wykresu z rejestru

Aby usunąć wykres z rejestru kontenerów, użyj polecenia az acr repository delete . Uruchom następujące polecenie i potwierdź operację po wyświetleniu monitu:

az acr repository delete --name $ACR_NAME --image helm/hello-world:0.1.0

Migrowanie rejestru do przechowywania artefaktów OCI programu Helm

Jeśli wcześniej skonfigurowaliśmy rejestr kontenerów platformy Azure jako repozytorium wykresów przy użyciu programu Helm 2 i az acr helm poleceń, zalecamy uaktualnienie do klienta programu Helm 3. Następnie wykonaj następujące kroki, aby przechowywać wykresy jako artefakty OCI w rejestrze.

Ważne

  • Po zakończeniu migracji z repozytorium wykresów programu Helm w stylu 2 (index.yaml) do repozytoriów artefaktów OCI użyj interfejsu wiersza polecenia programu Helm i az acr repository poleceń do zarządzania wykresami. Zobacz poprzednie sekcje w tym artykule.
  • Repozytoria artefaktów OCI programu Helm nie są wykrywalne przy użyciu poleceń programu Helm, takich jak helm search i helm repo list. Aby uzyskać więcej informacji na temat poleceń programu Helm używanych do przechowywania wykresów jako artefaktów OCI, zobacz dokumentację programu Helm.

Włączanie obsługi OCI (domyślnie włączone w programie Helm w wersji 3.8.0)

Upewnij się, że używasz klienta helm 3:

helm version

Jeśli używasz programu Helm w wersji 3.8.0 lub nowszej, jest to domyślnie włączone. Jeśli używasz niższej wersji, możesz włączyć obsługę OCI ustawiając zmienną środowiskową:

export HELM_EXPERIMENTAL_OCI=1

Wyświetlanie listy bieżących wykresów

Wyświetl listę wykresów aktualnie przechowywanych w rejestrze o nazwie myregistry:

helm search repo myregistry

Dane wyjściowe przedstawiają wykresy i wersje wykresów:

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...
[...]

Archiwum ściągania wykresów lokalnie

Dla każdego wykresu w repozytorium pobierz archiwum wykresu lokalnie i zanotuj nazwę pliku:

helm pull myregisry/ingress-nginx
ls *.tgz

Zostanie utworzone archiwum wykresu lokalnego, na przykład ingress-nginx-3.20.1.tgz .

Wypychanie wykresów jako artefaktów OCI do rejestru

Zaloguj się do rejestru:

az acr login --name $ACR_NAME

Wypchnij każde archiwum wykresu do rejestru. Przykład:

helm push ingress-nginx-3.20.1.tgz oci://$ACR_NAME.azurecr.io/helm

Po wypchnięciu wykresu upewnij się, że jest on przechowywany w rejestrze:

az acr repository list --name $ACR_NAME

Po wypchnięciu wszystkich wykresów opcjonalnie usuń repozytorium wykresów helm 2 z rejestru. Zmniejsza to ilość miejsca w rejestrze:

helm repo remove $ACR_NAME

Następne kroki