Panduan Instalasi EKS dengan Terraform dan Membangun Lingkungan Manajemen Lokal
Bayangkan jika Anda ditunjuk sebagai penanggung jawab Kubernetes untuk menangani instalasi Amazon EKS. Bagaimana cara terbaik untuk memasang EKS tersebut? Mari kita evaluasi bagaimana proses ini biasa dijalankan sebelumnya. Selain itu, mari kita diskusikan cara terbaik untuk ke depannya.
Instalasi EKS umumnya dapat dijalankan melalui antarmuka visual (GUI) AWS Console atau menggunakan perintah command-line eksctl. Namun, pada infrastruktur cloud publik modern, Terraform menjadi pilihan yang sangat populer.
Terraform adalah perangkat otomatisasi infrastruktur (Infrastructure as Code / IaC). Alat ini memfasilitasi provisioning dan pengelolaan sumber daya pada cloud maupun on-premise menggunakan kode. Dengan demikian, Anda dapat mengotomatisasi pekerjaan berulang, melacak riwayat perubahan, serta menjaga konsistensi arsitektur.
Terraform memanfaatkan bahasa deklaratif untuk mendefinisikan sumber daya. Oleh karena itu, Anda dapat membentuk status infrastruktur sesuai target yang diinginkan.
Keuntungan Menggunakan Kode untuk Instalasi Kubernetes
Melakukan instalasi EKS dengan Terraform memberikan berbagai keuntungan operasional nyata:
-
Pengelolaan Infrastruktur Berbasis Kode (IaC)
Kode mempermudah tim melakukan code review sebelum implementasi untuk menemukan potensi kesalahan. Selain itu, Anda dapat memanfaatkan Git dan GitHub untuk version control agar setiap perubahan mudah terlacak.
-
Reusabilitas dan Kemudahan Pemeliharaan
Di lapangan, operasional nyata biasanya membutuhkan beberapa kluster sekaligus, seperti dev, staging, dan production. Ketika Anda perlu menduplikasi kluster yang sama, Anda cukup menggunakan ulang kode yang sudah ada sehingga efisiensi kerja meningkat pesat.
Terdapat berbagai cara membuat EKS melalui Terraform. Salah satu pendekatan terbaik adalah memanfaatkan modul EKS resmi. Modul ini membungkus VPC, Security Group, dan Subnet sehingga Anda tidak perlu menulis kode konfigurasi secara berulang dari nol.
Langkah Instalasi EKS dengan Terraform
Sekarang, mari kita pelajari kode instalasi EKS yang diterapkan pada lingkungan kerja nyata. Anda dapat mengunduh kode tersebut langsung dari repositori GitHub penulis.
Jika Anda baru mengenal EKS, baris kode Terraform mungkin terlihat asing. Namun, Anda cukup memahami istilah dasarnya terlebih dahulu. Pemahaman menyeluruh akan terbentuk dengan sendirinya seiring praktik langsung.
Pertama, unduh kode ke komputer lokal Anda menggunakan perintah git clone:
Lvi-Jerry-LX2Y49939H:k8s jerry$ git clone https://github.com/junghoon2/k8s-class.git Cloning into 'k8s-class'... remote: Enumerating objects: 5021, done. remote: Counting objects: 100% (66/66), done. remote: Compressing objects: 100% (8/8), done. remote: Total 5021 (delta 60), reused 58 (delta 58), pack-reused 4955 Receiving objects: 100% (5021/5021), 4.78 MiB | 12.89 MiB/s, done. Resolving deltas: 100% (2232/2232), done.
Selanjutnya, buka direktori terraform-eks untuk memeriksa susunan berkas:
Lvi-Jerry-LX2Y49939H:k8s jerry$ cd k8s-class/terraform-eks/ Lvi-Jerry-LX2Y49939H:terraform-eks jerry$ ls eks-addon.tf eks-cluster.tf irsa-role.tf karpenter.tf main.tf outputs.tf vpc.tf
Konfigurasi Variabel Lokal (locals)
Mari kita bedah pengaturan variabel lokal pada berkas main.tf. Blok locals mendefinisikan nilai yang hanya berlaku di dalam modul tersebut:
locals {
name = "singapore-test"
cluster_version = "1.26"
region = "ap-southeast-1"
vpc_cidr = "10.110.0.0/16"
azs = slice(data.aws_availability_zones.available.names, 0, 3)
tags = {
env = "dev"
user = "jerry"
}
}
Berikut adalah penjelasan fungsi setiap parameter konfigurasi di atas:
-
name: Nama kluster yang bersifat menjelaskan dirinya sendiri (self-explaining). Standar penamaan yang disarankan adalah
{Nama Produk}-{Region}-{Environment}. -
region: Wilayah AWS yang digunakan. Contoh ini memilih
ap-southeast-1(Singapura). -
vpc_cidr: Rentang alamat IP VPC khusus. Penulis merekomendasikan pembuatan VPC terpisah untuk EKS agar tidak terjadi kekurangan IP akibat kepadatan Pod.
-
azs: Membagi alokasi jaringan ke dalam 3 Availability Zone demi menjamin ketersediaan tinggi (high availability).
Konfigurasi Modul EKS dan Karpenter
Berikutnya, periksa konfigurasi kluster pada berkas eks-cluster.tf:
module "eks" {
cluster_endpoint_public_access = true
cluster_addons = {
coredns = {
preserve = true
most_recent = true
timeouts = {
create = "25m"
delete = "10m"
}
}
kube-proxy = {
most_recent = true
}
vpc-cni = {
most_recent = true
}
}
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
...
Konfigurasi penting yang perlu diperhatikan meliputi:
-
cluster_addons: Memudahkan aktivasi komponen dasar seperti CoreDNS, Kube-Proxy, dan VPC-CNI secara otomatis.
-
subnet_ids: Subnet privat tempat Pod aplikasi dijalankan demi keamanan jaringan.
-
Karpenter: Komponen penskalaan otomatis node yang efisien. Karpenter mengoptimalkan kapasitas sumber daya komputasi secara dinamis sesuai kebutuhan beban kerja.
Setelah alokasi subnet CIDR selesai dipetakan, Anda dapat melihat pembagian alamat IP di AWS Console.

Menjalankan Perintah Eksekusi Terraform
Setelah seluruh berkas siap, jalankan tahapan perintah Terraform berikut di terminal:
$ tf init $ tf plan -out planfile $ tf apply planfile
Proses instalasi membutuhkan waktu sekitar 20 menit. Setelah proses selesai, periksa status kluster Anda pada menu AWS EKS Console.


Jika status kluster sudah menunjukkan status aktif, proses instalasi EKS dengan Terraform telah berhasil.
Konfigurasi Lingkungan Kubectl dan Berkas Kubeconfig Lokal
Untuk mengelola kluster, Anda memerlukan perangkat command-line kubectl.
Bagi pengguna macOS, instalasi dapat dilakukan dengan mudah via Homebrew:
$ brew install kubectl $ kubectl version --client
Bagi pengguna Ubuntu atau WSL Ubuntu, Anda juga dapat menginstal kubectl melalui Homebrew atau menggunakan manajer paket apt:
$ sudo apt-get update $ sudo apt-get install -y apt-transport-https ca-certificates curl $ sudo apt-get update $ sudo apt-get install -y kubectl
Selanjutnya, tambahkan fitur auto-completion dan alias praktis ke dalam berkas ~/.bashrc:
echo 'source <(kubectl completion bash)' >>~/.bashrc echo 'alias k=kubectl' >>~/.bashrc echo 'complete -o default -F __start_kubectl k' >>~/.bashrc alias kgp='kubectl get pods -o wide' alias kgn='kubectl get nodes -o wide' alias kgs='kubectl get svc -o wide' alias kgv='kubectl get pvc -o wide'
Struktur Berkas Konfigurasi (~/.kube/config)
Konfigurasi pada berkas ~/.kube/config bertugas menghubungkan mesin lokal Anda dengan kluster remote. Berkas ini terbagi menjadi 3 bagian utama:
-
Clusters: Berisi alamat server API kluster serta sertifikat TLS dasar.
-
Contexts: Menghubungkan kluster, nama pengguna (user), dan namespace. Bagian ini memudahkan Anda berpindah kluster dengan cepat.
-
Users: Berisi kredensial autentikasi klien untuk berkomunikasi dengan API Kubernetes.
Setelah mendaftarkan kluster bernama switch-singapore-test, uji koneksi kluster dengan menjalankan perintah berikut:
$ (⎈ |switch-singapore-test:default) kubectl get nodes NAME STATUS ROLES AGE VERSION ip-10-110-9-40.ap-southeast-1.compute.internal Ready 39d v1.26.4-eks-0a21954
Sebagai langkah verifikasi akhir, jalankan kontainer Nginx sederhana:
$ (⎈ |switch-singapore-test:default) k run nginx --image=nginx pod/nginx created $ (⎈ |switch-singapore-test:default) k get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 29s
Ringkasan Teknis
Penerapan instalasi EKS dengan Terraform memberikan konsistensi infrastruktur yang tinggi bagi tim pengembang. Dengan mengombinasikan otomatisasi kode dan manajemen lokal kubectl, Anda dapat membangun fondasi kluster yang siap dipantau secara komprehensif menggunakan platform JENNIFER APM. Pada panduan berikutnya, kita akan membahas integrasi sistem GitOps menggunakan Argo CD.
