Membuat Kubernetes Cluster di Amazon Lightsail

4 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Membuat Kubernetes Cluster di Amazon Lightsail
Kubernetes logo

TeknoCerdas.com – Salam cerdas untuk kita semua. Dapat dibilang Kubernetes adalah salah satu container orchestrator paling populer saat ini. AWS menyediakan layanan Amazon Elastic Kubernetes Services (EKS) untuk menjalankan Kubernetes. Namun jika ingin membuat Kubernetes sendiri secara manual pengguna dapat memanfaatkan Amazon EC2. Tapi tahukah anda, jika anda juga dapat membuat Kubernetes cluster di Amazon Lightsail.

Amazon Lightsail adalah cara mudah untuk menggunakan Virtual Private Server (VPS) di AWS. Yang menarik dari Lightsail adalah kesederhanaan fitur layanan dan biaya bulanan yang mudah diprediksi dan efektif.

Membuat Kubernetes cluster dari awal memerlukan cukup banyak langkah dan konfigurasi. Tulisan ini akan menggunakan tools open source bernama lightsail-k8s-installer untuk membuat Kubernetes cluster di Amazon Lightsail.

Dengan lightsail-k8s-installer anda akan dapat membuat Kubernetes cluster hanya dengan sekali perintah. Dan dalam hitungan menit, Kubernetes cluster di Amazon Lightsail akan siap.

Persiapan

Hal-hal yang anda butuhkan sebelum menjalankan script adalah:

  • Akun AWS aktif dan memiliki hak untuk membuat resource di Amazon Lightsail dan CloudFormation
  • AWS CLI v2
  • Sudah mengupload Public SSH Key ke console Amazon Lightsail
  • Shell: Bash, Zsh atau Dash
  • SSH client
  • Basic shell utilities such as awkcatcutdatesedtrwc.
  • jq (JSON parser)

Pastikan anda sudah mengkonfigurasi AWS CLI di terminal dengan menggunakan AWS_PROFILE atau dengan menset nilai dari AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY.

export AWS_ACCESS_KEY_ID=[YOUR_ACCESS_KEY_ID]
export AWS_SECRET_ACCESS_KEY=[YOUR_SECRET_KEY]

Lalu jalankan perintah berikut untuk mencoba.

aws lightsail get-instances
{
    "instances": []
}

Jika tidak ada error maka harusnya AWS CLI siap digunakan.

Mendownload lightsail-k8s-installer

Anda dapat menggunakan file archive atau gunakan Git untuk mendownload script dari GitHub.

curl -o 'lightsail-k8s-installer.zip' -s -L https://github.com/rioastamal/lightsail-k8s-installer/archive/refs/heads/master.zip
unzip lightsail-k8s-installer.zip
cd lightsail-k8s-installer-master/

Atau menggunakan git clone.

git clone https://github.com/rioastamal/lightsail-k8s-installer.git
cd lightsail-k8s-installer

Membuat Kubernetes Cluster

Pada contoh ini kita akan membuat sebuah Kubernetes cluster di Amazon Lightsail dengan 1 control plane dan 4 worker dan di region Singapore. Untuk mengkonfigurasi jumlah worker digunakan opsi -w dan untuk region digunakan opsi -r. Opsi -i digunakan sebagai identifier installation id. ID ini tidak boleh sama jika anda ingin membuat cluster baru.

sh lightsail-k8s-installer.sh -i demo 4 -r ap-southeast-1
-----------------------------
lightsail-k8s-installer v1.1
-----------------------------
This process will create Kubernetes cluster on Amazon Lightsail.

  CloudFormation stack: lk8s-demo
                Region: ap-southeast-1
       AZs worker pool: ap-southeast-1a ap-southeast-1b ap-southeast-1c
             Resources: - 1 control plane node (plan: $5)
                        - 4 worker nodes (plan: $5)
                        - 1 load balancer (plan: $18)
      Estimated cost. : $43.00/month or $0.06/hour
Lightsail SSH key pair: id_rsa
  SSH private key file: /Users/rioastamal/.ssh/id_rsa

Press any key to continue:

lightsail-k8s-installer akan memberikan preview resource apa saja yang akan dibuat. Disana terlihat SSH key pair yang digunakan pastikan di console Amazon Lightsail anda sudah mengupload public key.

Jika nama dari SSH Key pair yang ada di console Lightsail bukan id_rsa anda dapat mengubahnya lewat environment variable LK8S_LIGHTSAIL_SSH_KEYPAIR_NAME. Baca README untuk keterangan lebih lengkap.

Jika merasa sudah sesuai, tekan tombol apapun untuk melanjutkan. Proses pembuatan cluster akan dimulai seperti yang terlihat dibawah.

This may take several minutes, please wait...
To view detailed log, run following command on another terminal:
  tail -f /private/tmp/lightsail-k8s-installer-master/.out/ap-southeast-1-lk8s-demo-20230205150250.log

[LK8S]: Checking region validity
[LK8S]: Checking SSH key pair 'id_rsa' in region 'ap-southeast-1'
[LK8S]: Checking existing stack 'lk8s-demo'
[LK8S]: Stack 'lk8s-demo' is not exists, good!
[LK8S]: Waiting stack 'lk8s-demo' to be ready...
[LK8S]: Stack 'lk8s-demo' is ready
...[cut]...
...[cut]...
Accessing Control Plane via SSH:
  ssh ec2-user@54.169.155.25

Your app are available via load balancer:
  http://d09b4aa946214f52f0ab1d26d26d7e89-681787688.ap-southeast-1.elb.amazonaws.com

You can view detailed installation log at:
  /private/tmp/lightsail-k8s-installer-master/.out/ap-southeast-1-lk8s-demo-20230205150250.log

To delete sample app run following on Control plane:
  kubectl get services,deployments --no-headers -o name \
    -l cfstackname=lk8s-demo | xargs kubectl delete


[LK8S]: Installation COMPLETED.

Jika proses selesai maka akan terbuat 5 Lightsail instance yaitu 1 control panel node, 4 worker node dan 1 Lightsail load balancer.

Kubernetes Control plane dan worker node di Amazon Lightsail
Control plane dan Worker node
Lightsail Load Balancer sebagai Ingress
Lightsail Load Balancer sebagai ingress ke semua worker node

Untuk mengakses aplikasi dapat menggunakan URL dari load balancer. Script otomatis akan membuat sebuah aplikasi demo yang dibuat dari image hashicorp/http-demo.

curl -s http://d09b4aa946214f52f0ab1d26d26d7e89-681787688.ap-southeast-1.elb.amazonaws.com
Node: kube-worker-lk8s-demo-q822je
  IP: 172.26.10.36
--
 Pod: http-echo-deployment-76ddc5bd47-2vlxt
  IP: 10.244.1.2
PWD:lightsail-k8s-installer-master

Lakukan request beberapa kali harusnya akan mendapatkan output dari node atau pod yang berbeda.

Cluster yang dibuat menggunakan tipe instance $5. Jika ingin menggunakan tipe instance yang lain dapat menggunakan environment variable LK8S_CONTROL_PLANE_PLAN dan LK8S_WORKER_PLAN. Nilai yang dapat dimasukkan 3_5_usd, 5_usd, 10_usd, 20_usd, 40_usd, 80_usd, dan 160_usd.

Menambah Worker Node

Untuk menambah worker node pada Kubernetes cluster yang telah dibuat oleh lightsail-k8s-installer dapat digunakan opsi -u dengan kombinasi opsi -i sebagai identifier installation id.

Sebagai contoh untuk menambahkan 1 worker node tipe $10 pada cluster yang telah dibuat sebelumnya gunakan perintah berikut.

LK8S_WORKER_PLAN=10_usd \
sh lightsail-k8s-installer.sh -i demo -w 1 -r ap-southeast-1 -u
-----------------------------
lightsail-k8s-installer v1.1
-----------------------------
This process will update your Kubernetes cluster on Amazon Lightsail.

  CloudFormation stack: lk8s-demo
                Region: ap-southeast-1
       AZs worker pool: ap-southeast-1a ap-southeast-1b ap-southeast-1c
         New resources: 1 worker node(s) (plan: $10)
Lightsail SSH key pair: id_rsa
  SSH private key file: /Users/rioastamal/.ssh/id_rsa

Press any key to continue:

Dapat dilihat terdapat preview sebelum melanjutkan aksi penambahan worker node. Tekan tombol sembarang untuk melanjutkan.

This may take several minutes, please wait...
To view detailed log, run following command on another terminal:
  tail -f /private/tmp/lightsail-k8s-installer-master/.out/ap-southeast-1-lk8s-demo-20230205174120.log

[LK8S]: Checking SSH key pair 'id_rsa' in region 'ap-southeast-1'
[LK8S]: Creating CloudFormation change set 'kube-worker-lk8s-demo-20230205174207' for new worker node(s)
[LK8S]: Waiting change set 'kube-worker-lk8s-demo-20230205174207' to be ready...
[LK8S]: Waiting SSH connection to 'kube-worker-lk8s-demo-0qtdh9' to be ready.
[LK8S]: Node 'kube-worker-lk8s-demo-0qtdh9' is ready
[LK8S]: Running init scripts on worker node 'kube-worker-lk8s-demo-0qtdh9'
[LK8S]: Joining worker node 'kube-worker-lk8s-demo-0qtdh9' to control plane
[LK8S]: Attaching worker nodes to Lightsail Load Balancer
[LK8S]: Waiting kubelet on worker (5/5) to be ready..
[LK8S]: All kubelet on worker nodes is ready
[LK8S]: Kubernetes nodes info:
NAME                           STATUS   ROLES           AGE    VERSION
kube-cp-lk8s-demo-npas64       Ready    control-plane   159m   v1.26.1
kube-worker-lk8s-demo-0qtdh9   Ready              43s    v1.26.1
kube-worker-lk8s-demo-c9rt42   Ready              156m   v1.26.1
kube-worker-lk8s-demo-q822je   Ready              158m   v1.26.1
kube-worker-lk8s-demo-tpkgfn   Ready              154m   v1.26.1
kube-worker-lk8s-demo-vhb4ut   Ready              155m   v1.26.1

[LK8S]: update COMPLETED.

Setelah proses update selesai sekarang jumlah worker node menjadi 5. Node terbaru ini otomatis diregistrasikan ke Load Balancer sehingga otomatis akan menerima traffic.

Menghapus Kubernetes Cluster

Untuk menghapus cluster yang telah dibuat gunakan perintah berikut.

sh lightsail-k8s-installer.sh -d demo -r ap-southeast-1
This action will destroy CloudFormation stack 'lk8s-demo' (ap-southeast-1).
Type 'yes' to continue: yes

[LK8S]: Checking CloudFormation stack 'lk8s-demo'
[LK8S]: Running cmd: aws cloudformation delete-stack --region "ap-southeast-1" --stack-name "lk8s-demo"
[LK8S]: Destroying CloudFormation stack 'lk8s-demo'...
[LK8S]: Installation 'demo' has been destroyed.

Selain perintah diatas anda juga dapat menghapus semua resources melalui CloudFormation console atau lewat AWS CLI.