ကျွန်တော် sharing လုပ်ချင်တာက Kubernetes cluster ( single control-plane ) Lab တစ်ခုကို KVM ( Virtualization ) ပေါ်မှာ ဘယ်လို Deploy လုပ်ရမလဲ ကို sharing လုပ်ချင်ပါတယ်. အခြား Virtualization ( VMWare, VirtualBox, Red Hat Virtualization, oVirt ) ကိုသုံး လဲ အဆင်ပြေပါတယ်.
အရင်ဆုံး ကျွန်တော်တို့ High Level Design ကို ကြည့်ရအောင်.
*Prerequisites*
- KVM Installation
- Kubernetes Cluster Resource Requirement for Lab
- Install Require Package and Dependency for Lab
- Initialize Kubernetes Cluster with kubeadm
- Linux, Mac, or WSL Terminal with Bash, Z Shell
- Microsoft VSCode For Kubernetes Cluster Management
- Sample YAML File for Kubernetes
*KVM Installation*
အရင်ဆုံးကျွန်တော်တို့ KVM ကို Install လုပ်ပါ. အခြား Virtualization ကိုသုံးလဲအဆင်ပြေပါတယ်.
*Kubernetes Cluster Resource Requirement for Lab*
Kubernetes cluster ( single control-plane ) တစ်ခု deploy လုပ်ဖို့ node ( Physical or Virtual Machine ) သုံးလုံး လောက် ဆိုရင်အဆင်ပြေပါတယ်.
control node အနေနဲ့ 2 cpu & 2 GB memory ရှိဖို့ လိုအပ်ပါတယ်.
ကျွန်တော် က control node တစ်လုံး, worker node သုံးလုံးသုံးထားပါတယ်.
control node = 2 vCPU & 2 GB Memory
worker node = 1 vCPU & 2 GB Memory ( for each VM )
vCPU ကို အောက်ပါနည်းအတိုင်တွက်လို့ ရပါတယ်.
(Threads x Cores) x Physical CPU = Number vCPU
control and worker node အတွက် ubuntu server 20.04 LTS ကို သုံးထားပါတယ်. CentOS ကိုသုံးလဲရပါတယ်.
https://ubuntu.com/download/server
အရင် ဆုံး control and worker node VM တွေကို KVM မှာ create လုပ်ပါ.
* kubernetes user *
kubernetes cluster lab အတွက် user account တစ်ခု create လုပ်ပါ.
% sudo useradd -mG sudo -s /bin/bash devops
% sudo passwd devops
အရင်ဆုံး ubuntu server ကို update လုပ်ပါ. swap space ကို disable လုပ်ပါ.
% sudo apt update
% sudo apt full-upgrade
% sudo vim /etc/fstab
% sudo mount -a
% sudo swapoff -a
% free -m
ကျွန်တော် က k8s cluster network ကို 172.25.250.0/24 subnet range သုံးထားပါတယ်.
cluster nodes တွေရဲ FQDN and IP ကို /etc/hosts file မှာ map လုပ်ပါ.
worker and control nodes များရဲ MAC Address & System UUID ကို check လုပ်ပါ.
% ip link
% sudo cat /sys/class/dmi/id/product_uuid
nodes တွေရဲ MAC Address & System UUID တွေ duplicate ဖြစ္်နေရင် cluster join ရင် error တက်ပါတယ်. Virtual Machines တွေမှာဖြစ်တတ်ပါတယ်.
Linux iptables အတွက် လိုအပ်တဲ့ Linux Kernel Module ကို Install လုပ်ပါ.
% lsmod | grep br_netfilter
% sudo modprobe br_netfilter
Linux iptables bridge traffic အတွက် sysctl config file ကို ပြင်ပါ.
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
shell script file အနေနဲ့ save ပါ. worker node တွေကို shell script file ကို copy လုပ်ပါ.
% for i in worker{1..3}; do scp bridge.sh devops@$i.example.com:~/; done
control and worker nodes မှာ လိုအပ်တဲ့ ports တွေဖွင့်ပါ.
လိုအပ်တဲ့ ports တွေ check လုပ်ပါ.
% sudo iptables -L
*Install Require Package and Dependency for Lab*
Kubernetes Cluster အတွက် လိုအပ်တဲ့ packages များ ကို control and worker nodes
များမှာ install လုပ်ပါ.
*Container Runtime*
kubernetes cluster အတွက် ကိုကြိုက်ရာ container runtime ကို control and worker nodes များမှာ install လုပ်ပါ.
https://kubernetes.io/docs/setup/production-environment/container-runtimes/
ကျွန်တော်က Docker ကိုသုံးထားပါတယ်. ကိုယ်ကြိုက်ရာ container runtime ကိုသုံးပါ.
Docker ကို အောက်ပါ links မှာ install လုပ်ပါ.
https://docs.docker.com/engine/install/#server
ကျွန်တော် တို့ shell script ကို သုံးလို့ရပါတယ်.
nodes တွေကို kubernetes cluster မ join ခင် cgroup driver ကို သတ်မှတ်ပါ.
https://kubernetes.io/docs/setup/production-environment/container-runtimes/
kubernetes cluster အတွက်လိုအပ်တဲ့ packages များကို control and worker nodes မှာ install လုပ်ပါ.
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
worker nodes များကို ကိုယ် create လုပ်ထားတဲ့ shell script file များကို scp သုံးပြီး copy လုပ်ပါ.
% for worker{1..3}; do scp docker.sh cgroup.sh kube.sh devops@$i.example.com:~/; done
ပြီးရင် shell script တွေကို run ပါ.
% chmod +x docker.sh kube.sh cgroup.sh
% ./docker.sh
% ./kube.sh
% ./cgroup.sh
အားလုံပြီးရင်တော့ ကျွန်တော်တို့ single control-plane kubernetes cluster တစ်ခု deploy လုပ်ဖို့ ready ဖြစ်ပါပြီး.
*Initialize k8s cluster with kubeadm*
kubeadm init command ကို သုံးပြီး single control-plane kubernetes cluster ကို setup လုပ်ပါ. ကျွန်တော်က default option ကို သုံးတားပါတယ်. ကိုယ်ကြိုက်ရာ container runtime ( cri ), pod network cidr ကိုသုံးလိုရပါတယ်.
kubeadm init မ run ခင် kubeadm config images pull ကို အရင် run ပါ. gcr.io container registry နဲ့ connectivity စမ်းကြည့်ပါ.
kubeadm init ကို root user အနေနဲ့ run ပါ.
# kubeadm config images pull
# kubeadm init
Highly Available Cluster ကို upgrade လုပ်ချင်ရင် –control-plane-endpoint ကို define လုပ်ပါ.
kubeadm init ကရတဲ့ kubeadm join and token ကို shell scipt file အနေနဲ့သိမ်းပါ.
save ထားတဲ့ shell script file ကို worker nodes ကို copy ကူးပါ.
% for i in worker{1..3}; do scp kube_join.sh devops@$i.example.com:~/; done
shell script file ကို worker nodes မှာ run ပါ. root user or sudo privilege အနေနဲ့ run ပါ.
# chmod +x kube_join.sh
# ./kube_join.sh
kubernetes cluster nodes တွေကို check လုပ်ပါ. control node မှာ run ပါ.
% kubectl get nodes
*pods network plugin*
ကိုယ်ကြိုက်ရာ pods network plugin ကို သုံးပါ.
https://github.com/containernetworking/cni
ကျွန်တော်က calico plugin ကိုသုံးထားပါတယ်.
https://docs.projectcalico.org/about/about-calico
https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
calico plugin yaml file ကို download ဆွဲပါ. control node မှာ run ပါ.
% curl https://docs.projectcalico.org/manifests/calico.yaml -O
% kubectl apply -f calico.yaml
calico pods network plugin ရဲ့ config file ကို check လုပ်ပါ.
kubernetes cluster မှာရှိတဲ့ pods တွေကို check လုပ်ပါ.
kubernetes cluster ကို အခြား host ကနေ manage လုပ်ချင်ရင် /etc/kubernetes/admin.conf file ကို manage လုပ်ချင်တဲ့ host ရဲ့ /home/user/.kube/config file ကို copy ကူးပါ. admin.conf file ကို သုံးလဲရပါတယ်.
scp root@<control-plane-host>:/etc/kubernetes/admin.conf .
kubectl --kubeconfig ./admin.conf get nodes
*Linux, Mac, or WSL Terminal with Bash, Z Shell*
ကျွန်တော်က ubuntu 20.04 LTS နဲ့ Z Shell ကို သုံးထားပါတယ်. ကိုယ်ကြိုက်ရာ shell ကို သုံးပါ.
*Microsoft VSCode For Kubernetes Cluster Management*
Microsoft VSCode kubernetes Extension ကို သုံးပြီး kubernetes cluster ကို manage လုပ်လို့ရပါတယ်.
*Sample YAML File for Kubernetes*
ကျွန်တော်တို့ kubernetes deployment yaml file တစ်ခု run ကြည့်ပါ.
kubernetes yaml file
kubernetes ကို ဆက်လေ့လာလို လျှင်.
https://learning.oreilly.com/videos/certified-kubernetes-administrator/9780136677482
“Thanks For Your Time, Mate”