Cara Install Kubernetes di Linux Centos/Redhat 7

Berikut spesifikasi yang dibutuhkan

  1. Server berbasis Linux Centos/Redhat 7
  2. 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.

Cara Install Kubernetes di Linux Centos/Redhat 7

Selamat kamu berhasil. 😉

Jangan lupa baca artikel aku yang lain yah: disini