K3S: CONTAINER IMAGE VERSIONING MENGGUNAKAN ARGOCD DAN GITOPS

Last Updated: 4 October 2026, 18:19

Bagikan:

Table of Contents

Pendahuluan

Pada metode ketiga ini akan menggunakan ArgoCD untuk menerapkan konsep GitOps pada Kubernetes K3s. Berbeda dengan metode K3s menggunakan kubectl, pada metode ini GitLab CI/CD tidak melakukan deployment aplikasi secara langsung menggunakan kubectl apply. GitLab CI/CD hanya bertanggung jawab terhadap proses build Docker image dan mengirimkan image tersebut ke GitLab Container Registry.

Konfigurasi deployment disimpan pada repository Git dalam bentuk Helm Chart. ArgoCD kemudian memonitor repository tersebut dan memastikan kondisi cluster K3s sesuai dengan konfigurasi yang tersimpan di Git. Dengan pendekatan ini, Git menjadi sumber utama konfigurasi deployment atau biasa disebut sebagai source of truth.

Konsep GitOps

GitOps adalah suatu pendekatan deployment yang menjadikan repository Git sebagai sumber utama konfigurasi infrastruktur dan aplikasi. Pada implementasi ini, source code aplikasi berada pada repository GitLab. Ketika terdapat perubahan source code dan dibuat Git Tag baru, GitLab CI/CD menjalankan proses build Docker image. Image hasil build kemudian dikirim ke GitLab Container Registry.

Setelah image tersedia, versi image yang digunakan aplikasi ditentukan melalui konfigurasi Helm. Perubahan pada konfigurasi Helm kemudian disimpan kembali ke repository Git. ArgoCD memonitor repository Helm tersebut. Ketika terdapat perubahan pada repository, ArgoCD membandingkan konfigurasi yang berada di Git dengan kondisi yang sedang berjalan pada cluster K3s. Jika terdapat perbedaan, ArgoCD melakukan synchronization sesuai dengan konfigurasi yang telah ditentukan. Dengan demikian, registry berfungsi sebagai tempat penyimpanan image, repository Helm menyimpan konfigurasi deployment, dan ArgoCD bertugas memastikan konfigurasi tersebut diterapkan pada K3s.

Tujuan

Implementasi ArgoCD dan GitOps memiliki beberapa tujuan. Pertama, memisahkan proses build image dengan proses deployment. Kedua, menjadikan Git sebagai sumber konfigurasi deployment. Ketiga, menggunakan Helm sebagai package dan configuration management untuk aplikasi Kubernetes. Selain itu juga, ArgoCD digunakan sebagai GitOps controller yang memonitor perubahan repository dan melakukan synchronization secara otomatis. Setiap perubahan konfigurasi deployment juga memiliki riwayat pada Git sehingga perubahan dapat dilacak melalui commit.

ArgoCD

ArgoCD berjalan pada cluster K3s dengan hostname:

k3s-rnd-00

Alamat IP server sebagai contoh:

192.168.1.100

Note : alamat ip hanya contoh

ArgoCD berjalan pada namespace:

argocd

Status Pod ArgoCD dapat diperiksa menggunakan:

sudo kubectl get pods -n argocd

Pod seperti argocd-server, argocd-repo-server, argocd-application-controller, dan argocd-applicationset-controller harus berada dalam kondisi berjalan agar ArgoCD dapat menjalankan fungsinya.

ArgoCD Web

ArgoCD Web digunakan sebagai antarmuka untuk memonitor aplikasi yang dikelola oleh ArgoCD. Pada implementasi ini ArgoCD dapat diakses menggunakan domain yagn dibuat sendiri:

https://argocd.risyadrahmadi.my.id

Melalui ArgoCD Web, status Application dapat diperiksa, termasuk Sync Status, Health Status, resource Kubernetes, repository yang digunakan, revision Git, Deployment, Service, dan Pod. Tampilan tersebut membantu proses monitoring karena kondisi aplikasi dapat dilihat dalam satu antarmuka tanpa harus selalu menjalankan perintah kubectl.

ArgoCD Application

Application yang digunakan pada implementasi ini bernama:

image-versioning-argocd

Application tersebut menggunakan repository Helm:

[email protected]:klikto/rnd/pipeline/k3s/image-versioning-argocd/helm.git

Path Helm Chart yang digunakan adalah:

chart

Resource tersebut kemudian dideploy ke namespace:

default

Konfigurasi Application menentukan repository mana yang harus dimonitor oleh ArgoCD, path Helm Chart yang digunakan, serta destination Kubernetes tempat aplikasi akan dijalankan.

Sync Policy

Application ArgoCD menggunakan beberapa konfigurasi synchronization, yaitu Automated Sync, Prune, dan Self Heal. Automated Sync memungkinkan ArgoCD melakukan synchronization secara otomatis ketika terdapat perubahan pada desired state.

Prune digunakan agar resource yang sudah tidak terdapat pada konfigurasi Git dapat dihapus dari cluster sesuai dengan konfigurasi ArgoCD. Self Heal memungkinkan ArgoCD mengembalikan kondisi cluster apabila terdapat perubahan manual yang menyebabkan kondisi aktual berbeda dengan konfigurasi yang tersimpan di repository. Dengan konfigurasi tersebut, kondisi cluster dapat terus disesuaikan dengan desired state yang berada pada repository Git.

Struktur Repository Helm

Repository yang digunakan untuk konfigurasi deployment bernama:

image-versioning-argocd

Struktur utama repository Helm seperti dibawah ini :

helm/

└── chart/

├── Chart.yaml

├── values.yaml

└── templates/

├── deployment.yaml

└── service.yaml

Chart.yaml berisi informasi dasar Helm Chart. values.yaml digunakan untuk menyimpan nilai konfigurasi yang dapat digunakan oleh template. Sementara itu, file pada direktori templates digunakan untuk menghasilkan resource Kubernetes seperti Deployment dan Service.

Konfigurasi Image

Versi Docker image yang digunakan aplikasi ditentukan pada file values.yaml.

Contoh konfigurasi sebagai berikut :

image:

repository: registry.gitlab.com/klikto/…

tag: v0.1.9

Ketika tersedia image versi baru, maka nilai tag dapat diperbarui menjadi:

image:

repository: registry.gitlab.com/klikto/…

tag: v0.1.10

Perubahan tersebut merupakan perubahan terhadap desired state aplikasi. ArgoCD tidak mencari sendiri image terbaru dari registry. ArgoCD mengikuti konfigurasi yang terdapat pada repository Git. Oleh karena itu, perubahan versi image harus tercermin pada file Helm dan perubahan tersebut harus disimpan melalui Git.

Proses Build

Proses build Docker image tetap dilakukan oleh GitLab CI/CD. Sebelum melakukan build dan push, pipeline melakukan autentikasi ke GitLab Container Registry menggunakan credential bawaan GitLab:

echo “${CI_REGISTRY_PASSWORD}” | docker login “${CI_REGISTRY}” \

-u “${CI_REGISTRY_USER}” \

–password-stdin

Setelah login berhasil, Docker image dibuat menggunakan versi yang berasal dari Git Tag:

docker build \

-t “${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}” .

Image kemudian dikirim ke GitLab Container Registry:

docker push “${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}”

Dengan menggunakan CI_COMMIT_TAG, versi Docker image mengikuti versi yang dibuat pada repository Git.

Image Berhasil Disimpan

Setelah proses docker push berhasil, Docker image tersimpan pada GitLab Container Registry. Sebagai contoh, aplikasi Golang dapat memiliki image:

golang:v0.1.9

Registry berfungsi sebagai tempat penyimpanan dan distribusi Docker image yang akan digunakan oleh Kubernetes. Registry tidak menentukan kapan aplikasi harus dideploy. Penentuan versi image yang digunakan oleh aplikasi tetap dilakukan melalui konfigurasi Helm yang berada pada repository Git.

Update Helm

Setelah image baru tersedia pada registry, konfigurasi Helm diperbarui agar menggunakan versi image tersebut.

Sebagai contoh, values.yaml sebelumnya menggunakan:

image:

tag: v0.1.9

Kemudian diperbarui menjadi:

image:

tag: v0.1.10

Setelah melakukan perubahan, status repository dapat diperiksa menggunakan:

git status

Perubahan kemudian ditambahkan ke staging area:

git add .

Selanjutnya dibuat commit:

git commit -m “Update Golang image to v0.1.10”

Perubahan kemudian dikirim ke repository GitLab menggunakan:

git push origin main

Git push inilah yang menjadi salah satu bagian penting dalam mekanisme GitOps karena perubahan desired state harus tersedia pada repository yang dipantau oleh ArgoCD.

ArgoCD Mendeteksi Perubahan

Setelah perubahan Helm berhasil di-push ke repository GitLab, ArgoCD akan memonitor repository tersebut dan melakukan refresh terhadap konfigurasi. ArgoCD kemudian membandingkan desired state yang berada pada repository dengan kondisi aktual pada cluster K3s. Jika sebelumnya Helm menggunakan image v0.1.9 dan kemudian repository diperbarui menjadi v0.1.10, ArgoCD akan mendeteksi bahwa konfigurasi yang berada di Git berbeda dengan kondisi yang sedang berjalan pada cluster. Perbedaan tersebut kemudian menjadi dasar bagi ArgoCD untuk melakukan synchronization.

Auto Sync

Karena konfigurasi Automated Sync telah diaktifkan, proses deployment tidak perlu menjalankan kubectl apply secara manual dari pipeline aplikasi. Setelah ArgoCD mendeteksi perubahan pada repository, ArgoCD akan melakukan synchronization terhadap desired state terbaru.

Konfigurasi Helm kemudian digunakan untuk menghasilkan resource Kubernetes yang sesuai. Kubernetes selanjutnya melakukan proses update terhadap Deployment dan menjalankan Pod menggunakan versi image yang telah ditentukan. Dengan mekanisme ini, GitLab CI/CD tidak perlu memiliki proses deployment langsung ke cluster K3s. Pipeline cukup memastikan image tersedia dan konfigurasi deployment diperbarui pada repository Git yang dipantau oleh ArgoCD.

Registry Authentication

Meskipun deployment dikendalikan oleh ArgoCD, Kubernetes tetap membutuhkan credential untuk mengambil Docker image private dari GitLab Container Registry.

Secret yang digunakan adalah:

gitlab-registry

Secret dapat diperiksa menggunakan perintah :

sudo kubectl -n default get secret gitlab-registry

Tipe Secret dapat diperiksa menggunakan perintah:

sudo kubectl -n default get secret gitlab-registry \

-o jsonpath=”{.type}”

Hasilnya menggunakan tipe:

kubernetes.io/dockerconfigjson

Credential tersebut digunakan oleh Pod melalui imagePullSecrets agar Kubernetes dapat melakukan autentikasi ketika mengambil image private dari GitLab Container Registry.

Deployment ArgoCD

Ketika konfigurasi Helm menentukan image:

image:

tag: v0.1.10

ArgoCD akan menggunakan konfigurasi tersebut sebagai desired state dan melakukan synchronization ke Kubernetes. Lalu Kubernetes akan menggunakan image yang telah ditentukan, misalnya:

registry.gitlab.com/…:v0.1.10

Jika image tersedia dan credential registry valid, Kubernetes akan melakukan image pull dan menjalankan Pod menggunakan image tersebut. Dengan demikian, perubahan versi image dikendalikan oleh perubahan konfigurasi pada repository Helm, bukan dengan melakukan perubahan langsung pada Pod.

Verifikasi Application

Status Application ArgoCD dapat diperiksa menggunakan perintah :

sudo kubectl get applications -n argocd

Application yang digunakan adalah:

image-versioning-argocd

Pada kondisi deployment berhasil, Application diharapkan memiliki status:

Synced

Healthy

Status Synced menunjukkan bahwa kondisi aplikasi pada cluster sesuai dengan desired state pada repository. Status Healthy menunjukkan bahwa resource aplikasi berada dalam kondisi yang dianggap sehat oleh ArgoCD.

Verifikasi Deployment

Resource Deployment pada namespace default dapat diperiksa dengan perintah:

sudo kubectl get deployments -n default

Pemeriksaan ini digunakan untuk memastikan Deployment yang dihasilkan dari Helm Chart telah dibuat dan memiliki jumlah replica yang sesuai.

Verifikasi Pod

Setelah Deployment berhasil, Pod aplikasi diperiksa menggunakan:

sudo kubectl get pods -n default -o wide

Pod aplikasi yang berhasil dijalankan harus berada dalam kondisi:

Running

Informasi -o wide juga dapat digunakan untuk melihat alamat IP Pod dan node tempat Pod tersebut berjalan.

Verifikasi Service

Resource Service dapat diperiksa menggunakan:

sudo kubectl get services -n default

Service digunakan sebagai endpoint jaringan untuk aplikasi di dalam cluster. Resource ini juga memungkinkan komunikasi antar aplikasi tanpa harus menggunakan alamat IP Pod secara langsung.

Alur Update Image

Sebagai contoh, aplikasi sebelumnya menggunakan image Golang versi:

golang:v0.1.9

Kemudian developer membuat versi baru:

golang:v0.1.10

Perubahan dimulai dari source code aplikasi yang diperbarui dan dibuat commit pada repository. Setelah itu dibuat Git Tag v0.1.10. GitLab CI/CD kemudian menjalankan proses build Docker image dengan tag v0.1.10 dan mengirimkan image tersebut ke GitLab Container Registry.

Setelah image tersedia, konfigurasi values.yaml pada repository Helm diperbarui agar menggunakan v0.1.10. Perubahan tersebut kemudian dibuat commit dan di-push ke repository. ArgoCD mendeteksi perubahan pada repository Helm dan membandingkannya dengan kondisi yang sedang berjalan pada cluster. Karena Automated Sync aktif, ArgoCD melakukan synchronization secara otomatis. Kubernetes kemudian menggunakan image v0.1.10 untuk menjalankan Pod baru. Setelah proses rollout selesai, Pod aplikasi akan berjalan menggunakan image versi terbaru.

Konsep Penting ArgoCD

Hal penting dalam implementasi GitOps adalah ArgoCD tidak mengambil image terbaru secara langsung dari registry dan kemudian melakukan deployment secara otomatis. ArgoCD bekerja berdasarkan desired state yang berada pada repository Git. Sebagai contoh, jika values.yaml berisi:

image:

tag: v0.1.10

maka nilai tersebut menjadi referensi bagi ArgoCD untuk menentukan versi image yang harus dijalankan. Jika image v0.1.11 tersedia di registry tetapi values.yaml masih menggunakan v0.1.10, ArgoCD tidak akan secara otomatis mengganti aplikasi menjadi v0.1.11. Agar aplikasi menggunakan versi baru, konfigurasi Helm harus diperbarui menjadi v0.1.11, kemudian perubahan tersebut harus di-commit dan di-push ke repository Git. Hal inilah yang membedakan pendekatan GitOps dari mekanisme deployment yang hanya mengandalkan keberadaan image terbaru pada registry.

Kondisi Akhir ArgoCD

Setelah proses deployment berhasil, Application ArgoCD:

image-versioning-argocd

diharapkan memiliki kondisi:

SYNC STATUS : Synced

HEALTH      : Healthy

AUTO SYNC   : Enabled

PRUNE       : Enabled

SELF HEAL   : Enabled

Resource aplikasi yang dikelola dapat mencakup beberapa Service dan Deployment, seperti franken-php, frontend, dan kelas-02. Resource tersebut dapat diperiksa secara langsung menggunakan:

sudo kubectl get deployments -n default

dan:

sudo kubectl get services -n default

Dengan demikian, status pada ArgoCD dapat digunakan untuk melihat kondisi aplikasi secara keseluruhan, sedangkan kubectl dapat digunakan untuk melakukan pemeriksaan resource Kubernetes secara lebih detail.

Hasil Implementasi ArgoCD

Implementasi ArgoCD berhasil menerapkan konsep GitOps pada cluster K3s. GitLab CI/CD digunakan untuk melakukan proses build Docker image dan mengirimkannya ke GitLab Container Registry. Setelah image tersedia, versi image yang digunakan aplikasi ditentukan melalui file values.yaml pada repository Helm.

Perubahan konfigurasi Helm kemudian disimpan melalui Git commit dan Git push. ArgoCD yang memonitor repository tersebut akan mendeteksi perubahan desired state dan melakukan synchronization ke cluster K3s.

Dengan mekanisme Automated Sync, proses deployment tidak lagi dilakukan secara langsung oleh pipeline menggunakan kubectl apply. ArgoCD menjadi komponen yang bertanggung jawab untuk menjaga agar kondisi cluster sesuai dengan konfigurasi yang tersimpan di Git.

Kesimpulan K3s ArgoCD

Implementasi ArgoCD berhasil menerapkan deployment berbasis GitOps pada Kubernetes K3s. GitLab CI/CD digunakan untuk membangun Docker image dan mengirimkannya ke GitLab Container Registry. Repository Helm digunakan untuk menyimpan konfigurasi deployment, termasuk repository dan versi image yang harus digunakan oleh aplikasi.

Ketika versi image diperbarui, perubahan dilakukan pada values.yaml, kemudian di-commit dan di-push ke repository Git. ArgoCD mendeteksi perubahan tersebut dan melakukan synchronization secara otomatis karena Automated Sync telah diaktifkan.

Berbeda dengan metode K3s menggunakan kubectl, pada metode ArgoCD pipeline tidak melakukan deployment aplikasi secara langsung. Pipeline berfokus pada proses build dan penyimpanan image, sedangkan proses deployment dikendalikan oleh ArgoCD berdasarkan desired state yang tersimpan pada repository Git. Dengan pendekatan ini, seluruh perubahan konfigurasi deployment memiliki riwayat pada Git dan kondisi aplikasi pada cluster dapat terus disesuaikan dengan konfigurasi yang telah ditentukan pada repository.

 

/ Stay Connected /

802

Ikuti

1

Ikuti

169

Ikuti

13

Ikuti

/ Media Promosi /

Pasang Iklan & Promosikan Brand Anda di Garap Media!

Tampilkan produk, layanan, atau acara Anda di halaman kami dan jangkau ribuan pembaca setiap hari. Hubungi kami untuk penawaran kerja sama dan paket promosi terbaik.

/ Berita Lainnya /