Hanya ingin berbagi pengalaman sewaktu bermain dengan kubernetes (k8s) untuk Membangun High-availability Kubernetes yang siap digunakan pada Production. Disini kita akan menggunakan 3 master yg tiap masternya terletak disetiap zones (datacenter) dan 3 workers dengan masing-masing pada tiap region. Untuk kebutuhan POC ini saya hanya akan menggunakan sesuai kebutuhan POC saja yaitu 3 Masters (t2.medium) dan 3 Workers (t2.medium).
Saran penulis, masters dikalikan 2 disetiap zonenya. Jadi andai di region master-eu-west-1a kita memiliki satu master, ditambahkan melebihi setiap zone yang ada dengan syarat quarum. Dan untuk workers silahkan disesuaikan dengan kebutuhan app anda.
Kita akan membangunnya di AWS Cloud dengan KOPS. Kops adalah tool yang digunakan untuk me-manage kube pada AWS cloud. Seperti layaknya kubectl. Kita juga akan menggunakan kubctl tapi pada tahap awal akan kita gunakan Kops. Untuk membangun dashboard, cluster-info dan lain-lain akan memakai kubectl. Untuk pengertian kubernetes, cara menginstall kops, maupun kubectl, saya kira sudah banyak yang menjelaskannya dan itu InsyaAlloh mudah.
Syarat persiapan sebelum memulai yang tidak perlu saya jabarkan disini adalah
1. Config AWS credentials pada environment kita, seperti dengan menginstall aws-cli
2. Install Kops
3. Install Kubectl
4. Membuat bucket di S3 untuk tempat state kops
Berikut adalah tahapan yang akan kita lakukan:
1. Membuat cluster Kubernetes
2. Setup Kubernetes Dashboard
3. Percobaan
1. Untuk membuat cluster yang dengan kapabilitas "High-availability" kuncinya adalah pada letak zones baik itu zones untuk pods maupun zones untuk masters.
contoh: --zones=eu-west-1a,eu-west-1b,eu-west-1c dan --master-zones=eu-west-1a,eu-west-1b,eu-west-1c.
Berikut perintah lengkapnya:
kops create cluster --name k8s.olxid.com --state=s3://kubernetes-state-heri --zones=eu-west-1a,eu-west-1b,eu-west-1c --master-zones=eu-west-1a,eu-west-1b,eu-west-1c --node-count=3 --master-count=3 --node-size=t2.micro --master-size=t2.micro --dns-zone=olxid.com
Kita perlu menunggu AWS membuat apa yg kita sudah KOPS perintahkan tadi, seperti VPC, EC2 instances, Security group dan lain-lain. Kita bisa melihat pada AWS console, misal pada gambar dibawah ini adalah EC2 instances yang sudah terbentuk dengan rapih,
Bisa dilihat masters dan nodes yang sudah kita setup terbentuk di masing-masing region:
Proses lengkapnya biasanya akan memakan waktu sekitar 5-10 menit. Jika sudah kita bisa mengconfirm dengan perintah berikut:
kubectl get nodes atau kubectl get nodes --show-labels
2. Untuk lebih greget kita install beberapa addonnya:
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/kubernetes-dashboard/v1.5.0.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/monitoring-standalone/v1.3.0.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/route53-mapper/v1.3.0.yml
d. Lihat lagi dimana letak containernya berada
a. Buat replicas controller. Berikut yml filenya:
➜ my-kubernetes-files git:(master) ✗ cat unixhat-controller.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: unixhat-controller
spec:
replicas: 1
selector:
app: ha-test
template:
metadata:
labels:
app: ha-test
spec:
containers:
- name: k8s
image: heriyanto/k8s
ports:
- name: nodejs-port
containerPort: 3000
Perintahkan Kubernetes untuk buat replica controller:
kubectl create -f unixhat-controller.yml
Cek apakah rc dan pods sudah komplit terbentuk:
kubectl get rc
kubectl get pods
Terlihat jelas 1 buah pods sudah jadi, status running.
b. Sekarang mari kita cari tau di instance mana containernya terletak dengan perintah berikut:
kubectl get pods
kubectl describe pod [nama pod yang tercantum dari perintah diatas] | grep Node:
Nah terlihat pada instance mana container tersebut berada. pada Case yaitu:
Node: ip-172-20-71-68.eu-west-1.compute.internal/172.20.71.68
c. Sekarang kita coba untuk terminate instance tersebut, anggap Datacenter AWS di eu-west-1a down. Maka terputuslah semua services AWS.
Paste kan informasi yang didapat tadi pilih nama hostnya ip-172-20-71-68.eu-west-1.compute.internal atau ip internal 172.20.71.68.
d. Sekarang kita langsung cek pod dan letak containernya terletak dimana:
kubectl get pods
kubectl describe pod [nama pod yang tercantum dari perintah diatas] | grep Node:
kubectl describe pod unixhat-controller-n99pj |grep Node:
Saran penulis, masters dikalikan 2 disetiap zonenya. Jadi andai di region master-eu-west-1a kita memiliki satu master, ditambahkan melebihi setiap zone yang ada dengan syarat quarum. Dan untuk workers silahkan disesuaikan dengan kebutuhan app anda.
Kita akan membangunnya di AWS Cloud dengan KOPS. Kops adalah tool yang digunakan untuk me-manage kube pada AWS cloud. Seperti layaknya kubectl. Kita juga akan menggunakan kubctl tapi pada tahap awal akan kita gunakan Kops. Untuk membangun dashboard, cluster-info dan lain-lain akan memakai kubectl. Untuk pengertian kubernetes, cara menginstall kops, maupun kubectl, saya kira sudah banyak yang menjelaskannya dan itu InsyaAlloh mudah.
Syarat persiapan sebelum memulai yang tidak perlu saya jabarkan disini adalah
1. Config AWS credentials pada environment kita, seperti dengan menginstall aws-cli
2. Install Kops
3. Install Kubectl
4. Membuat bucket di S3 untuk tempat state kops
Berikut adalah tahapan yang akan kita lakukan:
1. Membuat cluster Kubernetes
2. Setup Kubernetes Dashboard
3. Percobaan
1. Untuk membuat cluster yang dengan kapabilitas "High-availability" kuncinya adalah pada letak zones baik itu zones untuk pods maupun zones untuk masters.
contoh: --zones=eu-west-1a,eu-west-1b,eu-west-1c dan --master-zones=eu-west-1a,eu-west-1b,eu-west-1c.
Berikut perintah lengkapnya:
kops create cluster --name k8s.olxid.com --state=s3://kubernetes-state-heri --zones=eu-west-1a,eu-west-1b,eu-west-1c --master-zones=eu-west-1a,eu-west-1b,eu-west-1c --node-count=3 --master-count=3 --node-size=t2.micro --master-size=t2.micro --dns-zone=olxid.com
Setelah mereview perubahan apa saja yg akan dibuat oleh kops saatnya kita apply dengan perintah berikut:
kops update cluster k8s.olxid.com --yes --state=s3://kubernetes-state-heri
Kita perlu menunggu AWS membuat apa yg kita sudah KOPS perintahkan tadi, seperti VPC, EC2 instances, Security group dan lain-lain. Kita bisa melihat pada AWS console, misal pada gambar dibawah ini adalah EC2 instances yang sudah terbentuk dengan rapih,
Bisa dilihat masters dan nodes yang sudah kita setup terbentuk di masing-masing region:
Proses lengkapnya biasanya akan memakan waktu sekitar 5-10 menit. Jika sudah kita bisa mengconfirm dengan perintah berikut:
kubectl get nodes atau kubectl get nodes --show-labels
Cek pod untuk namespace kube-system apakah sudah terbentuk dan running semua dengan:
kubectl get pod --namespace=kube-system
2. Untuk lebih greget kita install beberapa addonnya:
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/kubernetes-dashboard/v1.5.0.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/monitoring-standalone/v1.3.0.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/route53-mapper/v1.3.0.yml
Saatnya final check dengan perintah berikut:
kubectl cluster-info
3. Untuk mengetes HA-nya percobaan akan kita lakukan dengan membuat rc / replicas controller terlebih dahulu yang akan membentuk 1 pod, kemudian kita akan mematikan salah satu worker yang disitu terletak container aktif. Berikut stepnya:
a. Buat replicas controller
b. Cari di instance mana letak container yang aktif
c. Matikan secara paksa instance yang ada container aktifd. Lihat lagi dimana letak containernya berada
a. Buat replicas controller. Berikut yml filenya:
➜ my-kubernetes-files git:(master) ✗ cat unixhat-controller.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: unixhat-controller
spec:
replicas: 1
selector:
app: ha-test
template:
metadata:
labels:
app: ha-test
spec:
containers:
- name: k8s
image: heriyanto/k8s
ports:
- name: nodejs-port
containerPort: 3000
Perintahkan Kubernetes untuk buat replica controller:
kubectl create -f unixhat-controller.yml
Cek apakah rc dan pods sudah komplit terbentuk:
kubectl get rc
kubectl get pods
b. Sekarang mari kita cari tau di instance mana containernya terletak dengan perintah berikut:
kubectl get pods
kubectl describe pod [nama pod yang tercantum dari perintah diatas] | grep Node:
Nah terlihat pada instance mana container tersebut berada. pada Case yaitu:
Node: ip-172-20-71-68.eu-west-1.compute.internal/172.20.71.68
c. Sekarang kita coba untuk terminate instance tersebut, anggap Datacenter AWS di eu-west-1a down. Maka terputuslah semua services AWS.
Paste kan informasi yang didapat tadi pilih nama hostnya ip-172-20-71-68.eu-west-1.compute.internal atau ip internal 172.20.71.68.
Mari kita coba terminate instance tersebut.
kubectl get pods
kubectl describe pod [nama pod yang tercantum dari perintah diatas] | grep Node:
kubectl describe pod unixhat-controller-n99pj |grep Node:
Jika kita perhatikan nama pod sudah berubah walaupun kita belum cari tau containernya dimana, dari situ juga sudah terlihat hilalnya #eh. Nah untuk membuktikan kita describe pod tersebut yang ternyata berada di instance yang berbeda dengan sebelumnya:
Node: ip-172-20-43-170.eu-west-1.compute.internal/172.20.43.170.
Nah.. Alhamdulillah saya sudah tunaikan amanah ilmu ini :D. Sebenarnya untuk di Production pods harus di replica menjadi lebih dari 1, disini tidak saya replica agar mudah di cari podsnya dimana berada dan membuktikan dengan 1 container aktif kubernetes melakukan tindakan HA.