Cara Install Kubernetes di Linux Centos/Redhat 7
Berikut spesifikasi yang dibutuhkan
- Server berbasis Linux Centos/Redhat 7
- Minimal 2 server . Dimana 1 server digunakan sebagai master, dan yang satunya lagi sebagai minion/worker node.
Minimum requirement :
- CPU core min +2 core.
- Ram minimum 1gb (Untuk keperluan production harus diatas 8gb yah guys! 1 gb ini gpp kalau cuma dipakai buat belajar 😉 tapi tidak untuk production nanti)
- Linux tanpa partisi swap (kubernetes tidak bisa diinstall jika system memiliki swap)
Eksekusi perintah berikut sebagai user root:
yum update
yum upgrade
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
swapoff -a
Dicomment (#) baris SWAP . Simpan dan close.
vim /etc/fstab
Proses Installasi Docker dan Kubernetes
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
Jalankan perintah berikut:
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet kubeadm kubectl
sudo reboot
systemctl start docker && systemctl enable docker
systemctl start kubelet && systemctl enable kubelet
sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
systemctl restart kubelet
Setup dan Konfigurasi
Master Only (Jalankan perintah ini hanya di Master)
sudo kubeadm init --pod-network-cidr 10.244.0.0/16
Setelah menjalankan proses ini akan muncul pesan pada bagian bawah. Mohon dicatat dan disimpan. Terutama baris line seperti dibawah ini karena akan kita digunakan jika ingin menambah minion-minion:
You can now join any number of machines by running the following on each node
as root: kubeadm join 172.31.3.157:6443 –token f31esk.s9e5sib94vr9elqi –discovery-token-ca-cert-hash sha256:610a3349a591a07f671abfd9bd262ccb40e26fd91e4db8509 |
---|
Lanjut jalankan ini di Master.
-
-
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
Setup POD
Pod adalah unit atau boleh dibilang adalah wadah kubernetes dalam menyimpan container docker. Umumnya 1 pod berisi satu container walau sebenarnya bisa juga 1 pod berisi banyak container.
Jalankan perintah ini hanya di Master
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
-
- =======================================
- Note: saat deploy heapster dibawah ini ada kemungkinan statusnya tidak akan running namun error. ini wajar karena heapster membutuhkan minimal 1 minion sudah dijoinkan. ada 2 cara untuk mengatasinya. Yaitu tetep lanjut deploy heapster-rbac dan heapster controller kemudian join minion (awal memang eror tapi gpp wajar. atau join node minion dulu baru lanjut ke deploy pod ini)
kubectl apply --filename https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml
kubectl apply --filename https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/standalone/heapster-controller.yaml
=======================================
Jalankan perintah ini lagi di master untuk memastikan keseluruhan pod terdeploy dan running dengan baik.
sudo kubectl get pods --all-namespaces
Perintah diatas adalah untuk melakukan deploy flanel, dimana functionnya kurang lebih sebagai networking dan deploy heapster dimana functionnya sebagai metric server disisi kubernetes.
Sebelum lanjut ke langkah join minion pastikan kamu sudah melakukan langkah2 di kategori: Proses Installasi Docker dan Kubernetes di server kedua (minion).
JOIN MINION
Minion Only (Jalankan perintah ini hanya di Minion)
Jalankan sebagai root atau sudo untuk join minion ke master:
kubeadm join 172.31.3.157:6443 –token f31esk.s9e5sib94vr9elqi –discovery-token-ca-cert-hash sha256:610a3349a591a07f671abfdb9bd262ccb40e26fd91e4db8509 |
---|
Kembali ke terminal master, coba cek dengan perintah ini:
-
-
- kubectl get nodes
-
Ulangi beberapa kali perintah diatas (kubectl get nodes) sampai status master dan minion menjadi READY (dibutukan waktu beberapa detik/menit untuk status menjadi ready).
ROLES minion masih tertulis NONE. Untuk memberi label maka jalankan perintah ini:
kubectl label node svr1-ubu-k8s-minion1 node-role.kubernetes.io/minion1=
Deploy Kubernetes Dashboard (Control Panel) (Jalankan perintah ini hanya di master)
sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
sudo kubectl get pods --all-namespaces
kubectl -n kube-system get service kubernetes-dashboard
Kita tidak bisa langsung akses dashboard kubernetes. Karena semua container kubernetes dan clusternya hanya bisa diakses internal. Kita perlu mensetup network disisi router dll agar ada skema forwarding dan sejenisnya sehingga bisa diakses dari luar/public.
Untuk langkah sederhananya kita juga bisa pasang VPN di server master sehingga kita bisa akses dashboard menggunakan VPN. Dengan alamat: https://IPCluster
Untuk mengetahui IP cluster dashboard gunakan cara ini:
-
-
- kubectl -n kube-system get service kubernetes-dashboard
-
ALTERNATIF LAIN (Gunakan cara ini jika tidak menggunakan skema diatas) :
Akses Dasboard langsung tanpa vpn (Tidak disarankan untuk production, cara ini digunakan hanya untuk keperluan testing/development)
Kita bisa melakukan perubahan berikut agar bisa diakses dari luar namun untuk production tidak disarankan yah. Jika production mohon gunakan skema networking yang baik atau via VPN.
kubectl -n kube-system edit service kubernetes-dashboard
Ubah 1 kata paling bawah yaitu: ClusterIP menjadi NodePort. Lalu simpan
kubectl -n kube-system get service kubernetes-dashboard
Akan muncul port node expose. maka kita bisa akses Kubernetes dasboard menggunakan port tersebut.
Maka kita bisa langsung akses dibrowser dengan alamat https://IPServer:port
Contoh pada gambar diatas maka diakses dengan alamat https://IPServer:31660. (Note: Buat yg akses dashboard ada error certificate ssl silahkan buka melalui firefox. ;))
Ubah IP server menjadi IP server kita (jangan akses menggunakan cluster IP (10.100.18.68 pada gambar diatas.)
Membuat akses Login Kubernetes Dashboard
Jika kamu telah berhasil setup dashboard kubernetes maka langkah selanjutnya adalah membuat user untuk dapat login ke dashboard kubernetes. Berikut caranya.
Masih di terminal server Master ketik perintah berikut:
$ kubectl create serviceaccount cluster-admin-dashboard-sa
$ kubectl create clusterrolebinding cluster-admin-dashboard-sa \
--clusterrole=cluster-admin \
--serviceaccount=default:cluster-admin-dashboard-sa
$ kubectl get secret | grep cluster-admin-dashboard-sa
$ kubectl describe secret cluster-admin-dashboard-sa-token-x6gh7
Akan muncul token yang bisa digunakan sebagai login. Silahkan login menggunakan token tersebut, masukan pada dashboard login kubernetes.
Selamat kamu berhasil. 😉
Jangan lupa baca artikel aku yang lain yah: disini