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