Tworzenie i instalowanie pakietu Helm

Ukończone

Wykresy helm ułatwiają wdrażanie aplikacji w dowolnym klastrze Kubernetes. Użyj programu Helm, aby utworzyć szablon zawierający informacje o wdrożeniu aplikacji w postaci pakietu Helm, którego następnie użyjesz podczas wdrażania aplikacji.

Załóżmy, że twój zespół programistyczny wdrożył już witrynę internetową sklepu dla zwierząt domowych w klastrze usługi AKS. Zespół tworzy trzy pliki, aby wdrożyć witrynę internetową:

  • Manifest wdrożenia, który opisuje sposób instalowania i uruchamiania aplikacji w klastrze,
  • Manifest usługi, który opisuje, jak uwidocznić witrynę internetową w klastrze i
  • Manifest ruchu przychodzącego opisujący sposób kierowania ruchu spoza klastra do aplikacji internetowej.

Zespół wdraża te pliki w każdym z trzech środowisk w ramach cyklu życia tworzenia oprogramowania. Każdy z tych trzech plików jest aktualizowany przy użyciu zmiennych i wartości charakterystycznych dla danego środowiska. W związku z tym, że każdy plik jest zadokowany na stałe, ich obsługa jest podatna na błędy.

W jaki sposób program Helm przetwarza pakiet?

Klient Helm implementuje aparat szablonów oparty na języku Go, który analizuje wszystkie dostępne pliki w folderach pakietu. Aparat szablonów tworzy pliki manifestu Kubernetes przez połączenie szablonów w folderze templates/ pakietu z wartościami z plików Chart.yaml i values.yaml.

A diagram shows a process parsing a Helm template file and values file to create and deploy an application to a Kubernetes cluster using manifest files.

Po udostępnieniu plików manifestu klient może zainstalować, uaktualnić i usunąć aplikację zdefiniowaną w wygenerowanych plikach manifestu.

Jak zdefiniować plik Chart.yaml

Chart.yaml jest jednym z wymaganych plików w definicji pakietu Helm, który zawiera informacje na temat pakietu. Zawartość pliku składa się z trzech wymaganych pól i różnych pól opcjonalnych.

Trzy wymagane pola obejmują:

  • apiVersion: wersja interfejsu API wykresu do użycia. Dla wykresów korzystających z programu Helm 3 należy ustawić v2 wersję na wartość .
  • name: nazwa wykresu.
  • version: numer wersji wykresu, który używa semantycznej wersji 2.0.0 i jest zgodny z MAJOR.MINOR.PATCH notacją numerów wersji.

W poniższym przykładzie pokazano zawartość podstawowego Chart.yaml pliku:

apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore, cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0

Zwróć uwagę na użycie type pola w przykładowym pliku. Pakiety można utworzyć w celu zainstalowania aplikacji lub bibliotek. Domyślny typ pakietu to application, który można zmienić na library, jeśli chcesz zaznaczyć, że pakiet zainstaluje bibliotekę.

Dostępnych jest wiele opcjonalnych pól, aby dostosować proces wdrażania wykresu. Na przykład możesz użyć dependencies pola, aby określić dodatkowe wymagania dotyczące wykresu, takie jak aplikacja internetowa, która zależy od bazy danych.

Uwaga

Szczegółowe pokrycie wszystkich pól opcjonalnych wykracza poza zakres tego modułu. Jednak link do dokumentacji programu Helm jest dostępny w sekcji podsumowania modułu.

Jak zdefiniować szablon elementu chart

Szablon wykresu programu Helm to plik opisujący różne pliki manifestu typu wdrożenia. Szablony wykresów są napisane w języku szablonu języka Go i zapewniają funkcje szablonu w celu zautomatyzowania tworzenia plików manifestu obiektów Kubernetes.

Pliki szablonów są przechowywane w templates/ folderze wykresu. Aparat szablonu przetwarza te pliki w celu utworzenia końcowego manifestu obiektu.

Załóżmy na przykład, że zespół deweloperów używa następującego pliku manifestu wdrożenia w celu wdrożenia składnika frontonu magazynu zwierząt domowych w rozwiązaniu:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: store-front
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: store-front
  template:
    metadata:
      labels:
        app: store-front
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
      - name: store-front
        image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
        ports:
        - containerPort: 8080
          name: store-front
        env: 
        - name: VUE_APP_ORDER_SERVICE_URL
          value: "http://order-service:3000/"
        - name: VUE_APP_PRODUCT_SERVICE_URL
          value: "http://product-service:3002/"
        resources:
          requests:
            cpu: 1m
            memory: 200Mi
          limits:
            cpu: 1000m
            memory: 512Mi
        startupProbe:
          httpGet:
            path: /health
            port: 8080
          failureThreshold: 3
          initialDelaySeconds: 5
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /health
            port: 8080
          failureThreshold: 3
          initialDelaySeconds: 3
          periodSeconds: 3
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          failureThreshold: 5
          initialDelaySeconds: 3
          periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
  name: store-front
spec:
  type: {{ .Values.storeFront.serviceType }}
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: store-front

Zwróć uwagę, że lokalizacja obrazu kontenera jest zakodowana na {{.Values.<property>}} stałe przy użyciu składni. Składnia umożliwia tworzenie symboli zastępczych dla każdej wartości niestandardowej.

Proces ręcznego tworzenia elementów chart programu Helm jest żmudny. Prostą metodą utworzenia elementu chart programu Helm jest użycie polecenia helm create w celu utworzenia nowego elementu chart programu Helm. Następnie dostosuj automatycznie generowane pliki w celu dopasowania do wymagań aplikacji.

Jak zdefiniować plik values.yaml

Za pomocą wartości elementu chart można dostosować konfigurację elementu chart programu Helm. Wartości elementu chart mogą być wstępnie zdefiniowane lub dostarczone przez użytkownika w czasie wdrażania elementu chart.

Wstępnie zdefiniowana wartość jest wartością wrażliwą na wielkość liter, która jest wstępnie zdefiniowana w kontekście wykresu helm i nie może zostać zmieniona przez użytkownika. Na przykład możesz użyć elementu Release.Name, aby odwołać się do nazwy wydania, lub elementu Release.IsInstall, aby sprawdzić, czy bieżąca operacja jest instalacją.

Możesz również użyć wstępnie zdefiniowanych wartości, aby wyodrębnić dane z zawartości obiektu Chart.yaml. Jeśli na przykład chcesz sprawdzić wersję elementu chart, odwołujesz się do Chart.Version. Należy pamiętać, że można odwoływać się tylko do dobrze znanych pól. Możesz traktować wstępnie zdefiniowane wartości jako stałe do użycia w tworzonych szablonach.

Składnia do uwzględnienia nazw wartości w pliku szablonu obejmuje ujęcie nazwy wartości w podwójnych nawiasach klamrowych, na przykład {{.Release.Name}}. Zwróć uwagę na użycie kropki przed nazwą wartości. W przypadku użycia kropki w ten sposób działa ona jako operator wyszukiwania i wskazuje bieżący zakres zmiennej.

Na przykład poniższy fragment kodu YAML zawiera słownik zdefiniowany w pliku wartości:

object:
  key: value

Aby uzyskać dostęp do wartości w szablonie, można użyć następującej składni:

{{ .Values.object.key }}

Podana wartość umożliwia przetworzenie dowolnych wartości w szablonie elementu chart. Plik values.yaml definiuje te wartości.

W tym przykładzie zespół programistyczny zezwala na następujące konfigurowalne wartości:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: store-front
spec:
  replicas: {{ .Values.replicaCount }}
  ...
      containers:
      - name: store-front
        image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
        ports:
  ...
---
apiVersion: v1
kind: Service
metadata:
  name: store-front
spec:
  type: {{ .Values.storeFront.serviceType }}
  ...

Oto przykład pliku values.yaml :

...
replicaCount: 1
...
storeFront:
  image:
    repository: "ghcr.io/azure-samples/aks-store-demo/store-front"
    tag: "latest"
  serviceType: LoadBalancer
...

Po zastosowaniu przez aparat szablonów wartości końcowy wynik będzie wyglądać podobnie do tego przykładu:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: store-front
spec:
  replicas: 1
  ...
      containers:
      - name: store-front
        image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
        ports:
---
apiVersion: v1
kind: Service
metadata:
  name: store-front
spec:
  type: LoadBalancer
  ...

Jak używać repozytorium programu Helm

Repozytorium Helm to dedykowany serwer HTTP, który przechowuje informacje w pakietach Helm. Można skonfigurować repozytoria programu Helm przy użyciu klienta programu Helm, aby instalować elementy chart z repozytorium za pomocą polecenia helm repo add.

Możesz na przykład dodać repozytorium Helm witryny Azure Marketplace do lokalnego klienta helm, uruchamiając następujące polecenie:

helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo

Informacje o elementach chart dostępnych w repozytorium są przechowywane w pamięci podręcznej na hoście klienta. Aby pobrać najnowsze informacje repozytorium, należy okresowo aktualizować pamięć podręczną helm repo update przy użyciu polecenia .

Polecenie helm search repo umożliwia wyszukiwanie wykresów we wszystkich lokalnie dodanych repozytoriach programu Helm. Możesz uruchomić polecenie helm search repo, aby zwrócić listę wszystkich znanych elementów chart programu Helm dla każdego dodanego repozytorium. Wynik zawiera listę nazw, wersji i wersji aplikacji wykresu wdrożonych na wykresie, jak pokazano w następujących przykładowych danych wyjściowych:

NAME                               CHART VERSION   APP VERSION   DESCRIPTION
azure-marketplace/airflow          11.0.8          2.1.4         Apache Airflow is a platform to programmaticall...
azure-marketplace/apache           8.8.3           2.4.50        Chart for Apache HTTP Server
azure-marketplace/aspnet-core      1.3.18          3.1.19        ASP.NET Core is an open-source framework create...
azure-marketplace/bitnami-common   0.0.7           0.0.7         Chart with custom tempaltes used in Bitnami cha...
azure-marketplace/cassandra        8.0.5           4.0.1         Apache Cassandra is a free and open-source dist...

Można wyszukać określony element chart, dodając termin wyszukiwania do polecenia helm search repo. Jeśli na przykład szukasz wykresu opartego na ASP.NET, możesz użyć następującego polecenia:

helm search repo aspnet

W tym przykładzie klient lokalny ma zarejestrowane dwa repozytoria i zwraca wynik z każdego, jak pokazano w poniższych przykładowych danych wyjściowych:

NAME                            CHART VERSION   APP VERSION   DESCRIPTION                                       
azure-marketplace/aspnet-core   1.3.18          3.1.19        ASP.NET Core is an open-source framework create...
bitnami/aspnet-core             1.3.18          3.1.19        ASP.NET Core is an open-source framework create...

Testowanie elementu chart programu Helm

Program Helm zapewnia opcję generowania plików manifestu tworzonych przez aparat szablonów z elementu chart. Ta funkcja umożliwia przetestowanie wykresu przed wydaniem przez połączenie dwóch dodatkowych parametrów: --dry-run i debug. Parametr --dry-run gwarantuje, że instalacja jest symulowana, a --debug parametr włącza pełne dane wyjściowe.

helm install --debug --dry-run my-release ./chart-name

Polecenie wyświetla listę informacji o używanych wartościach i wszystkich wygenerowanych plikach. Może być konieczne przewinięcie, aby wyświetlić wszystkie wygenerowane dane wyjściowe.

Instalowanie elementu chart programu Helm

Do zainstalowania elementu chart służy polecenie helm install. Pakiet Helm można zainstalować z dowolnej z następujących lokalizacji:

  • Foldery wykresów
  • Spakowane .tgz wykresy archiwum tar
  • Repozytoria programu Helm

Jednak wymagane parametry różnią się w zależności od lokalizacji elementu chart. We wszystkich przypadkach polecenie wymaga nazwy wykresu, install który chcesz zainstalować, oraz nazwy wydania tworzonej przez instalację.

Możesz zainstalować wykres lokalny przy użyciu rozpakowanego folderu wykresu plików lub spakowanego .tgz archiwum tar. Aby zainstalować wykres, helm polecenie odwołuje się do lokalnego systemu plików dla lokalizacji wykresu. Oto przykład polecenia instalacji, które wdroży wydanie rozpakowanego wykresu:

helm install my-release ./chart-name

W poprzednim przykładzie my-release parametr jest nazwą wydania, a ./chart-name parametr jest nazwą rozpakowanego pakietu wykresu.

Spakowany element chart jest instalowany przez odwołanie do nazwy spakowanego pliku elementu chart. W poniższym przykładzie przedstawiono składnię dla tej samej aplikacji spakowanej jako archiwum tar:

helm install my-release ./chart-name.tgz

Podczas instalowania elementu chart z repozytorium programu Helm należy użyć odwołania do elementu chart jako nazwy elementu chart. Odwołanie do wykresu zawiera dwa parametry, nazwę repozytorium i nazwę wykresu, jak pokazano w poniższym przykładzie:

helm install my-release repository-name/chart-name

W przykładzie repository-name/chart-name parametr zawiera odwołanie do repozytorium , repository-nameoraz nazwę wykresu . chart-name