Avatar
Cover

Membuat Klaster Kubernetes dan CICD Gitlab

Tentang BlabakHubungi Blabak Login

Kategori

ActionAnother actionSomething else hereSeparated link

Submit

  • Yusuf
  • 133

Membuat Klaster Kubernetes dan CICD Gitlab

Oleh Yusuf - 19 Agustus 2021

Presetup server

Pada artikel berikut kita akan membahas bagaimana untuk men-setup kubernetes yang telah kita install agar dapat terhubung ke CICD pada Gitlab, sehingga proses Integrasi dan Deployment menjadi otomatis.

sudo yum -y update
sudo yum install git

1. Install Kubernetes

Post install kubernetes

Create the docker group.

sudo groupadd docker

Add your user to the docker group.

$ sudo usermod -aG docker $USER

Login Logout and Check

docker info

2. Install nginx ingress

Nginx ingress digunakan untuk mengarahkan web ke pods:

https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/

git clone https://github.com/nginxinc/kubernetes-ingress/
cd kubernetes-ingress/deployments
git checkout v1.12.0

Configure RBAC

kubectl apply -f common/ns-and-sa.yaml
kubectl apply -f rbac/rbac.yaml

Create common resources

kubectl apply -f common/default-server-secret.yaml
kubectl apply -f common/nginx-config.yaml
kubectl apply -f common/ingress-class.yaml

Deploy ingress

kubectl apply -f daemon-set/nginx-ingress.yaml

Check ingress controller is running

kubectl get pods --namespace=nginx-ingress

3. Integration dengan gitlab

Disini kita akan menambahkan Gitlab Runner agar kluster kubernetes dapat terhubung ke Gitlab. Runner ini memungkinkan kita untuk menggunakan fitur CI/CD yang ada di Gitlab menggunakan kubernetes yang telah kita buat.

Install Gitlab Runner

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash

sudo yum install gitlab-runner

Register Runner

Mendaftarkan runner ke gitlab kita:

sudo gitlab-runner register

Berikut contoh hasil dari register gitlab runner:

Enter the GitLab instance URL (for example, https://gitlab.com/):
http://git.pdsb.id/
Enter the registration token:
C_dEF4YbxsApQGGv4BHX
Enter a description for the runner:
[master-node]: Kubernetes Cluster Development
Enter tags for the runner (comma-separated):
kubedev01
Registering runner... succeeded                     runner=C_dEF4Yb
Enter an executor: shell, ssh, virtualbox, kubernetes, docker, parallels, docker+machine, docker-ssh+machine, custom, docker-ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Enable gitlab-runner to use docker command

Mendaftarkan gitlab-runner agar dapat menggunakan docker:

sudo usermod -aG docker gitlab-runner

Bisa jadi Anda akan menemui error berikut apabila tidak menjalankan command diatas:

ERROR: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info: dial unix /var/run/docker.sock: connect: permission denied

Error

The connection to the server localhost:8080 was refused - did you specify the right host or port?

sudo mkdir -p /home/gitlab-runner/.kube

for kubernetes

sudo cp -i /etc/kubernetes/admin.conf /home/gitlab-runner/.kube/config

for minikube:

minikube ssh

cat /etc/kubernetes/admin.conf #copy isi file

exit

sudo vi /home/gitlab-runner/.kube/config #paste content tadi

Both

sudo chown gitlab-runner:gitlab-runner /home/gitlab-runner/.kube/config

Custom gitlab

Jika gitlab Anda tidak menggunakan SSL, kemungkinan Anda menemui error berikut:

Error response from daemon: Get https://registry.blabak.com:5005/v2/: http: server gave HTTP response to HTTPS client

Solusi:

rubah file berikut, atau jika belum ada file tersebut, buat filenya:

vi /etc/docker/daemon.json

Tambahkan line berikut { "insecure-registries":["host:port"] }, contoh :

{ "insecure-registries":["registry.blabak.com:5005"] }

untuk host diisikan host tempat docker registry, sedangkan port juga menggunakan port docker registry. Karena disini kita menggunakan gitlab, untuk defaultnya adalah registry.gitlab.com dengan port 5005 default gitlab kita.

Lalu restart docker daemon dengan command berikut:

$ sudo service docker restart

Error:

denied: requested access to the resource is denied

Try push on server, cek login, cek push path

On Master node

Setelah dari CICD pipeline tidak ada error, masih ada kemungkinan error pada saat dari cluster kubernetes akan melakukan pull dari image yang kita gunakan.

Berikut adalah contoh error dimana cluster kubernetes kita tidak diijinkan untuk melakukan pull image yang ada di registry gitlab:

Warning  Failed     19s (x2 over 33s)  kubelet, worker-node-1 Failed to pull image "registry.gitlab.com/blabak/blabak:stage": rpc error: code = Unknown desc = Error response from daemon: Head https://registry.gitlab.com/v2/blabak/blabak/manifests/stage: denied: access forbidden

Solusinya adalah dengan cara menambahkan secret key yang digunakan kubernetes untuk login ke registry yang kita gunakan

  1. masuk ke server dan login menggunakan user password gitlab kita
docker login registry.pdsb.id:5005
Username: simin
Password:
WARNING! Your password will be stored unencrypted in /home/simin/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
  1. Dari pesan diatas didapatkan credential yang disimpan di /home/simin/.docker/config.json, selanjutnya menggunakan config.json tersebut, kita buat secret di kubernetes dengan command berikut:
sudo kubectl create secret generic regcred --from-file=.dockerconfigjson=/home/simin/.docker/config.json --type=kubernetes.io/dockerconfigjson

Pastikan path dockerconfigjson yang kita gunakan sesuai dengan yang dihasilkan pada command sebelumnya.

Install HAProxy

Selanjutnya yang kita butuhkan adalah HAProxy, yang berfungsi untuk

sudo service haproxy start

NFS

sudo systemctl enable --now rpcbind

sudo systemctl enable --now nfs-server

sudo systemctl enable --now nfs-lock

sudo systemctl enable --now nfs-idmap

Error

Failed to pull image "registry.gitlab.com/blabak/blabak:stage": rpc error: code = Unknown desc = Error response from daemon: Head https://registry.gitlab.com/v2/blabak/blabak/manifests/stage: denied: access forbidden

Slow

Aplikasi

Kategori

  • Freelance
  • Entrepreneurship
  • Design
  • Sales & Marketing
  • Story

Tentang

  • Tentang Blabak
  • Bagaimana Cara Kerja
  • Berita
  • Keamanan
  • Kutipan
  • Peta Situs

Ketentuan

  • Disclaimaer Policy
  • Privasi Policy
  • Terms of Service