Selalu disarankan untuk memiliki registri atau repositori buruh pelabuhan pribadi di kluster Kubernetes Anda. Registri pribadi Docker memungkinkan pengembang untuk mendorong dan menarik gambar wadah pribadi mereka. Setelah wadah aplikasi didorong ke registri pribadi, pengembang dapat menggunakan jalur registri pribadi mereka saat membuat dan menerapkan file yaml mereka.
Pada artikel ini, kita akan mempelajari bagaimana kita dapat men-deploy private docker registry sebagai deployment di atas cluster Kubernetes. Saya berasumsi bahwa cluster Kubernetes sudah aktif dan berjalan.
Detail lab Kubernetes untuk menyiapkan registri buruh pelabuhan pribadi
- 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
- pengguna kaadmin dengan hak sudo
- Bagian NFS ‘/opt/certs’ &‘/opt/registry’
Catatan: Dalam kasus saya, saya telah menyiapkan server nfs pada master node dan mengekspor /opt/certs dan /opt/registry sebagai nfs share.
Sebelum memulai penerapan registri pribadi, pastikan pembagian nfs ini dipasang di setiap node pekerja. Jalankan perintah berikut pada setiap node pekerja.
$ 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
Untuk pemasangan permanen, tambahkan entri nfs di file /etc/fstab.
Sebagai pengganti pemasangan bagian nfs ini, kami juga dapat membuat volume persisten berbasis nfs dan kemudian kami dapat menggunakan volume persisten ini dalam file yaml.
Mari selami langkah-langkah instalasi dan konfigurasi registry docker pribadi di Kubernetes.
Langkah 1) Buat sertifikat yang ditandatangani sendiri untuk registri pribadi
Login ke control plane atau master node Anda dan gunakan perintah openssl untuk menghasilkan sertifikat yang ditandatangani sendiri untuk repositori buruh pelabuhan pribadi.
$ cd /opt $ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout \ ./certs/registry.key -x509 -days 365 -out ./certs/registry.crt
Setelah file kunci dan sertifikat dibuat, gunakan perintah ls untuk memverifikasinya,
[[email protected] opt]$ ls -l certs/total 8-rw-r--r--. 1 root root 2114 26 Sep 03:26 registry.crt-rw-r--r--. 1 root root 3272 26 Sep 03:26 registry.key[[email protected] opt]$
Langkah 2) Terapkan registri pribadi sebagai penerapan melalui file yaml
Pada node master Anda, buat file private-registry.yaml dengan konten berikut
[[email protected] ~]$ mkdir docker-repo[[email protected] ~]$ cd docker-repo/[[email protected] docker-repo]$ vi private-registry.yamlapiVersion:apps/v1kind:Deploymentmetadata : name:private-repository-k8s labels: app:private-repository-k8sspec: replicas:1 selector: matchLabels: app:private-repository-k8s template: metadata: labels: app: spec - private-repository-k8s Nama:Certs-Vol HostPath:Path:/Opt /Certs Jenis:Direktori-Nama:Registry-Vol HostPath:Path:/Opt /Registry Jenis:Direktori Kontainer:-Gambar:Registry:2 Nama:Private-Repository-K8S ImagePullpolicy:Ifnotpresent env:- Nama:registry_http_tls_certificate nilai:"/certs/registry.crt" - Nama:registry_http_tls_key nilai:"/certs/registry.key" port:- containerport:5000 volumeMount:- - name:certs-vol mountPath:/certs - name:registry-vol mountPath:/var/lib/registry
simpan dan tutup file yaml
Jalankan perintah kubectl berikut menyebarkan registri pribadi menggunakan file yaml yang dibuat di atas,
[[email protected] docker-repo]$ kubectl create -f private-registry.yamldeployment.apps/private-repository-k8s Created[[email protected] docker-repo]$
Jalankan perintah kubectl di bawah ini untuk memverifikasi status penyebaran registri dan podnya.
[[email protected] ~]$ kubectl get deployments private-repository-k8sNAME READY UP-TO-DATE AVAILABLE AGEprivate-repository-k8s ~]$ kubectl dapatkan pod | grep -i private-repoprivate-repository-k8s-85cf76b9d7-qsjxq 1/1 Berjalan 0 5m14s[[email protected] ~]$
Sempurna, output di atas mengonfirmasi bahwa registri telah berhasil disebarkan, Sekarang salin file sertifikat registri ke node pekerja dan node master di bawah folder "/etc/pki/ca-trust/source/anchors". Jalankan perintah berikut pada node master dan setiap node pekerja
$ sudo cp /opt/certs/registry.crt /etc/pki/ca-trust/source/anchors/$ sudo update-ca-trust$ sudo systemctl restart docker
Langkah 3) Buka penerapan registri sebagai jenis layanan nodeport
Untuk mengekspos penyebaran registri sebagai jenis layanan nodeport, buat file yaml berikut dengan konten di bawahnya,
[[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
simpan dan tutup file.
Sekarang terapkan layanan dengan menjalankan perintah kubectl berikut,
$ kubectl create -f private-registry-svc.yamlservice/private-repository-k8s create$
Jalankan perintah kubectl di bawah ini untuk memverifikasi status layanan,
[[email protected] ~]$ kubectl get svc private-repository-k8sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEprivate-repository:10.3 k8s[11 Repository k8s. email dilindungi] ~]$
Langkah 4) Uji dan Gunakan registri buruh pelabuhan pribadi di k8s
Untuk menguji private registry, kita akan mendownload image nginx secara lokal dan kemudian akan mengupload image tersebut ke private registry, dari master node jalankan perintah berikut,
$ sudo docker tarik nginx$ sudo docker tag nginx:k8s-master terbaru:31320/nginx:1.17$ sudo docker push k8s-master:31320/nginx:1.17
Output dari perintah di atas akan seperti di bawah ini:
Jalankan perintah buruh pelabuhan di bawah ini untuk memverifikasi apakah nginx diunggah ke repositori pribadi atau tidak.
[[email protected] ~]$ sudo docker image ls | grep -i nginxnginx terbaru 7e4d58f0e5f3 2 minggu yang lalu 133MBk8s-master:31320/nginx 1.17 7e4d 133MBk8s-master:31320/nginx 1.17 7e4d[ 5ff]Sekarang, mari kita terapkan penerapan berbasis nginx dan di file yaml tentukan jalur gambar sebagai registri buruh pelabuhan pribadi kita. Contoh ditunjukkan di bawah ini:
[[email protected] ~]$ vi nginx-test-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata: name:nginx-test-deployment labels: app:nginxspec: replicas:3 selector: matchLabels: app : metadata: labels: app:nginx spec: containers: - name:nginx-1-17 image:k8s-master:31320/nginx:1.17 port: > containerPort:80Simpan dan Tutup file
Jalankan perintah kubectl berikut,
[[email protected] ~]$ kubectl create -f nginx-test-deployment.yamldeployment.apps/nginx-test-deployment created[[email protected] ~]$ kubectl get deployments nginx-test-deploymentNAME - READY TO-DATE TERSEDIA AGEnginx-test-deployment 3/3 3 3 13s[[email protected] ~]$[[email protected] ~]$ kubectl get pod | grep nginx-test-deploymentnginx-test-deployment-f488694b5-2rvmv 1/1 Menjalankan 0 80snginx-test-deployment-f488694b5-8kb6c 1/1 Running 0 email dilindungi] ~]$Coba deskripsikan pod apa pun menggunakan perintah 'kubectl explain' dan verifikasi jalur gambar
$ kubectl mendeskripsikan pod nginx-test-deployment-f488694b5-2rvmvOutput dari perintah di atas adalah,
Keluaran di atas mengonfirmasi bahwa jalur gambar wadah adalah registri buruh pelabuhan pribadi kami, jadi itu berarti gambar nginx telah diunduh dari registri pribadi. Itu saja dari artikel ini, saya harap langkah-langkah ini membantu Anda mengatur registri buruh pelabuhan pribadi di cluster Kubernetes Anda. Silakan bagikan umpan balik dan komentar Anda di bagian komentar di bawah.
Baca Juga : Cara Menyiapkan Cluster Kubernetes di Google Cloud Platform (GCP)
Baca Juga : Cara Menyiapkan NGINX Ingress Controller di Kubernetes
Cara Menjalankan Jenkins Container sebagai Layanan Systemd dengan Docker 20 Contoh Perintah Docker yang Berguna di LinuxDocker