GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come configurare il registro Docker privato in Kubernetes (k8s)

Si consiglia sempre di avere un registro o un repository docker privato nel cluster Kubernetes. Il registro privato Docker consente agli sviluppatori di eseguire il push e il pull delle immagini del contenitore privato. Una volta che i contenitori dell'applicazione sono stati inviati al registro privato, gli sviluppatori possono utilizzare il percorso del proprio registro privato durante la creazione e la distribuzione dei file yaml.

In questo articolo impareremo come distribuire il registro Docker privato come distribuzione sopra il cluster Kubernetes. Presumo che il cluster Kubernetes sia già attivo e funzionante.

Dettagli del laboratorio Kubernetes per la configurazione del registro Docker privato

  • 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
  • Utente kadmin con diritti sudo
  • Condivisione NFS "/opt/certs" e "/opt/registry"

Nota:  Nel mio caso, ho impostato il server nfs sul nodo master ed ho esportato /opt/certs e /opt/registry come condivisione nfs.

Prima di iniziare la distribuzione del registro privato, assicurati che queste condivisioni nfs siano montate su ogni nodo di lavoro. Esegui i seguenti comandi su ciascun nodo di lavoro.

$ 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

Per il montaggio permanente, aggiungi le voci nfs nel file /etc/fstab.

Invece di montare queste condivisioni nfs, possiamo anche creare volumi persistenti basati su nfs e in seguito possiamo usare questi volumi persistenti nel file yaml.

Esaminiamo i passaggi di installazione e configurazione del registro Docker privato in Kubernetes.

Passaggio 1) Genera certificati autofirmati per il registro privato

Accedi al tuo piano di controllo o nodo principale e usa il comando openssl per generare certificati autofirmati per il repository docker privato.

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

Una volta che la chiave e il file del certificato sono stati generati, usa il comando ls per verificarli,

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

Passaggio 2) Distribuisci il registro privato come distribuzione tramite file yaml

Sul tuo nodo master, crea un file private-registry.yaml con i seguenti contenuti

[[email protected] ~]$ mkdir docker-repo[[email protected] ~]$ cd docker-repo/[[email protected] docker-repo]$ vi private-registry.yamlapiVersion:apps/v1kind:Deploymentmetadata :  nome:private-repository-k8s etichette:    app:private-repository-k8sspec:  repliche:1  selettore:    matchLabels:      app:private-repository-k8s  template:    metadata:      etichette:       app:private-repository-k8s    spec:      volumi:      - Nome:cert-vol hostpath:Path:/opt /cert Tipo:Directory-Nome:Registry-Vol HostPath:Path:/Opt /Registry Tipo:Directory Contenitori:-Immagine:Registro:2 Nome:Private-Repository-K8S ImagePullPolicy:Ifnotpresent env:- nome:registry_http_tls_certificate value:"/certs/registry.crt" - nome:registro_http_tls_key valore:"/certs/registry.key" Porte:- Containerport:5000 volumeMounts:- nome:certs-vol            mountPath:/certs          - nome:register-vol            mountPath:/var/lib/registry

salva e chiudi il file yaml

Esegui il seguente comando kubectl distribuisci il registro privato utilizzando il file yaml creato sopra,

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

Esegui di seguito i comandi kubectl per verificare lo stato della distribuzione del registro e del relativo pod.

[[email protected] ~]$ kubectl get deployments private-repository-k8sNAME                    PRONTO   AGGIORNATO   DISPONIBILE   AGEprivate-repository-k8s   1/1     1            1          protected] [email $protected][email $32s][email $protected][email $32s][email $protected][email $protected][email $protected] ~]$ kubectl ottieni pod | grep -i private-repoprivate-repository-k8s-85cf76b9d7-qsjxq   1/1     In esecuzione   0          5m14s[[email protected] ~]$

Perfetto, l'output sopra conferma che il registro è stato distribuito correttamente, ora copia il file del certificato del registro sui nodi di lavoro e sul nodo master nella cartella "/etc/pki/ca-trust/source/anchors". Esegui i seguenti comandi sul nodo master e su ogni nodo di lavoro

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

Passaggio 3) Esponi la distribuzione del registro come tipo di servizio nodeport

Per esporre la distribuzione del registro come tipo di servizio nodeport, crea il seguente file yaml con il contenuto sottostante,

[[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: porte:  - porta:5000    nodePort:31320    protocollo:TCP    targetPort:5000  selettore:    app:private-repository-k8s  tipo:NodePort

salva e chiudi il file.

Ora distribuisci il servizio eseguendo il comando kubectl,

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

Esegui sotto il comando kubectl per verificare lo stato del servizio,

[[email protected] ~]$ kubectl get svc private-repository-k8sNAME                  TYPE     CLUSTER-IP    EXTERNAL-IP PORT(S)        AGEprivate-repository-k8s NodePort 10.100.113.39  2 0:  5000 e-mail protetta] ~]$

Passaggio 4) Testare e utilizzare il registro Docker privato in k8s

Per testare il registro privato, scaricheremo l'immagine nginx localmente e quindi caricheremo quell'immagine nel registro privato, dal nodo master eseguiremo il seguente set di comandi,

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

L'output del comando precedente vorrebbe di seguito:

Esegui sotto il comando docker per verificare se nginx è stato caricato o meno nel repository privato.

[[email protetta] ~]$ sudo docker image ls | grep -i nginxnginx                    latest   7e4d58f0e5f3        2 settimane fa      133MBk8s-master:31320/nginx    1.17     7e4d58f0e5f3         3 3         3 3         3 settimane fa  ] Mb 

Ora, distribuiamo una distribuzione basata su nginx e nel file yaml specifichiamo il percorso dell'immagine come nostro registro docker privato. L'esempio è mostrato di seguito:

[[email protected] ~]$ vi nginx-test-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:  name:nginx-test-deployment  labels:    app:nginxspec:  repliche:3  selector:    matchLabels:      app:nginx  template :    metadata:      etichette:        app:nginx    spec:      containers:      - nome:nginx-1-17        immagine:k8s-master:31320/nginx:1.17        porte:        - containerPort:80

Salva e chiudi il file

Esegui i seguenti comandi kubectl,

[[email protected] ~]$ kubectl create -f nginx-test-deployment.yamldeployment.apps/nginx-test-deployment creato[[email protected] ~]$ kubectl get deployments  nginx-test-deploymentNAME                   READY   UP- AGGIORNATO   DISPONIBILE   AGEnginx-test-deployment   3/3     3            3           13s[[email protected] ~]$[[email protected] ~]$ kubectl get  pods | grep nginx-test-deploymentnginx-test-deployment-f488694b5-2rvmv 1/1 in esecuzione 0 80snginx-test-deployment-f488694b5-8kb6c 1/1 in esecuzione 0 80snginx-deployment-f48694b5-dgcxl 1/1 in esecuzione 0 80S [[[[[80S [[80S in esecuzione 00SNNGINX e-mail protetta] ~]$

Prova a descrivere qualsiasi pod usando il comando "kubectl describe" e verifica il percorso dell'immagine

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

L'output del comando precedente sarebbe,

L'output sopra conferma che il percorso dell'immagine del contenitore è il nostro registro Docker privato, quindi significa che l'immagine nginx è stata scaricata dal registro privato. Questo è tutto da questo articolo, spero che questi passaggi ti aiutino a configurare il registro docker privato sul tuo cluster Kubernetes. Per favore condividi il tuo feedback e commenti nella sezione commenti qui sotto.

Leggi ancheCome configurare Kubernetes Cluster su Google Cloud Platform (GCP)

Leggi ancheCome configurare il controller di ingresso NGINX in Kubernetes


Docker
  1. Come configurare e utilizzare il registro Docker privato

  2. Come installare Kubernetes su Ubuntu 18.04

  3. Come impostare un registro Docker privato su Rocky Linux 8

  4. Che cos'è containerd e come si collega a Docker e Kubernetes?

  5. Come configurare un semplice server Web Apache in un contenitore Docker

Come configurare MySQL con Docker in Linux

Docker – Come configurare Jupyter dietro proxy Nginx

Come configurare Home Assistant su un Raspberry Pi usando Docker

Come distribuire Docker Compose Stack su Kubernetes con Kompose

Come ridimensionare i container Docker tra i server utilizzando Kubernetes

Come creare un registro Docker privato su Ubuntu Linux