Selasa, 26 Mei 2020

KUBERNETES-install

Cara Install Kubernetes dan Docker di Linux Server
Ingin bangun/install server kubernetes-docker di Linux Server? nih ayies.com kasih tau caranya!
Berikut spesifikasi yang dibutuhkan
  1. Server berbasis Linux
  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)
Sebelum memulai installasi dan setup, lakukan berikut ini terlebih dahulu:
Lakukan update dan upgrade system
sudo apt-get update
sudo apt-get upgrade
Agar terlihat rapi kita akan memberi nama/hostname Master => svr1-ubu-k8s-master dan Minion/worker sebagai svr1-ubu-k8s-minion1.
Penamaan hostname kalau bisa unik yah, contoh jika kita ingin buat server minion baru pada cluster yang sama maka kita bisa kasih nama svr1-ubu-k8s-minion2.
Master
sudo hostnamectl set-hostname svr1-ubu-k8s-master
Ubah file /etc/hosts dan masukan baris line svr1-ubu-k8s-master disebelah kanan 127.0.0.1 sehingga menjadi
Minion/Worker
sudo hostnamectl set-hostname svr1-ubu-k8s-minion1
Ubah file /etc/hosts dan masukan baris line svr1-ubu-k8s-minion1 disebelah kanan 127.0.0.1 sehingga menjadi

Install dan Setup NTP Server (Time syncronitation Server)
Setup ntp syncronitation time server disemua node agar semua node memiliki waktu yang saling sinkron. Setup dengan skema:
  1. Node master dipasang ntp sebagai server ntp
  2. Node worker/minion menggunakan IP master server sebagai “kiblat waktu”
Berikut cara setup nya:
Master:
sudo apt install chrony nano
sudo nano /etc/chrony/chrony.conf
Masukan baris line berikut, ubah ip-ntp-server dengan alamat yang kamu sukai pada link berikut ini: http://www.pool.ntp.org/zone/id
server 2.id.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
server 0.asia.pool.ntp.org  iburst
allow 0.0.0.0/0
sudo service chrony restart
sudo chronyc sources
Worker/Minion:
sudo apt install chrony nano
sudo nano /etc/chrony/chrony.conf
Untuk chrony di Minion kita akan menggunakan IP si Master sebagai kiblat waktu, jadi ubah isi file tsb dan set ke IP master
Masukan di baris line sebagai berikut, ( Bawaan default: pool 2.debian.pool.ntp.org offline iburst) Ubah menjadi:
server  IP-Server-Master iburst
Oiyah sekedar saran ada baiknya di ip ntp server yang dimasukan di minion ini adalah ip private-nya jangan ip publicnya. Agar lebih cepat fetch-nya. karena ip public kan lebih lama. Tapi kalau memang gak ada yah ip public juga tidak apa-apa.
sudo service chrony restart
sudo chronyc sources

Memulai: Cara Install Kubernetes dan Docker di Linux Server

(Lakukan cara berikut ini di master dan juga minion)
sudo apt-get install apt-transport-https -y
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Buat yg ngalamin error :
gpg: can’t open ‘–’: No such file or directory tolong ganti add – pada baris paling akhir  dengan -(dash yah) wordpressnya reseh autocorrect sendiri. mengubah -menjadi double–)
Jalankan perintah selanjutnya:
sudo nano /etc/apt/sources.list.d/kubernetes.list
Dan masukan baris text berikut
deb http://apt.kubernetes.io/ kubernetes-xenial main
Jalankan perintah ini untuk update repo:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
sudo reboot
Setup dan Konfigurasi (Pastikan semua node sudah kamu reboot dahulu sebelum memulai langkah lanjutan ini)
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: MemulaiCara Install Kubernetes dan Docker di Linux Server (Lakukan cara berikut ini di master dan juga 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
sudo 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.)
Atau jika cara2 akses dashboard kubernetes diatas terlau ribed buat kamu maka silahkan klik link ini untuk cara lain yang lebih sederhana namun aman!

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 dan Docker di Linux Server
Selamat kamu berhasil. ðŸ˜‰
Jangan lupa baca artikel aku yang lain yah: disini 

Tidak ada komentar:

Posting Komentar