Es wird immer empfohlen, eine private Docker-Registrierung oder ein privates Repository in Ihrem Kubernetes-Cluster zu haben. Die private Docker-Registrierung ermöglicht es den Entwicklern, ihre privaten Container-Images zu pushen und zu pullen. Sobald die Container der Anwendung in die private Registrierung übertragen wurden, können Entwickler den Pfad ihrer privaten Registrierung verwenden, während sie ihre YAML-Dateien erstellen und bereitstellen.
In diesem Artikel erfahren wir, wie wir die private Docker-Registrierung als Bereitstellung auf dem Kubernetes-Cluster bereitstellen können. Ich gehe davon aus, dass der Kubernetes-Cluster bereits betriebsbereit ist.
Kubernetes-Labdetails zum Einrichten einer privaten Docker-Registrierung
- 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
- kadmin-Benutzer mit sudo-Rechten
- NFS-Freigabe „/opt/certs“ &„/opt/registry“
Hinweis: In meinem Fall habe ich den NFS-Server auf dem Master-Knoten eingerichtet und /opt/certs und /opt/registry als NFS-Freigabe exportiert.
Bevor Sie mit der Bereitstellung der privaten Registrierung beginnen, stellen Sie bitte sicher, dass diese NFS-Freigaben auf jedem Worker-Knoten gemountet sind. Führen Sie die folgenden Befehle auf jedem Worker-Knoten aus.
$ 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
Fügen Sie für eine permanente Einbindung nfs-Einträge in die Datei /etc/fstab hinzu.
Anstatt diese nfs-Freigaben zu mounten, können wir auch nfs-basierte persistente Volumes erstellen und diese persistenten Volumes später in der yaml-Datei verwenden.
Lassen Sie uns in die Installations- und Konfigurationsschritte der privaten Docker-Registrierung in Kubernetes eintauchen.
Schritt 1) Generieren Sie selbstsignierte Zertifikate für die private Registrierung
Melden Sie sich bei Ihrer Steuerungsebene oder Ihrem Masterknoten an und verwenden Sie den Befehl openssl, um selbstsignierte Zertifikate für das private Docker-Repository zu generieren.
$ cd /opt $ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout \ ./certs/registry.key -x509 -days 365 -out ./certs/registry.crt
Sobald die Schlüssel- und Zertifikatsdatei generiert sind, verwenden Sie den Befehl ls, um sie zu überprüfen,
[[email protected] opt]$ ls -l certs/total 8-rw-r--r--. 1 root root 2114 Sep 26 03:26 Registry.crt-rw-r--r--. 1 root root 3272 26. September 03:26 Registry.key[[email protected] opt]$
Schritt 2) Stellen Sie die private Registrierung als Bereitstellung über eine Yaml-Datei bereit
Erstellen Sie auf Ihrem Master-Knoten eine private-registry.yaml-Datei mit folgendem Inhalt
[[email protected] ~]$ mkdir docker-repo[[email protected] ~]$ cd docker-repo/[[email protected] docker-repo]$ vi private-registry.yamlapiVersion:apps/v1kind:Bereitstellungsmetadaten - Name:CERTS-VOL Hostpath:Pfad:/ Opt / Certs-Typ:Verzeichnis - Name:Registry-Vol. Hostpath:Pfad:/ Opt / Registrierungsart:Verzeichniscontainer:- Bild:Registriert:2 Name:Private-Repository-K8S ImagePullPolicy:IFNOTPRESENT ENV:- NAME:Registry_HTTP_TLS_CERTIFICATE-Wert:"/certs/registry.crt" - Name:Registry_HTTP_TLS_KEY-Wert:"/certs/registry.key" Ports:- Containerport:5000 VolumMounts:- name:certs-vol mountPath:/certs - name:Registry-vol mountPath:/var/lib/registry
Speichern und schließen Sie die Yaml-Datei
Führen Sie den folgenden kubectl-Befehl aus, um die private Registrierung mithilfe der oben erstellten Yaml-Datei bereitzustellen,
[[email protected] docker-repo]$ kubectl create -f private-registry.yamldeployment.apps/private-repository-k8s created[[email protected] docker-repo]$
Führen Sie die folgenden kubectl-Befehle aus, um den Status der Registrierungsbereitstellung und ihres Pods zu überprüfen.
[[email protected] ~]$ kubectl Get Deployments private-repository-k8sNAME BEREIT AKTUELL VERFÜGBAR AGEprivate-repository-k8s 1/1 1 1 3m32 ~]$ kubectl erhält Pods | grep -i private-repoprivate-repository-k8s-85cf76b9d7-qsjxq 1/1 Läuft 0 5m14s[[email protected] ~]$
Perfekt, die obige Ausgabe bestätigt, dass die Registrierung erfolgreich bereitgestellt wurde. Kopieren Sie nun die Registrierungszertifikatsdatei auf die Worker-Knoten und den Master-Knoten im Ordner „/etc/pki/ca-trust/source/anchors“. Führen Sie die folgenden Befehle auf dem Master-Knoten und jedem Worker-Knoten aus
$ sudo cp /opt/certs/registry.crt /etc/pki/ca-trust/source/anchors/$ sudo update-ca-trust$ sudo systemctl docker neu starten
Schritt 3) Bereitstellen der Registrierungsbereitstellung als Nodeport-Diensttyp
Um die Registrierungsbereitstellung als Nodeport-Diensttyp verfügbar zu machen, erstellen Sie die folgende YAML-Datei mit den folgenden Inhalten:
[[email protected] ~]$ cd docker-repo/[[email protected] docker-repo]$ vi private-registry-svc.yamlapiVersion:v1kind:Servicemetadata: label: app:private-repository-k8s name:private-repository-k8sspec: ports: - port:5000 nodePort:31320 protocol:TCP targetPort:5000 selector: app:private-repository-k8s type:NodePort
Speichern und schließen Sie die Datei.
Stellen Sie nun den Dienst bereit, indem Sie den folgenden kubectl-Befehl ausführen:
$ kubectl create -f private-registry-svc.yamlservice/private-repository-k8s created$
Führen Sie den folgenden kubectl-Befehl aus, um den Dienststatus zu überprüfen,
[[email protected] ~]$ kubectl get svc private-repository-k8sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEprivate-repository-k8s NodePort 10.100.113.395000 E-Mail-geschützt] ~]$
Schritt 4) Testen und verwenden Sie die private Docker-Registrierung in k8s
Um die private Registrierung zu testen, laden wir das nginx-Image lokal herunter und laden dieses Image dann in die private Registrierung hoch. Führen Sie vom Master-Knoten aus den folgenden Befehlssatz aus,
$ sudo docker pull nginx$ sudo docker tag nginx:latest k8s-master:31320/nginx:1.17$ sudo docker push k8s-master:31320/nginx:1.17
Die Ausgabe des obigen Befehls würde wie folgt aussehen:
Führen Sie den folgenden Docker-Befehl aus, um zu überprüfen, ob nginx in das private Repository hochgeladen wurde oder nicht.
[[email protected] ~]$ sudo docker image ls | grep -i nginxnginx latest 7e4d58f0e5f3 vor 2 Wochen 133MBk8s-master:31320/nginx 1.17 7e4d58f0e5f3 vor 2 WochenLassen Sie uns nun eine nginx-basierte Bereitstellung bereitstellen und in der yaml-Datei den Pfad des Bildes als unsere private Docker-Registrierung angeben. Beispiel ist unten gezeigt:
[[email protected] ~]$ vi nginx-test-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata: name:nginx-test-deployment labels: app:nginxspec: replicas:3 selector: matchLabels: app:nginx template : Metadaten: Labels: App:nginx Spezifikation: Container: - Name:nginx-1-17 Bild:k8s-master:31320/nginx:1.17 Ports: - ContainerPort:80Speichern und schließen Sie die Datei
Führen Sie die folgenden kubectl-Befehle aus,
[[email protected] ~]$ kubectl create -f nginx-test-deployment.yamldeployment.apps/nginx-test-deployment created[[email protected] ~]$ kubectl get deploys nginx-test-deploymentNAME READY UP- BIS DATUM VERFÜGBAR AGEnginx-test-deployment 3/3 3 3 13s[[email protected] ~]$[[email protected] ~]$ kubectl get pods | GREP NginX-Test-DeprimmentGinx-Test-Deployment-F488694B5-2RVMV 1/1 Ausführen 0 80sGinx-Test-Deployment-F488694B5-8KB6c 1/1 Ausführen 0 80sGinx-Test-Deployment-F488694B5-DGCXL 1/1 Laufen 0 80s [[ E-Mail-geschützt] ~]$Versuchen Sie, einen beliebigen Pod mit dem Befehl „kubectl describe“ zu beschreiben und den Bildpfad zu überprüfen
$ kubectl description pod nginx-test-deployment-f488694b5-2rvmvDie Ausgabe des obigen Befehls wäre,
Die obige Ausgabe bestätigt, dass der Image-Pfad des Containers unsere private Docker-Registrierung ist, was bedeutet, dass das nginx-Image von der privaten Registrierung heruntergeladen wurde. Das war alles aus diesem Artikel. Ich hoffe, diese Schritte helfen Ihnen beim Einrichten einer privaten Docker-Registrierung in Ihrem Kubernetes-Cluster. Bitte teilen Sie Ihr Feedback und Ihre Kommentare im Kommentarbereich unten mit.
Auch lesen : So richten Sie Kubernetes-Cluster auf der Google Cloud Platform (GCP) ein
Auch lesen : So richten Sie den NGINX Ingress Controller in Kubernetes ein