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