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.392 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 ] MbOra, 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:80Salva 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-2rvmvL'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 anche : Come configurare Kubernetes Cluster su Google Cloud Platform (GCP)
Leggi anche : Come configurare il controller di ingresso NGINX in Kubernetes