Krav för Helm-paket

Helm är en pakethanterare för Kubernetes som hjälper dig att hantera Kubernetes-program. Helm-paket kallas diagram och består av några YAML-konfigurationsfiler och några mallar som återges i Kubernetes-manifestfiler. Diagram kan återanvändas av vem som helst för alla miljöer, vilket minskar komplexiteten och dubbletter.

Register-URL-sökväg och krav för imagepullsecrets

När du utvecklar ett helm-paket är det vanligt att behålla url:en för containerregisterservern i värdena. Att behålla url:en för containerregisterservern i värdena är användbart för att flytta artefakter mellan varje miljöcontainerregister. Azure Operator Service Manager (AOSM) använder NFM-tjänsten (Network Function Manager) för att distribuera Containerized Network Function (CNF). NFM (Network Function Manager) innehåller funktioner för att mata in containerregisterserverns plats och avbildningar i helm-värdena under NF-distributionen (Network Function). En imagePullSecret är en auktoriseringstoken, även kallad hemlighet, som lagrar Docker-autentiseringsuppgifter som används för att komma åt ett register. Om du till exempel behöver distribuera ett program via Kubernetes-distribution kan du definiera en distribution som i följande exempel:

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 är en fil som gör att du enkelt kan ange värdekrav och begränsningar på en enda plats för Helm-diagram. I den här filen definierar du registryPath och imagePullSecrets som nödvändiga egenskaper.

{ 
  "$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" ], 
      } 
   } 
} 

Nyttolasten för NFDVersion-begäran innehåller följande värden i registryValuesPaths:

"registryValuesPaths": [ "global.registryPath" ], 
"imagePullSecretsValuesPaths": [ "global.imagePullSecrets" ], 

Under en NF-distribution ställer NFO (Network Function Operator) in registryPath till rätt Azure Container Registry-serverplats (ACR). NFO kör till exempel följande motsvarande kommando:

$ helm install --set "global.registryPath=<registryURL>" --set "global.imagePullSecrets[0].name=<secretName>" releasename ./releasepackage 

Kommentar

RegistryPath har angetts utan prefix, till exempel https:// eller oci://. Om ett prefix krävs i helm-paketet måste utgivare definiera detta i paketet.

values.yaml är en fil som innehåller standardvärdena för ett Helm-diagram. Det är en YAML-fil som definierar standardvärdena för ett diagram. I filen values.yaml måste två typer av variabler finnas. imagePullSecrets och registryPath. Var och en beskrivs i tabellen.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Name Type Description
imagePullSecrets String imagePullSecrets är en matris med hemliga namn som används för att hämta containeravbildningar
registryPath String registryPath är AzureContainerRegistry serverplatsen

imagePullSecrets och registryPath måste anges i registreringssteget skapa NFDVersion.

En NFO som körs i klustret fyller i dessa två variabler (imagePullSecrets och registryPath) under en helm-version med hjälp av kommandot helm install –set.

Mer information finns i: pull-image-private-registry

Oföränderlighetsbegränsningar

Oföränderlighetsbegränsningar förhindrar ändringar i en fil eller katalog. En oföränderlig fil kan till exempel inte ändras eller byta namn, och en fil som tillåter tilläggsåtgärder kan inte tas bort, ändras eller byta namn.

Undvik att använda föränderliga taggar

Användare bör undvika att använda föränderliga taggar, till exempel senaste, utvecklingsbara eller stabila. Om deployment.yaml till exempel använde "senaste" för . Values.image.tag distributionen skulle misslyckas.

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“

Undvik referenser till det externa registret

Användarna bör undvika att använda referenser till ett externt register. Om deployment.yaml till exempel använder en hårdkodad registersökväg eller externa registerreferenser misslyckas verifieringen.

 image: http://myURL/{{ .Values.image.repository }}:{{ .Values.image.tag}}

Rekommendationer

Att dela upp deklarationen för anpassade resursdefinitioner (CRD)-deklarationen och användningen plus att använda manuella valideringar är rekommenderade metoder. Var och en beskrivs i följande avsnitt.

Dela CRD-deklaration och användning

Vi rekommenderar att du delar upp deklarationen och användningen av CRD:er i separata helm-diagram för att stödja uppdateringar. Detaljerad information finns i: method-2-separate-charts

Manuella valideringar

Granska de avbildningar och containerspecifikationer som skapats för att säkerställa att avbildningarna har prefixet registryURL och att imagePullSecrets fylls med secretName.

 helm template --set "global.imagePullSecrets[0].name=<secretName>" --set "global.registry.url=<registryURL>" <release-name> <chart-name> --dry-run

ELLER

 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>

Lagringsplats och taggar för statisk avbildning

Varje helm-diagram ska innehålla lagringsplats och taggar för statiska avbildningar. Användare bör ange avbildningslagringsplatsen och taggen till statiska värden. Statiska värden kan anges genom att:

  • Genom att hårdkoda dem på bildlinjen eller,
  • Ange värden i values.yaml och exponera inte dessa värden i NFDV (Network Function Design Version).

En NFDV (Network Function Design Version) ska mappas till en statisk uppsättning helm-diagram och bilder. Diagrammen och bilderna uppdateras bara genom att publicera en ny NFDV (Network Function Design Version).

 image: "{{ .Values.global.registryPath }}/contosoapp:1.14.2“

eller

 image: "{{ .Values.global.registryPath }}/{{ .Values.image.repository }}:{{ .Values.image.tag}}“
 
YAML values.yaml
image:
  repository: contosoapp
  tag: 1.14.2