Utiliser une image depuis un registre privé#
Création d’une image sur un registre privé#
Commencez par écrire une image Docker que vous pousserez sur un registre privé :
Créez un projet privé sur gitlab
Générez un token de déploiement
Créez une image Docker avec le Dockerfile suivant :
FROM ubuntu:22.04 CMD ["sleep", "infinity"]
Buildez et pushez sur le registre gitlab de votre projet.
Créez un fichier
ubuntusleep.yamlavec le contenu suivant :apiVersion: v1 kind: Pod metadata: name: ubuntusleep spec: containers: - name: ubuntusleep image: <votre-registre.com>/mon-image:tag
Déployez le pod :
kubectl apply -f ubuntusleep.yaml
Constatez vous qu’il y a un problème ? Comment cela est-il indiqué ?
Création d’un secret pour un registre Docker#
Pour permettre à Kubernetes de s’authentifier auprès d’un registre privé, nous devons créer un Secret contenant les identifiants de connexion. La manière la plus simple de le faire est d’utiliser la commande kubectl create secret docker-registry.
Créez le secret en remplaçant les valeurs par les vôtres :
kubectl create secret docker-registry mon-secret-registre --docker-server=<votre-registre.com> --docker-username=<votre-login> --docker-password=<votre-token> --docker-email=<votre-email> --dry-run=client -o yaml > secret.yaml
Vérifiez le contenu du fichier secret.yaml puis appliquez le.
Utiliser le secret dans un Pod#
Maintenant que le secret est créé, nous pouvons l’utiliser dans la définition d’un Pod (ou d’un Deployment, StatefulSet, etc.) grâce au champ imagePullSecrets.
Voici un exemple de Pod qui utilise une image privée :
apiVersion: v1
kind: Pod
metadata:
name: ubuntusleep
spec:
containers:
- name: ubuntusleep
image: <votre-registre.com>/mon-image:tag
imagePullSecrets:
- name: mon-secret-registre
Testez.
Utilisation dans un helm chart#
Créeons un chart Helm simple pour déployer notre application.
Créez l’arborescence du chart :
mkdir mon-chart cd mon-chart mkdir templates touch Chart.yaml values.yaml templates/deployment.yaml
Remplissez
Chart.yaml:apiVersion: v2 name: mon-chart description: Un chart Helm pour déployer une application avec une image privée. version: 0.1.0
Remplissez
values.yaml:image: repository: <votre-registre.com>/mon-image pullPolicy: IfNotPresent tag: "latest" imagePullSecret: mon-secret-registre
Créez le template
templates/deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: mon-deploiement spec: replicas: 1 selector: matchLabels: app: mon-app template: metadata: labels: app: mon-app spec: containers: - name: mon-app image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} imagePullSecret: - {{ .Values.imagePullSecret }}
Déployez le chart
Utilisation dans un helm chart (en utilisant un chart pré-rempli)#
helm create génère un chart beaucoup plus complet. Voyons comment l’adapter.
Créez un nouveau chart :
helm create monappli cd monappli
Modifiez
values.yaml:Le
values.yamlgénéré contient déjà une sectionimage. Modifiez-la et ajoutez la sectionimagePullSecrets.# Extrait de values.yaml image: repository: <votre-registre.com>/mon-image pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: "" imagePullSecrets: - "mon-secret-registre" # ... reste du fichier