Panduan Lengkap: Cara Instalasi EKS di AWS Menggunakan Terraform

Panduan Lengkap: Cara Instalasi EKS di AWS Menggunakan Terraform

Artikel Lainnya
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

1. Keuntungan Menggunakan Kode untuk Instalasi Kubernetes

Bayangkan pembaca artikel ini menjadi penanggung jawab Kubernetes dan diberi tugas untuk melakukan cara instalasi EKS dengan Terraform. Bagaimana cara terbaik untuk melakukannya? Mari kita pikirkan bagaimana proses instalasi telah dilakukan hingga saat ini dan apa pendekatan terbaik yang bisa diterapkan ke depannya.

EKS dapat diinstal melalui konsol Amazon menggunakan antarmuka GUI (Graphical User Interface) atau dengan perintah eksctl. Pendekatan ini cukup nyaman karena memungkinkan instalasi dilakukan dengan relatif mudah. Namun, metode ini memiliki kelemahan dari sisi penggunaan ulang (reusability). Setiap kali instalasi dilakukan, Anda harus melalui proses yang sama, yang berisiko menimbulkan kesalahan. Selain itu, jika Anda perlu membuat EKS untuk berbagai lingkungan, seperti lingkungan pengembangan, produksi, atau tujuan layanan lainnya, Anda harus mengulangi serangkaian langkah GUI dan perintah tersebut setiap kali. Jika instalasi awal memakan waktu 10 menit, proses berikutnya juga akan memakan waktu yang sama. Lebih jauh lagi, sulit untuk melakukan tinjauan bersama dengan rekan kerja karena semua perintah yang diperlukan untuk pekerjaan tersebut tidak dapat disiapkan sebelumnya.

Seperti yang telah dijelaskan sebelumnya, mengelola Kubernetes dengan kode memiliki banyak keuntungan. Hal yang sama berlaku untuk EKS; jika infrastruktur dikelola dengan kode, terdapat sejumlah manfaat signifikan.

Banyak dari Anda mungkin sudah tahu bahwa saat ini praktik Infrastructure as Code (IaC), seperti menggunakan Terraform, sudah umum digunakan untuk mengelola infrastruktur melalui kode. Terraform sering digunakan di lingkungan public cloud. Sebagai alat otomatisasi infrastruktur, Terraform memungkinkan Anda untuk menyediakan dan mengelola infrastruktur di lingkungan cloud maupun on-premises menggunakan kode. Dengan Terraform, Anda dapat mendefinisikan infrastruktur dalam bentuk kode, yang memudahkan untuk mengotomatisasi tugas berulang, melacak perubahan, dan menjaga konsistensi dalam lingkungan infrastruktur. Terraform menggunakan bahasa deklaratif untuk mendefinisikan sumber daya, memungkinkan Anda mengonfigurasi infrastruktur sesuai dengan kondisi yang diinginkan.

EKS juga dapat diinstal menggunakan Terraform, dan pendekatan ini memiliki beberapa kelebihan sebagai berikut.

  1. Pengelolaan Infrastruktur Menggunakan Kode
    Dengan menggunakan kode, Anda dapat meninjau kode sebelumnya untuk menemukan masalah, sehingga sangat mendukung kolaborasi. Selain itu, perubahan dapat dengan mudah dilacak dengan pengelolaan versi menggunakan platform seperti GitHub.
  2. Kemudahan Penggunaan Kembali dan Pemeliharaan
    Di dunia kerja, kami menggunakan beberapa kluster untuk pengembangan, staging, dan produksi. Ketika membuat kluster yang sama, kami dapat menggunakan kode yang ada tanpa perubahan, sehingga meningkatkan produktivitas.

Ada berbagai Cara Instalasi EKS dengan Terraform. Terraform mendukung modul EKS, yang memungkinkan Anda menginstal berbagai sumber daya terkait seperti VPC, Security Group, dan Subnet dengan nyaman sekaligus tanpa menduplikasi kode. Modul Terraform mengabstraksi dan mengenkapsulasi fungsi atau sumber daya tertentu, sehingga menyederhanakan dan memodulasi konfigurasi infrastruktur yang kompleks. Ini membantu meningkatkan kemampuan penggunaan kembali dan pemeliharaan kode.

Dengan menggunakan modul Terraform, Anda dapat mengenkapsulasi skenario atau pola umum, sehingga mudah untuk mengulang konfigurasi yang sama di berbagai proyek atau lingkungan. Saya juga menggunakan modul Terraform untuk menginstal EKS dengan mudah.

2. Instalasi EKS dengan Terraform

Mari kita lihat Cara Instalasi EKS dengan Terraform yang digunakan di lingkungan kerja nyata. Kode tersebut dapat ditemukan di GitHub saya. Jika Anda melihat kode Terraform EKS tanpa pemahaman yang cukup tentang EKS, banyak hal mungkin terasa asing dan sulit dipahami. Pada awalnya, tidak masalah jika Anda hanya mengenali istilah-istilahnya. Seiring waktu dan penggunaan, Anda akan mulai memahami berbagai konsep yang sebelumnya sulit. Saya ingin menekankan bahwa mencoba untuk belajar secara sempurna di awal akan memakan waktu yang terlalu lama. Saya percaya bahwa lebih efektif untuk menyelesaikan praktik secara keseluruhan terlebih dahulu, dan kemudian mengulang bagian-bagian yang sulit atau diperlukan masing-masing. Cara Instalasi EKS dengan Terraform

BACA JUGA : Catatan Teknis Jennifer Panduan Praktis Menguasai Kubernetes

Unduh kode saya ke lokal menggunakan 'git clone'.

Cara Instalasi EKS dengan Terraform
Jika Anda memeriksa direktori 'terraform-eks' di bawah ini, Anda akan menemukan kode Terraform yang terkait dengan instalasi EKS.
Cara Instalasi EKS dengan Terraform

Pertama, ini adalah pengaturan terkait variabel locals. Variabel locals didefinisikan dalam Terraform menggunakan blok locals untuk membuat variabel lokal. Dengan mendefinisikan variabel menggunakan blok locals, variabel ini hanya dapat digunakan di dalam modul atau file pengaturan tersebut dan tidak dapat diakses dari luar. Variabel ini umumnya digunakan untuk menyimpan nilai yang berulang atau ekspresi yang kompleks, sehingga membuat kode lebih mudah dikelola. Cara Instalasi EKS dengan Terraform

Anda dapat menyimpan file variabel locals secara sembarangan, tetapi saya telah mendaftarkan blok locals di file main.tf.

Cara Instalasi EKS dengan Terraform

. name

Ini adalah nama EKS. Setelah dibuat, nama kluster tidak dapat diubah, sehingga penting untuk memutuskan nama kluster dengan hati-hati sejak awal. Jika perusahaan sudah memiliki Konvensi Penamaan yang ditentukan, ikutilah. Jika tidak ada, buatlah aturan yang dapat diterapkan secara konsisten dengan mempertimbangkan penyampaian makna yang jelas dan kemungkinan perluasan di masa mendatang. Menetapkan nama seperti test-01 tanpa aturan akan sangat merepotkan. Tentukan nama yang dapat menjelaskan dirinya sendiri (Self Explaining). Perusahaan saya biasanya menggunakan format {Nama Produk} – {Wilayah} – {Lingkungan (test/stage/prod)}. Ini mudah untuk ditentukan, jadi saya sangat menyarankan untuk menetapkannya sebelumnya. Cara Instalasi EKS dengan Terraform

. region

Secara umum, saya menggunakan ap-northeast-2, yaitu Seoul, tetapi karena ada EKS lain yang sudah diinstal di wilayah tersebut, saya memilih wilayah ap-southeast-1, yaitu Singapura, untuk membedakannya. Tentu saja, Anda juga bisa membedakan dengan menggunakan VPC di wilayah yang sama, tetapi demi kenyamanan, saya memisahkan hingga ke tingkat wilayah. Jika tidak ada alasan khusus seperti yang saya miliki, disarankan untuk memilih ap-northeast-2.

. vpc_cidr

Ini adalah pengaturan yang penting. CIDR (Classless Inter-Domain Routing) adalah sistem alamat jaringan yang digunakan untuk mengelola dan membagi ruang alamat IP secara efisien. Ini adalah konsep yang melengkapi dan mengembangkan sistem alamat berbasis kelas (Classful Network), yang memungkinkan penugasan alamat IP yang lebih fleksibel. Pilihlah rentang IP yang unik dan tidak tumpang tindih dengan rentang IP dari VPC lain yang sudah digunakan. Jika Anda menggunakan infrastruktur lokal (on-premises) bersama dengan AWS Cloud, sebaiknya gunakan rentang IP yang berbeda dari rentang IP lokal untuk memudahkan pengaturan Peering di masa depan.

Rentang IP juga sebaiknya memiliki aturan yang jelas. Misalnya, untuk lingkungan produksi, Anda dapat membaginya menjadi 10.1.0.0/16, 10.2.0.0/16, dan untuk staging menjadi 10.11.0.0/16, 10.12.0.0/16, serta membagi berdasarkan wilayah: Seoul dengan rentang 10.0.0.0/16 hingga 10.50.0.0/16 dan Tokyo dengan rentang 10.51.0.0/16 hingga 10.100.0.0/16. (Atau bisa juga menggunakan 172.16.0.0/16, 192.168.0.0/16, dll.) Banyak kasus di mana rentang yang sama digunakan di VPC yang berbeda karena tidak ada aturan yang ditetapkan di awal.Cara Instalasi EKS dengan Terraform

. azs

Pertimbangkan ketersediaan dengan membagi dan mengalokasikan ke dalam 3 AZ (Availability Zone). Atau, untuk kluster pengujian, Anda dapat menggunakan satu AZ untuk mengurangi biaya. Dalam lingkungan operasional yang sebenarnya, sering terjadi lalu lintas antar node dalam kluster, yang dapat menyebabkan biaya Transfer Data lebih tinggi dari yang diperkirakan.

Selanjutnya adalah pengaturan modul EKS.

Cara Instalasi EKS dengan Terraform

. cluster_endpoint_public_access

Karena ini adalah lingkungan kluster pengujian, akses publik ke layanan API EKS diizinkan. Namun, dalam lingkungan operasional yang sebenarnya, disarankan untuk membatasi akses dari luar demi keamanan.

Cara Instalasi EKS dengan Terraform

Dengan pengaturan di atas, akses hanya dapat dilakukan dari dalam VPC yang sama dengan EKS. Melalui server API EKS, semua operasi Kubernetes dapat dilakukan, seperti menghapus pod dan node atau bahkan menghapus seluruh kluster, sehingga perlu dilakukan dengan hati-hati. Saya menggunakan VPN untuk mengakses menggunakan rentang IP internal. Jika tidak menggunakan VPN, Anda juga bisa membatasi rentang IP publik yang dapat mengakses API.

. cluster_addons

EKS Addon adalah fitur yang menyediakan kemampuan untuk dengan mudah mengaktifkan dan mengelola fungsi atau layanan tertentu dalam kluster Amazon EKS. Fitur ini memudahkan pengelolaan elemen-elemen penting dalam konfigurasi EKS, seperti jaringan dan DNS. Dengan mengelola Coredns, Kube-proxy, Vpc-cni sebagai add-on sebelumnya, Anda dapat dengan nyaman melakukan upgrade EKS di masa mendatang hanya dengan menyebutkan informasi versi baru.

. vpc_id

Disarankan untuk menggunakan VPC terpisah untuk tujuan EKS agar dapat dibedakan dari VPC yang ada. EKS secara default menggunakan VPC_CNI (Container Network Interface) untuk mengelola jaringan Kubernetes. VPC_CNI menggunakan rentang IP yang sama untuk pod dan node, sehingga membutuhkan banyak alamat IP. Adalah hal yang umum jika jumlah pod melebihi 1.000, yang dapat menyebabkan kekurangan IP. Oleh karena itu, disarankan untuk menggunakan VPC terpisah.

. subnet_ids

Tentukan rentang Subnet di mana pod EKS akan dialokasikan. Kecuali dalam lingkungan khusus di mana pod harus berkomunikasi dengan alamat IP publik, sebaiknya untuk alasan keamanan, rentang Subnet ditetapkan sebagai rentang IP privat.

. control_plane_subnet_ids

Ini adalah rentang subnet di mana pod Control Plane dialokasikan. Control Plane adalah komponen inti dari kluster Kubernetes, yang berfungsi untuk mengelola dan mengontrol semua operasi di dalam kluster. Penjelasan lebih detail akan disertakan dalam praktik yang akan datang, dan saat ini cukup jika Anda hanya mengenal istilah tersebut. Rentang jaringan untuk Control Plane ditetapkan sebagai rentang Intra yang lebih aman, bukan publik atau privat. Control Plane tidak memiliki akses eksternal melalui internet gateway atau NAT gateway, dan merupakan sumber daya yang digunakan hanya di dalam VPC.

Selanjutnya adalah pengaturan nodegroup. Kubernetes memerlukan instansi VM untuk menjalankan aplikasi kontainer secara nyata. EKS dapat mengelola dan memperluas ini secara efisien menggunakan nodegroup. Belakangan ini, banyak yang mengelola node EC2 EKS menggunakan Karpenter daripada menggunakan node group yang ada. Karpenter mengelola ukuran sumber daya antara node dan pod untuk mengoptimalkan efisiensi sumber daya dalam kluster. Ini sangat membantu dalam meningkatkan kinerja dan ketersediaan kluster dengan mengotomatiskan penyesuaian ukuran sumber daya. Penjelasan lebih lanjut akan dibahas di ‘Bab 8. Autoscaling Node – Karpenter’.

Node yang dijalankan oleh Karpenter tidak dapat ditentukan oleh Karpenter itu sendiri, sehingga node group yang dijalankan oleh Karpenter didefinisikan seperti di bawah ini.(eks-cluster.tf)

Cara Instalasi EKS dengan Terraform

. eks_managed_node_group_defaults

Tentukan pengaturan dasar untuk node group. Pengaturan grup keamanan (security group) dan peran IAM (iam_role) mengikuti pengaturan dasar Terraform. Sementara itu, pengaturan kapasitas disk diubah menjadi 100Gi berbasis gp3 dengan lebih banyak ruang untuk mengantisipasi kemungkinan kegagalan, berbeda dari pengaturan dasar.

. eks_managed_node_groups.capacity_type, instance_types

Dalam kasus saya, lingkungan operasional ditetapkan menggunakan tipe instansi On-demand, sementara lingkungan Dev/Stage menggunakan Spot Instance untuk mengurangi biaya secara signifikan (sekitar 30% lebih murah dibandingkan On-demand). Untuk EKS pengujian, saya menetapkannya sebagai Spot Instance.

Sebagai catatan, jika Anda menentukan beberapa 'instance_types' di lingkungan Spot, Anda dapat mempersiapkan kemungkinan kekurangan sumber daya yang ditetapkan sebagai Spot. Bergantung pada situasinya, Anda dapat menentukan beberapa tipe, seperti [“t3.small”, “t3.large”, “m6i.large”].

Terakhir adalah pengaturan VPC. (vpc.tf)

Cara Instalasi EKS dengan Terraform

. module “vpc”.source

Terraform, seperti EKS, juga menyediakan modul VPC terpisah.

. private_subnets, [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 4, k)]

Tambahkan 4 ke CIDR sebelumnya vpc_cidr = “10.110.0.0/16” untuk mendapatkan CIDR /20, yang akan dialokasikan ke 3 AZ (Availability Zone), yaitu jika di Seoul, maka ap-northeast-2a, ap-northeast-2b, dan ap-northeast-2c.

. public_subnets  = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k + 48)]
  intra_subnets   = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k + 52)]

Dengan menambahkan /16 + 8, kita akan mengalokasikan CIDR /24 ke 3 AZ. IP yang dialokasikan berada setelah rentang jaringan privat sebelumnya.

Jika Anda memeriksa rentang IP yang diterapkan di konsol AWS, akan terlihat seperti di bawah ini.

Cara Instalasi EKS dengan Terraform

Tiga CIDR /20 bit dan enam CIDR /24 bit akan dialokasikan.

Setelah pengaturan selesai, Anda dapat menginstal EKS menggunakan Terraform. Pindah ke direktori tempat kode Terraform yang telah diunduh sebelumnya dengan 'git clone' disimpan.

Cara Instalasi EKS dengan Terraform

Instal EKS menggunakan perintah Terraform.

Cara Instalasi EKS dengan Terraform

Setelah sekitar 20 menit, instalasi akan selesai dengan normal. Setelah selesai, Anda dapat memeriksa di konsol AWS EKS seperti di bawah ini. Cari menu EKS di menu layanan AWS dengan mengetik 'eks'.

Cara Instalasi EKS dengan Terraform

 

Cara Instalasi EKS dengan Terraform

Tampilan konsol AWS EKS.

Jika Anda dapat memeriksa informasi EKS di layar konsol seperti di atas, itu berarti EKS telah terinstal dengan normal.

3. Pengaturan lingkungan operasi Kubectl lokal – Konfigurasi file lingkungan Kubernetes (~/.kube/config) dan pemanfaatan plugin Krew.

Untuk mengelola Kubernetes, diperlukan alat perintah 'kubectl'. Kubectl adalah antarmuka baris perintah (CLI) yang digunakan untuk berinteraksi dengan kluster Kubernetes. Ini adalah alat penting bagi pengguna untuk mengelola dan memantau sumber daya kluster. Di lingkungan Mac, Anda dapat menginstalnya dengan mudah menggunakan Homebrew.

Cara Instalasi EKS dengan Terraform

Sebagai catatan, Homebrew juga dapat digunakan di lingkungan Ubuntu. Saya menggunakan WSL Ubuntu dan telah menginstal Homebrew untuk digunakan.(Rujuk ke metode instalasi) Anda dapat menginstal 'kubectl' dengan perintah yang sama seperti di atas.

Tentu saja, Anda juga dapat menggunakan manajer paket apt. Anda dapat menemukan metode instalasi yang lebih rinci di situs resmi Kubernetes.

Setelah instalasi, selesaikan pengaturan penyelesaian otomatis dan alias sesuai panduan di situs resmi Kubernetes.

Selain itu, jika Anda mendaftarkan alias di bawah ini, Anda dapat menjalankan perintah kubectl dengan lebih cepat.

Instalasi alat kubectl telah selesai. Selanjutnya, untuk mengelola kluster EKS jarak jauh dari lokal, perlu memodifikasi file konfigurasi Kubernetes di PC pribadi (/.kube/config). File ‘/.kube/config’ di Kubernetes berisi informasi alamat kluster Kubernetes jarak jauh, kredensial pengguna, dan lain-lain. Format file konfigurasi adalah YAML, dan Anda dapat mengeditnya secara langsung atau menggunakan perintah ‘kubectl config’.

Berikut adalah file konfigurasi Kubernetes yang terdaftar di PC saya. Jika Anda mengatur dengan cara yang sama, informasi yang diperlukan untuk mengakses Kubernetes jarak jauh akan terdaftar.

 Struktur Kubernetes Config terdiri dari tiga bagian utama seperti di bawah ini.

  • Cluster (Klaster): Berisi alamat server klaster dan informasi autentikasi TLS dasar. Informasi ini sangat penting untuk menghubungkan ke klaster.
  • Contexts (Konteks): Memuat informasi tentang klaster, pengguna, dan namespace. Konteks memungkinkan perpindahan cepat antara beberapa klaster dan pengguna.
  • Users (Pengguna): Berisi informasi autentikasi klien untuk berkomunikasi dengan klaster. Ini mencakup token autentikasi, sertifikat klien, nama pengguna, dan kata sandi. Perlu dicatat bahwa EKS dan Kubernetes on-premise menggunakan metode autentikasi yang berbeda.

Selanjutnya, file ~/.kube/config pada bagian 'Clusters' dan 'Users' akan disesuaikan untuk memungkinkan pengelolaan klaster Kubernetes jarak jauh dari PC pribadi Anda. Informasi tambahan tentang file konfigurasi Kubernetes untuk EKS dapat ditemukan di dokumentasi resmi AWS.

Langkah pertama adalah memeriksa informasi alamat server dan sertifikat autentikasi pada bagian 'clusters'. Informasi ini dapat dilihat di menu 'Overview' (Ikhtisar) pada konsol manajemen AWS EKS.

Salin informasi tersebut, dan berdasarkan tangkapan layar yang diberikan, daftarkan ke dalam file konfigurasi lokal ~/.kube/config. Masukkan 'API Server Endpoint' ke dalam bagian 'server' dan masukkan informasi sertifikat otoritas, yaitu 'Certificate Authority', ke dalam 'certificate-authority-data'.

Tentukan nama untuk cluster, context, dan user. Nama-nama ini dapat ditentukan secara bebas, jadi pilih nama yang sesuai untuk Anda. Dalam kasus ini, saya menggunakan nama yang sama untuk ketiganya, yaitu switch-singapore-test.

Langkah terakhir adalah mengisi bagian 'user'. Pada bagian '--cluster-name', masukkan nama klaster yang digunakan saat instalasi (contoh: singapore-test). Kemudian, untuk env:name dan env:value, masukkan informasi kredensial AWS Anda. Informasi kredensial AWS dapat ditemukan dalam file ~/.aws/credentials. Gunakan informasi kredensial yang sama dengan yang digunakan saat menginstal EKS.

  • Pada env:name, masukkan AWS_PROFILE.
  • Pada env:value, masukkan nama profil dari file kredensial AWS Anda.

Setelah semua konfigurasi selesai, Anda kini dapat menjalankan perintah kubectl dari lingkungan lokal Anda untuk mengelola klaster Kubernetes.

Jika perintah di atas berhasil dijalankan, maka semua persiapan untuk mengelola kluster jarak jauh dari lingkungan lokal Anda telah selesai. Anda dapat mencoba membuat pod uji, dan pod tersebut akan berjalan dengan normal.

Selain itu, jika Anda memeriksa di AWS Console, Anda akan melihat bahwa VPC, Subnet, NAT Gateway, dan lainnya telah secara otomatis disertakan. Terraform dengan praktis menginstal semua sumber daya yang diperlukan untuk pengaturan EKS dalam satu modul.

Demikianlah cara memasang EKS menggunakan Terraform.

Dengan menggunakan Terraform, Anda tidak hanya dapat menginstal EKS, tetapi juga berbagai sumber daya yang diperlukan untuk menjalankan EKS dengan mudah. Terraform dirancang dengan abstraksi yang baik sehingga Anda tidak perlu memahami secara mendalam semua pengaturan detail dari berbagai sumber daya untuk dapat melakukan instalasi dan pengoperasian dengan lancar. Anda cukup menyesuaikan dan mengoptimalkan konfigurasi sesuai dengan kebutuhan masing-masing perusahaan.