Cara Membuat Klaster Kubernetes Pertama Anda dan Melakukan Deploy Aplikasi (Panduan Lengkap)
Kubernetes, atau sering disebut K8s, telah menjadi standar de facto untuk orkestrasi kontainer. Kemampuannya untuk mengotomatiskan deployment, penskalaan, dan pengelolaan aplikasi berbasis kontainer membuatnya tak ternilai harganya bagi pengembang dan operator. Jika Anda baru mengenal Kubernetes, proses menyiapkan klaster pertama Anda dan melakukan deployment aplikasi mungkin tampak menakutkan. Panduan komprehensif ini akan memandu Anda melalui setiap langkah, memastikan Anda memiliki pemahaman yang kuat tentang prinsip-prinsip dasar Kubernetes.
Mengapa Kubernetes?
Sebelum kita terjun ke detail teknis, mari kita pahami mengapa Kubernetes begitu penting:
- Otomatisasi: Kubernetes mengotomatiskan deployment, penskalaan, dan pemeliharaan aplikasi, mengurangi intervensi manual dan kesalahan.
- Portabilitas: Anda dapat menjalankan Kubernetes di berbagai infrastruktur, termasuk cloud publik, cloud pribadi, dan lingkungan on-premise.
- Skalabilitas: Kubernetes secara dinamis menskalakan aplikasi Anda berdasarkan permintaan, memastikan kinerja optimal bahkan selama jam sibuk.
- Ketersediaan Tinggi: Kubernetes secara otomatis memulai ulang kontainer yang gagal dan meratakan lalu lintas di seluruh instans yang sehat, memastikan ketersediaan aplikasi tinggi.
- Efisiensi Sumber Daya: Kubernetes secara optimal menggunakan sumber daya komputasi Anda dengan menempatkan kontainer pada node yang paling sesuai.
Prasyarat
Sebelum memulai, pastikan Anda memiliki prasyarat berikut:
- Akun Cloud: Akun dengan penyedia cloud seperti Google Cloud Platform (GCP), Amazon Web Services (AWS), atau Microsoft Azure. (Dalam panduan ini, kita akan menggunakan GCP sebagai contoh.)
- kubectl: Alat baris perintah Kubernetes (kubectl) diinstal dan dikonfigurasi di mesin lokal Anda. Anda dapat mengunduh dan menginstalnya dari situs web Kubernetes.
- gcloud CLI (Jika menggunakan GCP): Google Cloud SDK diinstal dan dikonfigurasi dengan akun GCP Anda. Anda dapat mengunduh dan menginstalnya dari situs web Google Cloud.
- Pemahaman Dasar Kontainer: Pengetahuan dasar tentang kontainer, Docker, dan cara membuat image Docker.
Langkah 1: Memilih Opsi Klaster Kubernetes
Ada beberapa cara untuk membuat klaster Kubernetes. Opsi yang paling umum termasuk:
- Layanan Kubernetes Terkelola: Ini adalah cara termudah dan paling direkomendasikan untuk memulai. Penyedia cloud seperti GCP (GKE), AWS (EKS), dan Azure (AKS) menawarkan layanan Kubernetes terkelola yang menangani kompleksitas pengelolaan infrastruktur yang mendasarinya.
- kubeadm: Alat baris perintah yang memungkinkan Anda menyiapkan klaster Kubernetes secara manual di mesin virtual atau server bare metal. Ini memberi Anda lebih banyak kontrol tetapi membutuhkan lebih banyak usaha.
- Minikube: Alat untuk menjalankan klaster Kubernetes satu node secara lokal di mesin Anda. Ini ideal untuk pengembangan dan pengujian.
- Kind (Kubernetes IN Docker): Alat untuk menjalankan klaster Kubernetes menggunakan kontainer Docker. Ideal untuk pengujian dan CI.
Dalam tutorial ini, kita akan fokus menggunakan Google Kubernetes Engine (GKE), layanan Kubernetes terkelola dari Google Cloud Platform, karena kemudahan penggunaan dan skalabilitasnya. Namun, prinsipnya sebagian besar sama untuk layanan Kubernetes terkelola lainnya.
Langkah 2: Membuat Klaster Kubernetes Menggunakan GKE
- Aktifkan Google Kubernetes Engine (GKE) API:
- Buka Google Cloud Console.
- Cari “Kubernetes Engine API” dan aktifkan.
- Buat Klaster GKE:
- Anda dapat membuat klaster menggunakan Google Cloud Console atau menggunakan gcloud CLI.
- Menggunakan Google Cloud Console:
- Buka Halaman Klaster Kubernetes di Google Cloud Console.
- Klik “Buat Klaster”.
- Pilih templat klaster (misalnya, “Standar”).
- Konfigurasikan klaster Anda:
- Nama: Berikan nama untuk klaster Anda (misalnya, “my-first-cluster”).
- Zona atau Wilayah: Pilih zona atau wilayah tempat Anda ingin men-deploy klaster Anda. Pilih zona yang dekat dengan pengguna Anda.
- Versi Kubernetes: Pilih versi Kubernetes terbaru yang stabil.
- Ukuran Node: Pilih ukuran VM untuk node Anda (misalnya, “e2-medium” untuk tujuan pengujian).
- Jumlah Node: Tentukan jumlah node yang Anda inginkan di klaster Anda. Mulailah dengan 2-3 node untuk tujuan pengujian.
- Anda dapat menyesuaikan konfigurasi lanjutan seperti jaringan, keamanan, dan fitur lainnya.
- Klik “Buat”.
- Menggunakan gcloud CLI:
- Buka terminal Anda dan jalankan perintah berikut (ganti zona, nama klaster, dan nomor node sesuai kebutuhan):
gcloud container clusters create my-first-cluster \
--zone us-central1-a \
--num-nodes 3 \
--machine-type e2-medium
- Dapatkan Kredensial Klaster:
- Setelah klaster dibuat, Anda perlu mendapatkan kredensial untuk berinteraksi dengannya menggunakan kubectl.
- Menggunakan Google Cloud Console:
- Di halaman Klaster Kubernetes, klik nama klaster Anda.
- Klik “Hubungkan”.
- Ikuti instruksi untuk menjalankan perintah
gcloud
yang disediakan untuk mengkonfigurasikubectl
.
- Menggunakan gcloud CLI:
- Jalankan perintah berikut (ganti zona dan nama klaster sesuai kebutuhan):
gcloud container clusters get-credentials my-first-cluster --zone us-central1-a
- Verifikasi Koneksi Klaster:
- Setelah kredensial dikonfigurasi, verifikasi bahwa
kubectl
dapat terhubung ke klaster Anda dengan menjalankan perintah berikut: - Anda seharusnya melihat daftar node di klaster Anda.
kubectl get nodes
- Setelah kredensial dikonfigurasi, verifikasi bahwa
Langkah 3: Melakukan Deployment Aplikasi
Sekarang setelah Anda memiliki klaster Kubernetes yang berfungsi, Anda dapat mulai melakukan deployment aplikasi. Kita akan melakukan deployment aplikasi web sederhana menggunakan image Docker.
- Buat File Deployment:
- File deployment menentukan bagaimana aplikasi Anda harus di-deploy ke klaster Kubernetes. Ini menentukan image Docker, jumlah replika, port, dan pengaturan lainnya.
- Buat file bernama
deployment.yaml
dengan konten berikut (gantiYOUR_DOCKER_IMAGE
dengan nama image Docker Anda): - Penjelasan:
apiVersion: apps/v1
: Menentukan versi API Kubernetes yang digunakan.kind: Deployment
: Menentukan bahwa kita membuat objek Deployment.metadata: name: my-app-deployment
: Memberikan nama untuk Deployment.spec: replicas: 3
: Menentukan bahwa kita ingin menjalankan 3 replika aplikasi kita.spec: selector: matchLabels: app: my-app
: Memilih Pod yang termasuk dalam Deployment ini.spec: template: metadata: labels: app: my-app
: Mendefinisikan label untuk Pod yang akan dibuat oleh Deployment.spec: template: spec: containers:
: Mendefinisikan kontainer yang akan dijalankan di dalam Pod.spec: template: spec: containers: name: my-app
: Memberikan nama untuk kontainer.spec: template: spec: containers: image: YOUR_DOCKER_IMAGE
: Menentukan image Docker yang akan digunakan untuk kontainer.spec: template: spec: containers: ports: containerPort: 80
: Membuka port 80 pada kontainer.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: YOUR_DOCKER_IMAGE
ports:
- containerPort: 80 - Buat File Service:
- File service mengekspos aplikasi Anda ke dunia luar. Ini membuat titik akhir yang dapat diakses oleh pengguna.
- Buat file bernama
service.yaml
dengan konten berikut: - Penjelasan:
apiVersion: v1
: Menentukan versi API Kubernetes yang digunakan.kind: Service
: Menentukan bahwa kita membuat objek Service.metadata: name: my-app-service
: Memberikan nama untuk Service.spec: selector: app: my-app
: Memilih Pod yang akan diekspos oleh Service ini.spec: ports: protocol: TCP
: Menentukan protokol yang digunakan untuk Service.spec: ports: port: 80
: Menentukan port yang akan diekspos oleh Service.spec: ports: targetPort: 80
: Menentukan port di dalam Pod yang akan diteruskan oleh Service.spec: type: LoadBalancer
: Membuat penyeimbang beban untuk Service, sehingga dapat diakses dari luar klaster.
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer - Deploy Aplikasi:
- Gunakan perintah
kubectl
untuk menerapkan deployment dan service:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
- Gunakan perintah
- Periksa Status Deployment:
- Periksa apakah deployment dan service berhasil dibuat:
kubectl get deployments
kubectl get services
- Akses Aplikasi:
- Setelah service dibuat, Kubernetes akan menyediakan alamat IP eksternal yang dapat Anda gunakan untuk mengakses aplikasi Anda.
- Dapatkan alamat IP eksternal:
- Cari di kolom EXTERNAL-IP. Ini mungkin membutuhkan waktu beberapa menit untuk muncul.
- Buka alamat IP eksternal di browser web Anda. Anda seharusnya melihat aplikasi Anda berjalan.
kubectl get service my-app-service
Langkah 4: Menskalakan Aplikasi Anda
Salah satu keuntungan utama Kubernetes adalah kemampuannya untuk secara otomatis menskalakan aplikasi Anda berdasarkan permintaan. Anda dapat menskalakan deployment Anda dengan mudah menggunakan perintah kubectl scale
.
- Skalakan Deployment:
- Untuk meningkatkan jumlah replika menjadi 5, jalankan perintah berikut:
kubectl scale deployment my-app-deployment --replicas=5
- Verifikasi Penskalaan:
- Periksa status deployment untuk memastikan bahwa jumlah replika telah diperbarui:
kubectl get deployments
- Autoscaling Horizontal Pod (HPA):
- HPA secara otomatis menyesuaikan jumlah Pod dalam sebuah Deployment berdasarkan metrik penggunaan CPU.
- Pertama, pastikan metric server diinstal di klaster Anda. Ikuti instruksi di repositori GitHub metric server.
- Buat HPA:
- Perintah di atas membuat HPA yang akan menjaga rata-rata penggunaan CPU di semua Pod menjadi 50%, dan akan menskalakan deployment antara 1 dan 10 replika.
kubectl autoscale deployment my-app-deployment --cpu-percent=50 --min=1 --max=10
Langkah 5: Memperbarui Aplikasi Anda
Kubernetes menyediakan pembaruan yang mulus dan tanpa henti untuk aplikasi Anda. Anda dapat memperbarui image Docker aplikasi Anda dengan memodifikasi file deployment dan menerapkan perubahan.
- Perbarui File Deployment:
- Buka file
deployment.yaml
dan perbarui barisimage
dengan versi image Docker baru.
Misalnya, jika image baru Anda adalah
your-docker-repo/my-app:v2
, perbarui file Anda sebagai berikut:apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: your-docker-repo/my-app:v2
ports:
- containerPort: 80 - Buka file
- Terapkan Perubahan:
- Terapkan perubahan ke klaster Anda:
kubectl apply -f deployment.yaml
- Periksa Rollout:
- Kubernetes akan melakukan rollout pembaruan secara bertahap, mengganti Pod lama dengan Pod baru satu per satu. Anda dapat memantau progres rollout:
kubectl rollout status deployment/my-app-deployment
Langkah 6: Membersihkan Sumber Daya
Setelah Anda selesai dengan tutorial ini, penting untuk membersihkan sumber daya yang telah Anda buat untuk menghindari biaya yang tidak perlu.
- Hapus Service:
kubectl delete service my-app-service
- Hapus Deployment:
kubectl delete deployment my-app-deployment
- Hapus Klaster GKE:
- Menggunakan Google Cloud Console:
- Buka Halaman Klaster Kubernetes.
- Pilih klaster Anda.
- Klik “Hapus”.
- Menggunakan gcloud CLI:
gcloud container clusters delete my-first-cluster --zone us-central1-a
- Menggunakan Google Cloud Console:
Praktik Terbaik Kubernetes
Berikut adalah beberapa praktik terbaik untuk digunakan dengan Kubernetes:
- Gunakan Namespace: Atur sumber daya Anda ke dalam namespace logis untuk isolasi dan pengelolaan.
- Gunakan Liveness dan Readiness Probes: Konfigurasikan liveness dan readiness probes untuk memastikan bahwa Kubernetes dapat secara otomatis mendeteksi dan memulihkan dari masalah aplikasi.
- Konfigurasikan Batas Sumber Daya: Tentukan batas sumber daya (CPU dan memori) untuk kontainer Anda untuk mencegah mereka menghabiskan terlalu banyak sumber daya.
- Gunakan Rahasia untuk Data Sensitif: Simpan data sensitif seperti kredensial dan kunci API dalam Rahasia Kubernetes.
- Otomatiskan Deployment: Gunakan alat CI/CD untuk mengotomatiskan deployment aplikasi Anda ke Kubernetes.
- Pantau Klaster Anda: Implementasikan pemantauan dan logging untuk melacak kesehatan dan kinerja klaster Anda.
Pemecahan Masalah Umum
Berikut adalah beberapa masalah umum yang mungkin Anda temui saat bekerja dengan Kubernetes dan cara mengatasinya:
- Kontainer Tidak Dapat Dimulai: Periksa log kontainer untuk kesalahan apa pun. Pastikan image Docker Anda ada dan dapat diakses.
- Service Tidak Dapat Diakses: Pastikan service dikonfigurasi dengan benar dan bahwa alamat IP eksternal telah diprovisi. Periksa aturan firewall apa pun yang mungkin memblokir lalu lintas.
- Masalah Penskalaan: Periksa batas sumber daya kontainer Anda. Pastikan klaster Anda memiliki sumber daya yang cukup untuk mengakomodasi replika yang diskalakan.
- Masalah Rollout: Periksa status rollout untuk kesalahan apa pun. Pastikan image Docker baru valid dan dapat di-deploy.
Kesimpulan
Membuat klaster Kubernetes pertama Anda dan melakukan deployment aplikasi bisa jadi merupakan tugas yang menantang, tetapi dengan panduan langkah demi langkah ini, Anda seharusnya dapat menyiapkan klaster yang berfungsi dan menjalankan aplikasi Anda dalam waktu singkat. Ingatlah untuk bereksperimen, belajar, dan memanfaatkan sumber daya yang tersedia untuk menjadi mahir dalam Kubernetes. Selamat melakukan deployment!
Sumber Daya Tambahan
Berikut adalah beberapa sumber daya tambahan yang mungkin bermanfaat:
“`