Tworzenie i instalowanie pakietu Helm
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
.
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 zMAJOR.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-name
oraz nazwę wykresu . chart-name