Kubernetes adalah sistem container yang free dan open-source yang dapat digunakan untuk menggunakan dan mengelola container.
Kubernetes dikembangkan oleh Google dan dirancang khusus untuk autoscaling dan deployments otomatis. Kubernetes dapat berjalan di infrastruktur cloud apa pun dan bare metal.
Kubernetes memungkinkan Anda untuk mendistribusikan banyak aplikasi melintasi sekelompok node. Kubernetes hadir dengan serangkaian fitur yang kaya, termasuk Auto-scalability, Batch execution, Load balancing, Self-healing, Horizontal scaling, Service discovery, Storage orchestration, dan banyak lagi.
Dalam tutorial ini, kita akan membahas cara konfigurasi load balancing Nginx dengan Kubernetes di Ubuntu 18.04.
Persyaratan
- Dua server dengan Ubuntu 18.04.
- Minimal 2 GB RAM dipasang di setiap server.
- Kata sandi root dikonfigurasikan di kedua server.
Memulai
Pertama, perbarui kedua server dengan versi stable terbaru. Jalankan perintah berikut untuk memperbarui server:
apt-get update && apt-get upgrade
Setelah kedua server diperbarui, restart untuk menerapkan semua perubahan.
Secara default, Kuberenetes tidak mendukung memori swap dan tidak akan berfungsi jika swap aktif. Jadi, Anda harus menonaktifkan swap memory di kedua server.
Untuk menonaktifkan swap memory, jalankan perintah berikut:
swapoff -a
Untuk menonaktifkan swap memory secara permanen, buka file /etc/fstab
:
nano /etc/fstab
berikan Komentar (tanda #
) pada baris terakhir yang ada kata swap:
# /etc/fstab: static file system information.
#
# use 'blkid' to print the universally unique identifier for a
# device; this may be used with uuid= as a more robust way to name devices
# that works even if disks are added and removed. see fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
# swap was on /dev/sda4 during installation
#UUID=65se21r-1d3t-3263-2198-e534c265e216 none swap sw 0 0
Simpan dan tutup file. Kemudian, jalankan perintah berikut untuk menerapkan perubahan konfigurasi:
mount -a
Selanjutnya, atur hostname resolution di kedua server. Jadi, setiap server dapat berkomunikasi satu sama lain menggunakan hostname.
Untuk melakukannya, buka file /etc/hosts
menggunakan editor pilihan Anda:
nano /etc/hosts
Tambahkan baris berikut:
192.168.0.120 master 192.168.0.110 slave
Jangan lupa untuk mengganti IP 192.168.0.120
dan 192.168.0.110
dengan IP Anda.
Simpan dan tutup file ketika Anda selesai. Kemudian, lanjutkan ke langkah berikutnya.
Instal Docker Dan Kubernetes
Selanjutnya, Anda perlu menginstal Docker dan Kubernetes tool kubelet, kubeadm, dan kubectl di kedua server.
Pertama, instal paket yang diperlukan dan tambahkan GPG key dengan perintah berikut:
apt-get install apt-transport-https ca-certificates curl software-properties-common -y curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Langkah berikutnya tambahkan repositori Docker CE di kedua server dengan menjalankan perintah berikut:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Perbarui repositori dan instal Docker CE dengan perintah berikut:
apt-get update && apt-get install docker-ce -y
Setelah instalasi selesai, periksa status Docker CE dengan perintah berikut:
systemctl status docker
Anda akan melihat output berikut:
? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2019-07-18 06:03:50 UTC; 1h 24min ago Docs: https://docs.docker.com Main PID: 3619 (dockerd) Tasks: 8 CGroup: /system.slice/docker.service ??3619 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Jul 19 07:05:48 master dockerd[3619]: time="2019-07-18T06:03:48.574491681Z" level=warning msg="Your kernel does not support swap memory limit" Jul 19 07:05:48 master dockerd[3619]: time="2019-07-18T06:03:48.575196691Z" level=warning msg="Your kernel does not support cgroup rt period" Jul 19 07:05:48 master dockerd[3619]: time="2019-07-18T06:03:48.575733336Z" level=warning msg="Your kernel does not support cgroup rt runtime" Jul 19 07:05:48 master dockerd[3619]: time="2019-07-18T06:03:48.582517104Z" level=info msg="Loading containers: start." Jul 19 07:05:49 master dockerd[3619]: time="2019-07-18T06:03:49.391255541Z" level=info msg="Default bridge (docker0) is assigned with an IP add Jul 19 07:05:49 master dockerd[3619]: time="2019-07-18T06:03:49.681478822Z" level=info msg="Loading containers: done." Jul 19 07:05:50 master dockerd[3619]: time="2019-07-18T06:03:50.003776717Z" level=info msg="Docker daemon" commit=0dd43dd graphdriver(s)=overla Jul 19 07:05:50 master dockerd[3619]: time="2019-07-18T06:03:50.009892901Z" level=info msg="Daemon has completed initialization" Jul 19 07:05:50 master systemd[1]: Started Docker Application Container Engine. Jul 19 07:05:50 master dockerd[3619]: time="2019-07-18T06:03:50.279284258Z" level=info msg="API listen on /var/run/docker.sock"
Paket Kubernetes tidak tersedia di repositori default Ubuntu 18.04. Jadi, Anda perlu menambahkan repositori Kubernetes di kedua server.
Anda dapat menambahkannya dengan perintah berikut:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | tee /etc/apt/sources.list.d/kubernetes.list
Selanjutnya, perbarui repositori dan instal paket Kubernetes dengan perintah berikut:
apt-get install kubelet kubeadm kubectl -y
Setelah semua paket diinstal, Anda dapat melanjutkan untuk mengkonfigurasi server Master.
Konfigurasikan Kubernetes Server Master
Pertama, Anda perlu menginisialisasi cluster dengan alamat IP Private di server Master:
Anda bisa melakukannya dengan perintah kubeadm:
kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.0.120
Setelah Cluster diinisialisasi dengan sukses, Anda akan melihat output berikut:
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.120:6443 --token zsyq2w.c676bxzjul3upd7u \ --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c
Selanjutnya, Anda perlu mengkonfigurasi alat kubectl di server Master. Anda dapat melakukannya dengan perintah berikut:
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
Selanjutnya, Anda perlu menggunakan CNI (Container Networking Interface) di server. Karena, cluster tidak memiliki CNI.
Anda bisa deploy CNI ke Cluster dengan perintah berikut:
kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
Anda akan melihat output berikut :
configmap/calico-config created daemonset.extensions/calico-etcd created service/calico-etcd created daemonset.extensions/calico-node created deployment.extensions/calico-kube-controllers created deployment.extensions/calico-policy-controller created clusterrolebinding.rbac.authorization.k8s.io/calico-cni-plugin created clusterrole.rbac.authorization.k8s.io/calico-cni-plugin created serviceaccount/calico-cni-plugin created clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created serviceaccount/calico-kube-controllers created
Anda sekarang dapat memeriksa namespaces dengan menjalankan perintah berikut:
kubectl get namespaces
Jika semuanya berjalan dengan baik, Anda akan melihat output berikut:
NAME STATUS AGE default Active 4h kube-public Active 4h kube-system Active 4h
Selanjutnya, verifikasi apakah master node sekarang berjalan dengan benar dengan perintah berikut:
kubectl get nodes
Anda akan melihat output berikut:
name status roles age version master Ready master 12m v1.15.3
Tambahkan Slave ke Cluster Kubernetes
Selanjutnya, masuk ke server slave dan jalankan perintah berikut untuk menambahkan slave ke cluster Kubernetes:
kubeadm join 192.168.0.120:6443 --token zsyq2w.c676bxzjul3upd7u --discovery-token-ca-cert-hash sha256:a720ae35d472162177f6ee39de758a5de40043f53e4a3e00aefd6f9832f3436c
Selanjutnya, buka server master dan periksa apakah slave ditambahkan ke cluster Kubernetes Anda dengan perintah berikut:
kubectl get nodes
Anda akan melihat output berikut:
name status roles age version master ready master 25m v1.15.3 slave ready 2m v1.15.3
Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.
Deploy NGINX di Cluster Kubernetes
Cluster Kubernetes sekarang telah terinstal, dikonfigurasi, dan berfungsi dengan baik. Saatnya untuk deploy Nginx di cluster Kubernetes.
Login ke server Master dan buat deployment Nginx dengan perintah :
kubectl create deployment nginx --image=nginx
Anda sekarang dapat list Nginx deployment dengan perintah :
kubectl get deployments
Anda akan melihat output :
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 99s
Setelah Nginx telah di deploy, aplikasi dapat diekspos dengan perintah :
kubectl create service nodeport nginx --tcp=80:80
Anda sekarang dapat melihat layanan dan alamat ClusterIP baru ditugaskan dengan perintah :
kubectl get svc
Anda akan melihat output :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 443/TCP 15m nginx ClusterIP 10.152.183.199 80:32456/TCP 60s
Selamat! Anda telah berhasil deploy Nginx di cluster Kubernetes. Anda juga dapat menambahkan node lain ke cluster Kubernetes dengan mudah. Untuk informasi lebih lanjut, lihat dokumen resmi Kubernetes di Dokumen Kubernetes.