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:

  1. 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.

  2. 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.

Tampilan Status Kluster EKS yang Berhasil Dibuat pada 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:

  1. Clusters: Berisi alamat server API kluster serta sertifikat TLS dasar.

  2. Contexts: Menghubungkan kluster, nama pengguna (user), dan namespace. Bagian ini memudahkan Anda berpindah kluster dengan cepat.

  3. 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.

 

 

0 CommentsClose Comments

Leave a comment

Newsletter Subscribe

Get the Latest Posts & Articles in Your Email

We Promise Not to Send Spam:)