Partager via


Configuration requise pour le package Helm

Helm est un gestionnaire de package pour Kubernetes qui vous aide à gérer les applications Kubernetes. Les packages Helm sont appelés graphiques et se composent de quelques fichiers de configuration YAML et de certains modèles rendus dans des fichiers manifeste Kubernetes. Les graphiques sont réutilisables par toute personne pour n’importe quel environnement, ce qui réduit la complexité et les doublons.

Conditions requises pour le chemin d’URL du Registre et imagepullsecrets

Lors du développement d’un package Helm, il est courant de conserver l’URL du serveur de registre de conteneurs dans les valeurs. La conservation de l’URL du serveur de registre de conteneurs dans les valeurs est utile pour déplacer des artefacts entre chaque registre de conteneurs d’environnement. Azure Operator Service Manager (AOSM) utilise le service Network Function Manager (NFM) pour déployer la fonction réseau conteneurisée (CNF). Le Gestionnaire de fonctions réseau (NFM) contient des fonctionnalités permettant d’injecter l’emplacement du serveur de registre de conteneurs et d’imagepullsecrets dans les valeurs helm pendant le déploiement de la fonction réseau (NF). ImagePullSecret est un jeton d’autorisation, également appelé secret, qui stocke les informations d’identification Docker utilisées pour accéder à un registre. Par exemple, si vous devez déployer une application via un déploiement Kubernetes, vous pouvez définir un déploiement comme dans l’exemple suivant :

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 est un fichier qui vous permet de définir facilement les exigences de valeur et les contraintes dans un emplacement unique pour les graphiques Helm. Dans ce fichier, définissez registryPath et imagePullSecrets en tant que propriétés requises.

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

La charge utile de la requête NFDVersion fournit les valeurs suivantes dans registryValuesPaths :

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

Pendant un déploiement NF, l’opérateur de fonction réseau (NFO) définit le registryPath sur l’emplacement correct du serveur Azure Container Registry (ACR). Par exemple, le NFO exécute la commande équivalente suivante :

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

Remarque

Le registryPath est défini sans préfixe tel que https:// ou oci://. Si un préfixe est requis dans le package Helm, les éditeurs doivent le définir dans le package.

values.yaml est un fichier qui contient les valeurs par défaut d’un graphique Helm. Il s’agit d’un fichier YAML qui définit les valeurs par défaut d’un graphique. Dans le fichier values.yaml, deux types de variables doivent être présents ; imagePullSecrets et registryPath. Chacun est décrit dans le tableau.

global: 
   imagePullSecrets: [] 
   registryPath: “” 
Nom Type Description
imagePullSecrets Chaîne imagePullSecrets est un tableau de noms de secrets, qui sont utilisés pour extraire des images conteneur
registryPath Chaîne registryPath est l’emplacement du AzureContainerRegistry serveur

imagePullSecrets et registryPath doivent être fournis à l’étape d’intégration NFDVersion de création.

Un NFO exécuté dans le cluster remplit ces deux variables (imagePullSecrets et registryPath) pendant une version helm à l’aide de la commande helm install -set.

Pour plus d’informations, consultez : pull-image-private-registry

Restrictions d’immuabilité

Les restrictions d’immuabilité empêchent les modifications apportées à un fichier ou à un répertoire. Par exemple, un fichier immuable ne peut pas être modifié ou renommé, et un fichier qui autorise les opérations d’ajout ne peut pas être supprimé, modifié ou renommé.

Éviter l’utilisation de balises mutables

Les utilisateurs doivent éviter d’utiliser des balises mutables telles que la dernière version, le développement ou la stabilité. Par exemple, si deployment.yaml a utilisé « latest » pour le . Values.image.tag le déploiement échouerait.

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

Éviter les références au registre externe

Les utilisateurs doivent éviter d’utiliser des références à un registre externe. Par exemple, si deployment.yaml utilise un chemin d’accès de Registre codé en dur ou des références de registre externes, il échoue à la validation.

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

Recommandations

Le fractionnement de la déclaration et de l’utilisation des définitions de ressources personnalisées (CRD), ainsi que l’utilisation de validations manuelles, sont des pratiques recommandées. Chacune est décrite dans les sections suivantes.

Fractionner la déclaration CRD et l’utilisation

Nous vous recommandons de fractionner la déclaration et l’utilisation des CRD en graphiques Helm distincts pour prendre en charge les mises à jour. Pour plus d’informations, consultez : method-2-separate-charts

Validations manuelles

Passez en revue les images et les spécifications de conteneur créées pour vous assurer que les images ont le préfixe registryURL et que les imagesPullSecrets sont remplies avec secretName.

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

OR

 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>

Référentiel d’images statiques et balises

Chaque graphique Helm doit contenir des balises et référentiel d’images statiques. Les utilisateurs doivent définir le référentiel d’images et la balise sur des valeurs statiques. Les valeurs statiques peuvent être définies par :

  • En les coder en dur dans la ligne d’image ou,
  • Définition des valeurs dans values.yaml et non l’exposition de ces valeurs dans la version de conception de fonction réseau (NFDV).

Une version de conception de fonction réseau (NFDV) doit être mappées à un ensemble statique de graphiques et d’images Helm. Les graphiques et les images sont mis à jour uniquement en publiant une nouvelle version de conception de fonction réseau (NFDV).

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

or

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