DevOps CI/CD Pipeline pada Gitlab

Dhimaz Purnama Adjhi

Sosial Media


5 orang menyukai ini
Suka

Summary

Disini saya dan teman saya Rastra Wardana Nanditama dari kelompok 6 (Studi Independen Batch 3 AI - Infra) mencoba untuk melakukan otomasi CI/CD pipeline pada Gitlab dalam membuild dan mendeploy image sederhana berupa web server nginx. Dalam proses konfigurasinya, kami menggunakan teknologi dukungan seperti Microsoft Azure dalam membuat server sebagai Gitlab Runnernya, Docker sebagai repository image dan tahap dalam melakukan stage build, Kubernetes sebagai tahap dalam melakukan stage deploy dan monitoring DevOps, serta Cloudflare sebagai penyedia layanan manajemen DNS. Kami mengerjakan ini dikarenakan untuk memenuhi Tugas Akhir Proyek dari kelas pembelajaran terjadwal Devops, Docker, dan Kubernetes.

Description

Otomasi DevOps CI/CD Pipeline pada Gitlab menggunakan Server Ubuntu dengan layanan Cloud Microsoft Azure sebagai Runner (Image Nginx untuk Docker Stage Build dan Kubernetes Stage Deploy)


 

        Membuat Repository pada Docker Hub Sebagai Image Registry

  • Buatlah akun docker hub terlebih dahulu pada platform “https://hub.docker.com” dengan kredensial user dan pass anda.
  • Buatlah repository baru dengan nama “nginxedushuffle” pada laman “https://hub.docker.com/repositories”, setting sebagai public.


    Membuat Repository Personal Project pada Gitlab sebagai CI/CD
  • Buatlah akun gitlab terlebih dahulu pada platform “https://gitlab.com” dengan kredensial user dan pass anda.
  • Buatlah repository baru pada personal project gitlab dengan nama “Belajar Pipeline CICD”, setting sebagai public.


    Setup Ubuntu Server pada Cloud Microsoft Azure sebagai Runner untuk Gitlab
  • Kami disini menggunakan akun email student pada kampus kami agar dapat melakukan akses secara gratis pada cloud server virtual machine di Microsoft Azure. 
  • Buatlah akun microsoft azure terlebih pada platform “https://portal.azure.com/” dengan kredensial user dan pass anda.
  • Buatlah cloud server virtual machine dengan memilih “Virtual Machine” pada Azure Service.
  • Pilih Tombol “+Create” lalu kemudian “Azure Machine Learning”
  • Pilihlah konfigurasi setup server sesuai kebutuhan, disini penulis memilih spec dengan rincian sebagai berikut:

  • Pada Administrator Account, pilihlah autentikasi dengan menggunakan SSH Public Key, 
  • Atur username anda, lalu kemudian pada SSH public key source pilihlah “Generate new key pair”, setelah itu atur nama key pair anda.
  • Kemudian pada Inbound port rules > Public inbound ports, pilihlah Allow selected ports dan pilih port SSH (22) dan port HTTP (80) untuk penerimaan traffic yang diizinkan request oleh client.

  • Biarkan default yang tersisa lalu pilih tombol “Review + create” di bagian bawah halaman
  • Pada halaman “Create a virtual machine” , Anda dapat melihat detail tentang VM yang akan Anda buat. Saat Anda siap, pilih “Create”
  • Ketika jendela ”Generate new key pair” terbuka, pilih Download private key dan create resource. File kunci Anda akan diunduh sebagai myKey.pem. Pastikan Anda tahu di mana .pemfile telah diunduh; Anda akan membutuhkan jalur ke sana di langkah berikutnya. 
  • Saat penerapan selesai, pilih “Go to resource”, Pada halaman untuk VM baru Anda, pilih alamat IP publik dan salin ke clipboard Anda.
  • Untuk pengujiannya adalah pastikan Virtual Machine Cloud Server Ubuntu nya nyala sebagai berikut:
  • Lalu kemudian buka terminal pada os client, lalu ketikan perintah sebagai berikut “ssh -i ~/Downloads/myKey.pem (nama)@(ip-global-server)”, maka nantinya akan berhasil terkoneksi remote login secara ssh tanpa menggunakan password sebagai berikut: 
    Install Gitlab Runner pada Server Ubuntu Virtual Machine Cloud Azure
  • Kita akan melakukan download dan install via binary file dengan menggunakan perintah pada virtual machine sebagai berikut:
    $ sudo curl -L --output /usr/local/bin/gitlab-runner “https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64”$ sudo chmod +x /usr/local/bin/gitlab-runner
    $ sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    $ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    $ sudo gitlab-runner start
    $ sudo gitlab-runner status
  • Jika output statusnya running active, maka tahap selanjutnya lakukan perintah “sudo gitlab-runner register”. Sesuaikan kebutuhan konfigurasi dan tokennya.
  • Terakhir, maka nantinya pada runner gitlab kita akan muncul seperti gambar dibawah ini yang menunjukkan bahwasannya telah berhasil. 

    Navbar Kiri pada Personal Project CI/CD kita > Setting > CI/CD > Runner > Expand

    Install Docker pada Server Ubuntu Virtual Machine Cloud Azure
  • Lakukanlah perintah instalasi docker
    $ sudo apt-get install docker.io -y

        Install Microk8s Pada Server Cloud Virtual Machine Azure

  • Lakukan dengan perintah 
    snap install microk8s --classic --channel=1.18/stable
  • Tunggu Proses Instalasinya Selesai dan Check Bila Sudah dengan perintah
    microk8s.kubectl version
  • Jika telah berhasil terinstall maka akan seperti pada gambar bawah berikut:

        Membuat Konfigurasi File Yaml untuk Stage Deploy Kubernetes

  • Pertama-tama kita buat terlebih dahulu konfigurasi file yaml untuk kubernetesnya pada server cloud virtual machine azure kita pada path “/kube” yang telah kami buat dengan perintah “mkdir kube” pada path “/”. setelah itu masuk ke directory tersebut dengan perintah “cd /kube” lalu ketikkan perintah “nano service-nginx-nodeport.yaml”
  • Setelah itu masukkan konfigurasinya seperti gambar di bawah berikut, lalu save dengan CTRL + O dan exit dengan CTRL + X

Membuat DockerFile, .gitlab-ci.yml, .gitlab-deploy.sh, dan menyiapkan Image Nginx

Pertama-tama kita masuk ke directory yang sudah di clone melalui git bash via https, setelah itu edit file .gitlab-ci.yml dan .gitlab-deploy.sh menggunakan bantuan text editor seperti Visual Studio Code. Adapun konfigurasinya seperti berikut:

  • Image registry yang akan kita pakai atau yang akan kita get adalah repository yang telah kita buat pada project sebelumnya menggunakan docker pada “hub.docker.com” yaitu “rizereze123/nginxedushuffle:main”
  • Kemudian untuk menyiapkan image nya, kita gunakan website milik kami yang sudah jadi, lakukanlah git clone atau dapat didownload manual melalui zip pada “https://github.com/rizereze123/Edu-Shuffle
  • Setelah itu clone personal project gitlab kita menggunakan git bash pada local laptop/komputer kita dengan perintah “git clone (url http)”
  • Masukkanlah DockerFile, .gitlab-ci.yml, .gitlab-deploy.sh, dan file website (image) ke dalam folder yang telah kita git clone tersebut pada personal project gitlab kita. Dan Terakhir pada step ini lakukanlah perintah git bash seperti berikut pada directory clone nya:
    $ git add . 
    $ git status
    $ git commit -m ‘v1’
    $ git push origin main
  • Maka Otomatis pada CI/CD Gitlab kita akan menjalankan pipelinenya dan Jika Stage Passed seperti gambar dibawah berikut, maka telah berhasil dan tidak ada error.

        Check Validasi Nodeport Kubernetes

  • Lakukan perintah “microk8s.kubectl get all” pada server cloud virtual machine azure kita. Jika hasilnya seperti pada gambar bawah berikut, maka dapat dikatakan pengkonfigurasian otomasi kubernetes pada gitlab pipeline kita telah berhasil. 

  • Kita dapat mengecek pada perangkat client end user kita seperti pada browser smartphone atau laptop windows dengan mengetikkan “(IP PUBLIC:Port)”, disini kita mengetikan “20.24.69.134:30001” pada browser. Maka, akan muncul image registry nginx kita seperti berikut: 

 

 

Mengubah IP Static Global Server Ke Dalam DNS (Domain Name Server) Menggunakan Cloudflare

  • Kita beli terlebih dahulu domain pada pihak ketiga, disini kami memakai vendor bernama get.tech untuk mendapatkan domain dengan tipe “.tech”. 
  • Masuk ke website nya, lakukanlah pembayaran senilai $49.99 US Dollar. Disini kelompok kami memakai redeem voucher gratis dikarenakan memakai github student starter pack untuk email kampus. Alhasil total menjadi $0 US Dollar dengan mendapat domain name server bernama “edushuffle.tech” 

  • Setelah itu masuk ke dalam dashboard control panel website penyedia domain tersebut untuk mengatur domain management dengan konfigurasi sebagai berikut:

 

  • Setelah itu masuk ke dalam situs “cloudflare.com” dengan login terlebih dahulu, lalu add sites “edushuffle.tech”. Setelah itu manage dengan proxy status kita matikan seperti berikut:

  • Terakhir, kita telah mendapatkan domain dan dapat mengubah IP Server Global Static kita ke dalam DNS (Domain Name Server) custom yang kita inginkan serta kita dapat Login melalui DNS pada koneksi SSH kita.
  • Lakukanlah pengujian pada browser dengan mengetikkan “edushuffle.tech:30001”, maka nanti akan muncul seperti berikut:

 

 

Monitoring DevOps Kubernetes Dashboard Pada Microk8s

Instalasi Kubernetes Dashboard

  • Login ke server Microsoft Azure dengan menggunakan ssh dan connect ke Kubernetes master node.
  • Lalu, install Kubernetes Dashboard dengan menggunakan perintah :
    $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
  • Perintah “kubectl apply” akan mendownload file recommended.yaml dan memanggil instruksi di dalam untuk menyiapkan setiap komponen untuk dashboard. Setelah di eksekusi kubectl akan membuat namespace, service account, config map, pods, cluster role, service, RBAC, dan deployments.

  • Lalu lakukan verifikasi semua resource yang telah sukses diinstall dengan menggunakan perintah :
    $ kubectl get all -n kubernetes-dashboard

Dapat dilihat semua resource di dalam kubernetes dashboard seperti service, deployment, replica sets, dan pods sukses di deploy di dalam cluster.

Konfigurasi Kubernetes Dashboard    

  • Edit service dari kubernetes dashboard yang sudah dibuat sebelumnya dengan menggunakan perintah :
    $ kubectl edit service/kubernetes-dashboard -n kubernetes-dashboard
  • Dengan menjalankan perintah diatas akan membuka file konfigurasi service yang dapat diedit yang menampilkan konfigurasi service.
  • Setelah filenya dibuka, ubah tipe service ClusterIP ke NodePort dan save. Secara default service hanya tersedia ke cluster internal tetapi dengan mengubahnya ke NodePort mengekspos servicenya ke luar. Dibawah adalah snippet dari file konfigurasi.
    # Updated the type to NodePort in the service.
     ports:
     port: 443 
     protocol: TCP
     targetPort: 8443
     selector:
     k8s-app: kubernetes-dashboard
     sessionAffinity: None
     type: NodePort 
  • Lalu cek pod untuk memastikan pod kubernetes dashboard sudah muncul dan running
    $ kubectl get pods --all-namespaces

  • Lalu, delete pod kubernetes dashboard pod. Untuk disini, nama podnya adalah kubernetes-dashboard-78c79f97b4-gjr2l. Setiap kali mengubah jenis service, Anda harus menghapus pod. Setelah dihapus, Kubernetes akan membuat yang baru untuk Anda dengan jenis layanan yang diperbarui untuk mengakses seluruh jaringan.
    $ kubectl delete pod kubernetes-dashboard-78c79f97b4-gjr2l -n kubernetes-dashboard
  • Lalu verifikasi service kubernetes-dashboard yang memiliki tipe yang benar dengan menggunakan perintah 
    $ kubectl get svc --all-namespaces

  • Sekarang, buat service account dengan menggunakan kubectl create serviceaccount di kubernetes-dashboard namespace. Service account ini dibutuhkan untuk mengautentikasi proses atau aplikasi apapun di dalam container yang berada di dalam pod.
    $ kubectl create serviceaccount dashboard -n kubernetes-dashboard
  • Ketika membuat sebuah service account, sebuah service account token akan di generate, token ini disimpan sebagai secret object.
  • Lalu ambil service token secret dengan menjalankan perintah berikut:
    $ kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode
  • Token ini akan digunakan pada tahap selanjutnya.

  • Lalu buat clusterrolebinding rule dengan menggunakan perintah “kubectl create clusterrolebinding” lalu menetapkan role cluster-admin ke service account yang sebelumnya dibuat untuk mendapatkan full akses ke semua cluster.
    $ kubectl create clusterrolebinding dashboard-admin -n kubernetes-dashboard  --clusterrole=cluster-admin  --serviceaccount=default:dashboard 


    Mengakses Kubernetes Dashboard
  • Buka browser yang digunakan dan ketikan ke bar navigasi https://kuberntes-master-node:NodePort/#/login untuk mengakses kubernetes dashboard.
  • Halaman utama dari kubernetes dashboard ini memerlukan untuk melakukan autentikasi dengan token atau dengan file kubeconfig yang sudah ada. Disini kami menggunakan token yang sudah di generate di tahap sebelumnya untuk mengakses kubernetes dashboard.

  • Jika semua berjalan lancar, maka dashboard akan berhasil mengautentikasi dan melanjutkan ke halaman Services.

Informasi Course Terkait
  Kategori: Cyber Security
  Course: Mengenal Cloud Computing (With Case Study)