Condividi tramite


Requisiti dei pacchetti Helm

Helm è una gestione pacchetti per Kubernetes che consente di gestire le applicazioni Kubernetes. I pacchetti Helm sono denominati grafici e sono costituiti da alcuni file di configurazione YAML e alcuni modelli di cui viene eseguito il rendering nei file manifesto di Kubernetes. I grafici sono riutilizzabili da chiunque per qualsiasi ambiente, riducendo la complessità e i duplicati.

Requisiti per il percorso dell'URL del Registro di sistema e imagepullsecrets

Quando si sviluppa un pacchetto Helm, è comune mantenere l'URL del server del registro contenitori nei valori. Mantenere l'URL del server del registro contenitori nei valori è utile per lo spostamento di elementi tra ogni registro contenitori dell'ambiente. Azure Operator Service Manager (AOSM) usa il servizio Network Function Manager (NFM) per distribuire la funzione di rete in contenitori (CNF). Network Function Manager (NFM) contiene funzionalità per inserire il percorso del server del registro contenitori e imagepullsecrets nei valori helm durante la distribuzione della funzione di rete (NF). ImagePullSecret è un token di autorizzazione, noto anche come segreto, che archivia le credenziali Docker usate per accedere a un registro. Ad esempio, se è necessario distribuire un'applicazione tramite la distribuzione di Kubernetes, è possibile definire una distribuzione come nell'esempio seguente:

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 è un file che consente di impostare facilmente i requisiti di valore e i vincoli in un'unica posizione per i grafici Helm. In questo file definire registryPath e imagePullSecrets come proprietà obbligatorie.

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

Il payload della richiesta NFDVersion fornisce i valori seguenti in registryValuesPaths:

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

Durante una distribuzione NF, l'operatore NFO (Network Function Operator) imposta registryPath sul percorso del server di Registro Azure Container (ACR) corretto. Ad esempio, l'NFO esegue il comando equivalente seguente:

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

Nota

RegistryPath viene impostato senza prefisso, ad esempio https:// o oci://. Se nel pacchetto Helm è necessario un prefisso, gli editori devono definirlo nel pacchetto.

values.yaml è un file che contiene i valori predefiniti per un grafico Helm. Si tratta di un file YAML che definisce i valori predefiniti per un grafico. Nel file values.yaml devono essere presenti due tipi di variabili; imagePullSecrets e registryPath. Ognuno di essi è descritto nella tabella.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Nome Digita Descrizione
imagePullSecrets Stringa imagePullSecrets è una matrice di nomi segreti, usati per eseguire il pull delle immagini del contenitore
registryPath Stringa registryPath è il percorso del AzureContainerRegistry server

imagePullSecrets e registryPath devono essere forniti nel passaggio di onboarding create NFDVersion.

Un NFO in esecuzione nel cluster popola queste due variabili (imagePullSecrets e registryPath) durante una versione helm usando il comando helm install –set.

Per altre informazioni, vedere: pull-image-private-registry

Restrizioni di immutabilità

Le restrizioni di immutabilità impediscono modifiche a un file o a una directory. Ad esempio, non è possibile modificare o rinominare un file non modificabile e un file che consente operazioni di accodamento non può essere eliminato, modificato o rinominato.

Evitare l'uso di tag modificabili

Gli utenti devono evitare di usare tag modificabili, ad esempio latest, dev o stable. Ad esempio, se deployment.yaml usa 'latest' per . Values.image.tag la distribuzione avrà esito negativo.

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

Evitare riferimenti al Registro di sistema esterno

Gli utenti devono evitare di usare riferimenti a un registro esterno. Ad esempio, se deployment.yaml usa un percorso del Registro di sistema hardcoded o un registro di sistema esterno fa riferimento a un errore di convalida.

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

Consigli

La suddivisione della dichiarazione e dell'utilizzo delle definizioni di risorse personalizzate (CRD) e l'uso di convalide manuali sono procedure consigliate. Ognuno di essi è descritto nelle sezioni seguenti.

Split CRD declaration and usage

È consigliabile suddividere la dichiarazione e l'utilizzo dei CRL in grafici Helm separati per supportare gli aggiornamenti. Per informazioni dettagliate, vedere: method-2-separate-charts

Convalide manuali

Esaminare le immagini e le specifiche del contenitore create per assicurarsi che le immagini abbiano il prefisso registryURL e che imagePullSecrets siano popolati con secretName.

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

OPPURE

 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>

Repository di immagini statiche e tag

Ogni grafico Helm deve contenere tag e repository di immagini statiche. Gli utenti devono impostare il repository di immagini e il tag su valori statici. I valori statici possono essere impostati da:

  • Codificandoli come hardcoded nella riga dell'immagine o
  • Impostazione dei valori in values.yaml e non esposizione di questi valori nella versione NFDV (Network Function Design Version).

Una versione NFDV (Network Function Design Version) deve essere mappata a un set statico di grafici helm e immagini. I grafici e le immagini vengono aggiornati solo pubblicando una nuova versione NFDV (Network Function Design Version).

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

o

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