Memakai Job Di Kubernetes

Job adalah sebuah resource di Kubernetes yang dipakai untuk mengerjakan sebuah tugas hingga selesai. Berbeda dengan Service yang selalu hidup, begitu tugas Job selesai, pod yang berkaitannya dengannya akan dimatikan. Dengan demikian, Job cocok untuk pekerjaan infrastruktur yang konsisten namun hanya perlu dilakukan sesekali saja seperti backup dan restore database. Sebagai latihan, saya akan membuat sebuah Job untuk melakukan konfigurasi Keycloak seperti membuat realm, client dan user baru.

Kategori: DevOps Tags: Kubernetes

Memakai FSCrawler Untuk Mencari Teks Di Gambar

John adalah seorang hacker yang belakangan ini sangat tertarik pada Jessica. Selama beberapa bulan terakhir, dia membuat scraper, backdoor, dan memanfaatkan berbagai exploit lainnya untuk mendapatkan informasi mengenai Jessica. “Apa hobinya? Apa makanan yang dia suka? Apa warna favoritnya?” pikir John tanpa sadar bahwa obsesinya sudah melanggar privasi Jessica. Dia segera men-klik sebuah folder yang berisi seluruh informasi mengenai Jessica yang sudah dikumpulkannya selama setahun. Awalnya John penuh dengan rasa penasaran dan bahagia menelusuri setiap file gambar, video, PDF, dan dokumen lainnya satu per satu. Namun setelah 15 menit berlalu, John mengeluh, “Banyak sekali file-nya, tidak mungkin aku membuka satu per satu. Aku hanya ingin lihat yang penting saja.”

Kategori: DevOps Tags: SearchEngine Docker

Menerapkan GitOps Di Kubernetes Dengan kpt

GitOps adalah sebuah konsep dimana aplikasi yang di-deploy diwakili oleh sebuah repository Git. Perubahan pada infrastruktur harus dilakukan dengan menambahkan commit baru ke repository Git tersebut yang nantinya akan diaplikasikan ke server (infrastructure as code). Dengan demikian, seluruh riwayat perubahan pada infrastruktur dapat dilihat dari riwayat commit di repository. Salah satu hal penting di GitOps adalah tidak melakukan perubahan secara langsung ke server atau perubahan manual lainnya yang tidak terdokumentasikan di repository. Pada tulisan ini, saya akan menggunakan kpt untuk mempermudah menerapkan GitOps.

Kategori: DevOps Tags: Kubernetes

Memakai GitHub Actions dan Github Packages Untuk Mengelola Image Docker

Salah satu tugas yang umum dilakukan oleh DevOps engineer adalah mengotomatisasikan proses building kode program yang dibuat oleh programmer. Misalnya, saat ada commit baru di branch master, Continuous Integration (CI) platform seperti Jenkins akan bekerja menghasilkan artifact yang dibuat dari kode program terbaru (misalnya file Jar/War untuk aplikasi Java, Python modules untuk aplikasi Python, dan sebagainya). Khusus untuk aplikasi yang dijalankan di cluster Kubernetes, artifact yang dihasilkan adalah sebuah image Docker yang biasanya dibuat berdasarkan isi file Dockerfile. Pada tulisan ini, saya akan mencoba menggunakan Github Actions sebagai CI platform untuk menghasilkan image Docker dan mempublikasikannya di GitHub Packages sehingga dapat saya pakai di cluster Kubernetes nantinya. Kedua fitur tersebut dapat dipakai tanpa biaya dengan batas eksekusi 2.000 menit untuk GitHub Actions dan penyimpanan 500 MB untuk Github Packages.

Kategori: DevOps Tags: Docker Kubernetes

Memakai Ingress Controller Di Kubernetes

Pada tulisan sebelumnya, saya menggunakan IP publik untuk mengakses service melalui load balancer eksternal dengan menggunakan tipe LoadBalancer. Kali ini, saya akan mencoba menggunakan ingress untuk mendapatkan lebih banyak kendali lagi. Seperti biasa, saya akan menggunakan minikube di komputer lokal. Kubernetes tidak dilengkapi dengan ingress controller sehingga langkah pertama adalah memilih salah satu ingress controller yang hendak dipakai. Kode program untuk ingress controller AWS, GCE dan NGINX secara resmi dikelola oleh tim Kubernetes; ada juga ingress controller lainnya dari pihak ketiga yang daftar selengkapnya dapat dijumpai di https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/#additional-controllers.

Kategori: DevOps Tags: Kubernetes

Pengalamatan Pod dan Service Di Kubernetes

Kubernetes bekerja pada sistem terdistribusi yang terdiri atas satu atau lebih server yang disebut node. Untuk mencobanya di komputer lokal, saya tidak perlu sampai membangun home networking. Saya bisa menggunakan minikube yang merupakan implementasi ringan dari Kubernetes yang memang ditujukan untuk dipakai di komputer lokal. Minikube dapat menggunakan hypervisor dan virtual machine untuk men-simulasi-kan node Kubernetes di komputer yang sama. Khusus untuk sistem operasi Linux, minikube juga dapat langsung menggunakan Docker untuk menciptakan node Kubernetes tanpa menggunakan VM. Walaupun konsep “memakai container Docker untuk menjalankan Kubernetes yang akan mengelola container Docker lainnya” terdengar rekursif, ia menawarkan kinerja yang lebih baik.

Kategori: DevOps Tags: Kubernetes

Belajar Melihat Arsitektur Software

Pada suatu hari, saat berkunjung ke dokter umum, saya sudah mendapatkan resep obat hanya dalam beberapa menit. Bukankah setiap pasien adalah unik? Sang dokter tidak memeriksa apa aktifitas saya selama beberapa hari terakhir, mengetahui apa saja yang saya konsumsi, termasuk menanyakan alergi, dan sebagainya. Namun, bila sang dokter melakukan hal ini untuk seluruh pasiennya, saya tidak akan pernah mendapatkan antrian konsultasi. Sepertinya dokter tersebut punya preset resep tertentu berdasarkan tipe pasien dan penyakit yang sedang populer. Begitu juga saya tidak begitu berbeda: disaat saya harus merancang aplikasi dari nol, saya sudah punya beberapa “setelan” standar. Pada artikel ini, saya akan membahas dua arsitektur di benak saya: Kubernetes native dan cloud native. Dua arsitektur ini saling bertolak belakang sehingga mudah untuk melihat perbedaanya. Saya juga telah menyediakan contoh implementasi Kubernetes native dapat dilihat di GitHub latihan-k8s dan contoh implementasi cloud native di GitHub latihan-cloud-native.

Konfigurasi Jaringan Di Ubuntu Dengan Netplan

Pada suatu hari, saya ingin melakukan konfigurasi sederhana di server Ubuntu. Saya ingin mengubah yang sebelumnya menggunakan DHCP menjadi alamat statis dan memakai DNS yang saya tentukan. Seperti biasanya, saya segera melakukan pencarian di Google. Namun, semakin banyak membaca hasil pencarian yang muncul, saya semakin bingung apa yang harus dilakukan. Saya menemukan beberapa kata kunci seperti NetworkManager, systemd-networkd, dan Netplan, namun tidak mendapatkan penjelasan yang berarti mengenai seperti apa hubungan mereka dan mana yang harus saya pakai. Saya pun melakukan sedikit riset untuk mencari tahu jawaban ini.

Kategori: Network Tags: Ubuntu