GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment configurer le registre Docker privé dans Kubernetes (k8s)

Il est toujours recommandé d'avoir un registre ou un référentiel Docker privé dans votre cluster Kubernetes. Le registre privé Docker permet aux développeurs de pousser et d'extraire leurs images de conteneurs privés. Une fois les conteneurs de l'application poussés vers le registre privé, les développeurs peuvent utiliser le chemin de leur registre privé lors de la création et du déploiement de leurs fichiers yaml.

Dans cet article, nous apprendrons comment déployer le registre docker privé en tant que déploiement au-dessus du cluster Kubernetes. Je suppose que le cluster Kubernetes est déjà opérationnel.

Détails du laboratoire Kubernetes pour la configuration d'un registre docker privé

  • k8s-master – 192.168.1.40 – CentOS 7
  • k8s-worker-1 – 192.168.1.41 – CentOS 7
  • k8s-worker-2 – 192.168.1.42 – CentOS 7
  • utilisateur kadmin avec droits sudo
  • Partage NFS '/opt/certs' &'/opt/registry'

Remarque :  Dans mon cas, j'ai configuré le serveur nfs sur le nœud maître et exporté /opt/certs et /opt/registry en tant que partage nfs.

Avant de commencer le déploiement du registre privé, assurez-vous que ces partages nfs sont montés sur chaque nœud de travail. Exécutez les commandes suivantes sur chaque nœud de travail.

$ sudo mkdir /opt/certs /opt/registry$ sudo mount 192.168.1.40:/opt/certs /opt/certs$ sudo mount 192.168.1.40:/opt/registry /opt/registry

Pour un montage permanent, ajoutez des entrées nfs dans le fichier /etc/fstab.

Au lieu de monter ces partages nfs, nous pouvons également créer des volumes persistants basés sur nfs et plus tard, nous pouvons utiliser ces volumes persistants dans le fichier yaml.

Plongeons-nous dans les étapes d'installation et de configuration du registre docker privé dans Kubernetes.

Étape 1) Générer des certificats auto-signés pour le registre privé

Connectez-vous à votre plan de contrôle ou à votre nœud maître et utilisez la commande openssl pour générer des certificats auto-signés pour le référentiel docker privé.

$ cd /opt $ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout \ ./certs/registry.key -x509 -days 365 -out ./certs/registry.crt

Une fois la clé et le fichier de certificat générés, utilisez la commande ls pour les vérifier,

[[email protected] opt]$ ls -l certs/total 8-rw-r--r--. 1 root root 2114 Sep 26 03:26 register.crt-rw-r--r--. 1 root root 3272 26 septembre 03:26 register.key[[email protected] opt]$

Étape 2) Déployer le registre privé en tant que déploiement via le fichier yaml

Sur votre nœud maître, créez un fichier private-registry.yaml avec le contenu suivant

[[email protected] ~]$ mkdir docker-repo[[email protected] ~]$ cd docker-repo/[[email protected] docker-repo]$ vi private-registry.yamlapiVersion :apps/v1kind :Deploymentmetadata :  nom : privé-référentiel-k8s labels :    application : privé-référentiel-k8sspec :  réplicas :1  sélecteur :    matchLabels :      app :private-repository-k8s modèle :    metadata :      labels :        app :private-repository-k8s    spec :      volumes :      - Nom:CERTS-VOL HOSTPATH:PATH:/ OPT / CERTS Type:Directory - Nom:Registry-Vol HostPath:Path:/ Opt / Registry Type:Directory Conteners:- Image:Registry:2 Name:Private-Repository-K8S ImagePullPolicy:Ifnotpresent Env:- Name:registry_http_tls_certificate value:"/certs/registry.crt" - name:registry_http_tls_key valu nom :certs-vol            chemin_montage :/certs          - nom :vol-registre            chemin_montage :/var/lib/registry

enregistrer et fermer le fichier yaml

Exécutez la commande kubectl suivante pour déployer le registre privé à l'aide du fichier yaml créé ci-dessus,

[[email protected] docker-repo]$ kubectl create -f private-registry.yamldeployment.apps/private-repository-k8s créé[[email protected] docker-repo]$

Exécutez les commandes kubectl ci-dessous pour vérifier l'état du déploiement du registre et de son pod.

[[email protected] ~]$ kubectl get deployments private-repository-k8sNAME                     READY   UP-TO-DATE   AVAILABLE   AGEprivate-repository-k8s   1/1     1            1                     3m32s][~]$ protégé     3 m32 s][~] $ protégé email[e] ~]$ kubectl obtenir des pods | grep -i private-repoprivate-repository-k8s-85cf76b9d7-qsjxq   1/1     En cours d'exécution   0          5m14s[[email protected] ~]$

Parfait, la sortie ci-dessus confirme que le registre a été déployé avec succès. Copiez maintenant le fichier de certificat de registre sur les nœuds de travail et le nœud maître sous le dossier "/etc/pki/ca-trust/source/anchors". Exécutez les commandes suivantes sur le nœud maître et chaque nœud de travail

$ sudo cp /opt/certs/registry.crt /etc/pki/ca-trust/source/anchors/$ sudo update-ca-trust$ sudo systemctl restart docker

Étape 3) Exposez le déploiement du registre en tant que type de service nodeport

Pour exposer le déploiement du registre en tant que type de service nodeport, créez le fichier yaml suivant avec le contenu ci-dessous,

[[email protected] ~]$ cd docker-repo/[[email protected] docker-repo]$ vi private-registry-svc.yamlapiVersion :v1kind :Servicemetadata :  labels :    app :private-repository-k8s  name :private-repository-k8sspec :  ports :  - port :5000    nodePort :31320    protocol :TCP    targetPort :5000  selector :    app :private-repository-k8s  type :NodePort

enregistrez et fermez le fichier.

Déployez maintenant le service en exécutant la commande kubectl suivante,

$ kubectl create -f private-registry-svc.yamlservice/private-repository-k8s created$

Exécutez la commande kubectl ci-dessous pour vérifier l'état du service,

[[email protected] ~]$ kubectl get svc private-repository-k8sNAME                  TYPE     CLUSTER-IP    EXTERNAL-IP PORT(S)        AGEprivate-repository-k8s NodePort 10.100.113.39                                                      5 e-mail protégé] ~]$

Étape 4) Tester et utiliser le registre docker privé dans k8s

Pour tester le registre privé, nous allons télécharger l'image nginx localement, puis télécharger cette image dans le registre privé, à partir du nœud maître, exécutez l'ensemble de commandes suivant,

$ sudo docker pull nginx$ sudo docker tag nginx:latest k8s-master:31320/nginx:1.17$ sudo docker push k8s-master:31320/nginx:1.17

La sortie de la commande ci-dessus aimerait ci-dessous :

Exécutez la commande docker ci-dessous pour vérifier si nginx est téléchargé sur le référentiel privé ou non.

[[email protected] ~]$ sudo docker image ls | grep -i nginxnginx                   dernier   7e4d58f0e5f3        il y a 2 semaines      133MBk8s-master:31320/nginx    1.17     7e4d58f0e5f3       il y a 2 semaines de protection        

Maintenant, déployons un déploiement basé sur nginx et dans le fichier yaml spécifions le chemin de l'image en tant que notre registre docker privé. L'exemple est illustré ci-dessous :

[[email protected] ~]$ vi nginx-test-deployment.yamlapiVersion :apps/v1kind :Deploymentmetadata :  nom :nginx-test-deployment labels :    app :nginxspec :  répliques :3  selector :    matchLabels :      app :nginx  template :    métadonnées :      étiquettes :        application :nginx    spec :      conteneurs :      - nom :nginx-1-17        image :k8s-master:31320/nginx:1.17        ports :        - containerPort :80

Enregistrer et fermer le fichier

Exécutez les commandes kubectl suivantes,

[[email protected] ~]$ kubectl create -f nginx-test-deployment.yamldeployment.apps/nginx-test-deployment created[[email protected] ~]$ kubectl get deployments  nginx-test-deploymentNAME                   PRÊT   UP- À CE JOUR    DISPONIBLE   AEnginx-test-deployment   3/3     3            3           13s[[email protected] ~]$[[email protected] ~]$ kubectl get  pods | grep nginx-test-deploymentngginx-test-deployment-f488694b5-2rvmv 1/1 exécutant 0 80snginx-test-deployment-f488694b5-8kb6c 1/1 exécutant 0 80SNGINX-TEST-DEPLOYMENT-F488694B5-DGCXL 1/1 Running 0 80S [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ e-mail protégé] ~]$

Essayez de décrire n'importe quel pod à l'aide de la commande "kubectl describe" et vérifiez le chemin de l'image

$ kubectl describe pod nginx-test-deployment-f488694b5-2rvmv

La sortie de la commande ci-dessus serait,

La sortie ci-dessus confirme que le chemin de l'image du conteneur est notre registre docker privé, cela signifie donc que l'image nginx a été téléchargée à partir du registre privé. C'est tout de cet article, j'espère que ces étapes vous aideront à configurer le registre Docker privé sur votre cluster Kubernetes. Veuillez partager vos commentaires et commentaires dans la section des commentaires ci-dessous.

Lire aussi  : Comment configurer un cluster Kubernetes sur Google Cloud Platform (GCP)

Lire aussi  : Comment configurer le contrôleur d'entrée NGINX dans Kubernetes


Docker
  1. Comment configurer et utiliser le registre Docker privé

  2. Comment installer Kubernetes sur Ubuntu 18.04

  3. Comment configurer un registre Docker privé sur Rocky Linux 8

  4. Qu'est-ce que containerd et quel est son lien avec Docker et Kubernetes ?

  5. Comment configurer un serveur Web Apache simple dans un conteneur Docker

Comment configurer MySQL avec Docker sous Linux

Docker - Comment configurer Jupyter derrière le proxy Nginx

Comment configurer Home Assistant sur un Raspberry Pi à l'aide de Docker

Comment déployer des piles Docker Compose sur Kubernetes avec Kompose

Comment faire évoluer les conteneurs Docker sur les serveurs à l'aide de Kubernetes

Comment créer un registre Docker privé sur Ubuntu Linux