Wymagania dotyczące pakietu Helm
Helm to menedżer pakietów dla platformy Kubernetes, który ułatwia zarządzanie aplikacjami Kubernetes. Pakiety helm są nazywane wykresami i składają się z kilku plików konfiguracji YAML i niektórych szablonów renderowanych w plikach manifestu kubernetes. Wykresy są wielokrotnego użytku przez wszystkich użytkowników w dowolnym środowisku, co zmniejsza złożoność i duplikaty.
Wymagania dotyczące ścieżki adresu URL rejestru i imagepullsecrets
Podczas tworzenia pakietu helm często należy zachować adres URL serwera rejestru kontenerów w wartościach. Przechowywanie adresu URL serwera rejestru kontenerów w wartościach jest przydatne w przypadku przenoszenia artefaktów między poszczególnymi rejestrami kontenerów środowiska. Program Azure Operator Service Manager (AOSM) używa usługi Network Function Manager (NFM) do wdrażania konteneryzowanej funkcji sieciowej (CNF). Menedżer funkcji sieciowej (NFM) zawiera funkcje do wstrzykiwania lokalizacji serwera rejestru kontenerów i imagepullsecrets do wartości helm podczas wdrażania funkcji sieciowej (NF). ImagePullSecret to token autoryzacji, znany również jako wpis tajny, który przechowuje poświadczenia platformy Docker używane do uzyskiwania dostępu do rejestru. Jeśli na przykład musisz wdrożyć aplikację za pośrednictwem wdrożenia platformy Kubernetes, możesz zdefiniować wdrożenie podobne do następującego przykładu:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
{{- if .Values.global.imagePullSecrets }}
imagePullSecrets: {{ toYaml .Values.global.imagePullSecrets | nindent 8 }}
{{- end }}
containers:
- name: contosoapp
image:{{ .Values.global.registryPath }}/contosoapp:1.14.2
ports:
- containerPort: 80
values.schema.json
to plik, który umożliwia łatwe ustawianie wymagań i ograniczeń dotyczących wartości w jednej lokalizacji dla wykresów programu Helm. W tym pliku zdefiniuj wartości registryPath i imagePullSecrets jako wymagane właściwości.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "StarterSchema",
"type": "object",
"required": ["global"],
"properties": {
"global" : {
"type": "object",
"properties": {
“registryPath”: {“type”: “string”},
“imagePullSecrets”: {“type”: “string”},
}
"required": [ "registryPath", "imagePullSecrets" ],
}
}
}
Ładunek żądania NFDVersion zawiera następujące wartości w registryValuesPaths:
"registryValuesPaths": [ "global.registryPath" ],
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ],
Podczas wdrażania systemu plików NF operator funkcji sieciowej (NFO) ustawia ścieżkę rejestru na poprawną lokalizację serwera usługi Azure Container Registry (ACR). Na przykład NFO uruchamia następujące równoważne polecenie:
$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage
Uwaga
Ścieżka rejestru jest ustawiana bez żadnego prefiksu, takiego jak https:// lub oci://. Jeśli w pakiecie helm wymagany jest prefiks, wydawcy muszą zdefiniować go w pakiecie.
values.yaml
jest plikiem zawierającym wartości domyślne dla wykresu programu Helm. Jest to plik YAML, który definiuje wartości domyślne wykresu. W pliku values.yaml muszą znajdować się dwa typy zmiennych; imagePullSecrets i registryPath. Każda z nich jest opisana w tabeli.
global:
imagePullSecrets: []
registryPath: “”
Imię i nazwisko/nazwa | Pisz | Opis |
---|---|---|
imagePullSecrets | Ciąg | imagePullSecrets to tablica nazw wpisów tajnych, które są używane do ściągania obrazów kontenerów |
registryPath | Ciąg | registryPath to AzureContainerRegistry lokalizacja serwera |
imagePullSecrets i registryPath należy podać w kroku tworzenia dołączania NFDVersion.
NFO uruchomiona w klastrze wypełnia te dwie zmienne (imagePullSecrets i registryPath) podczas wydania helm przy użyciu polecenia helm install –set.
Aby uzyskać więcej informacji, zobacz: pull-image-private-registry
Ograniczenia niezmienności
Ograniczenia niezmienności uniemożliwiają zmianę pliku lub katalogu. Na przykład nie można zmienić ani zmienić nazwy pliku niezmiennego, a plik, który umożliwia operacje dołączania, nie można usunąć, zmodyfikować ani zmienić nazwy.
Unikaj używania tagów modyfikowalnych
Użytkownicy powinni unikać używania tagów modyfikowalnych, takich jak najnowsze, deweloperskie lub stabilne. Jeśli na przykład plik deployment.yaml używa polecenia "latest" dla elementu . Values.image.tag wdrożenie zakończy się niepowodzeniem.
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
Unikaj odwołań do rejestru zewnętrznego
Użytkownicy powinni unikać używania odwołań do rejestru zewnętrznego. Jeśli na przykład plik deployment.yaml używa zakodowanej na stałe ścieżki rejestru lub odwołuje się do rejestru zewnętrznego, walidacja zakończy się niepowodzeniem.
image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}
Zalecenia
Zalecane jest podzielenie deklaracji niestandardowych definicji zasobów (CRD) i użycia oraz użycie przy użyciu walidacji ręcznej. Każda z nich jest opisana w poniższych sekcjach.
Dzielenie deklaracji CRD i użycia
Zalecamy podzielenie deklaracji i użycia identyfikatorów CRD na oddzielne wykresy helm w celu obsługi aktualizacji. Aby uzyskać szczegółowe informacje, zobacz: method-2-separate-charts
Ręczne walidacje
Przejrzyj utworzone obrazy i specyfikacje kontenera, aby upewnić się, że obrazy mają prefiks registryURL, a obrazyPullSecrets są wypełniane ciągiem secretName.
helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
LUB
helm install --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run
kubectl create secret <secretName> regcred --docker-server=<registryURL> --dockerusername=<regusername> --docker-password=<regpassword>
Repozytorium i tagi obrazów statycznych
Każdy wykres helm powinien zawierać statyczne repozytorium obrazów i tagi. Użytkownicy powinni ustawić repozytorium obrazów i oznaczyć je jako wartości statyczne. Wartości statyczne mogą być ustawiane przez:
- Kodując je na stałe w wierszu obrazu lub
- Ustawienie wartości w pliku values.yaml i nie uwidacznianie tych wartości w wersji projektowania funkcji sieciowej (NFDV).
Wersja projektu funkcji sieciowej (NFDV) powinna być mapowana na statyczny zestaw wykresów i obrazów programu Helm. Wykresy i obrazy są aktualizowane tylko przez opublikowanie nowej wersji projektu funkcji sieciowej (NFDV).
image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“
lub
image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
YAML values.yaml
image:
repository: contosoapp
tag: 1.14.2