ເລີ່ມຕົນໃຊ້ງານ k8s ສ້າງ cluster ເທິງ cloud server
ສະບາຍດີຜູ້ອ່ານທຸກຄົນກັບມາເຈີກັບ serie k8s ກັນອີກຄັ້ງ ແລະ ບົດຄວາມນີ້ເຮົາຈະມາເວົ້າເຖິງການຕິດຕັ້ງ ແລະ ໃຊ້ງານ k8s ເຖິງ server ແທ້ໆທີ່ບໍ່ແມ່ນການຈຳລອງຢູ່ local ຂອງເຮົາເຊິ່ງໄດ້ເວົ້າກັນໄປແລ້ວໃນບົດຄວາມກ່ອນສາມາດກັບໄປອ່ານກັນໄດ້
ເອົາຫລ່ະບໍ່ອະລຳພະບົດຫຼາຍເຈັບຄໍ!! ກໍ່ມາເຂົ້າເລື່ອງກັນເລີຍ. ໃນການເຮັດ cluster ໂດຍໃຊ້ server ແທ້ໆນັ້ນກ່ອນອື່ນເຮົາຕ້ອງມີ server 3 ເຄື່ອງ ແລະ ແຕ່ລະເຄື່ອງກໍ່ຕິດຕັ້ງ docker ເຊິ່ງບັງເອີນວ່າຜູ້ຂຽນບໍ່ແມ່ນຄົນຮວຍຫຍັງຂະໜາດນັ້ນກໍ່ເລີຍໄປເຊົ່າ cloud ແລ້ວສ້າງ VM ຂື້ນມາ 3 instance (ຄວາມເປັນຈິງແລ້ວ Cloud ທີ່ໃຊ້ທົດລອງໃນຂະນະຂຽນບົດຄວາມນີ້ແມ່ນຜູ້ໃຫຍ່ໃຈດີທີ່ໃຊ້ນາມແຟງວ່າ Os555 ເປັນຜູ້ອຸປະຖຳຂໍ້ຂອບໃຈມາຫຍັງທີ່ນີ້ດ້ວຍ) ແລ້ວກໍ່ຕິດຕັ້ງ docker ໃຫ້ແຕ່ຫລ່ະ VM ດ້ວຍວິທີງ່າຍໆດັ່ງນີ້
- copy script ຈາກ https://get.docker.com/
- ສ້າງ file .sh ຂຶ້ນມາແລ້ວກໍ່ past script ນ້ັນລົງໄປພ້ອມທັງ chmode +x installFile.sh
- run ຄຳສັ່ງ ./installFile.sh ກໍ່ເປັນອັນສຳເລັດ
ຕິດຕັ້ງ kubeadm, kubelet, kubctl
ໃນເຮັດ cluster ໂດຍໃຊ້ k8s ເທິງ cloud server ຫຼື private server ກໍ່ຕາມຕ້ອງໄດ້ຕິດຕັ້ງທັງສາມຕົວນີ້ໃຫ້ແຕ່ລະ node (server ຫຼື VM).
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
ພຽງເທົ່ານີ້ເຮົາກໍ່ພ້ອມຈະ cluster ກັນແລ້ວ
Start cluster ດ້ວຍ kubeadm
ຫຼັງຈາກຕິດຕັ້ງແລ້ວກໍ່ເຖິງເວລາພາຄວນ start cluster ກັນແລ້ວໂດຍເລືອກເອົາ node ໃດໜຶ່ງເປັນ 3 node ທີ່ເຮົາກຽມໄວ້ນັ້ນມາເປັນ master ຈາກນັ້ນກໍ່ remote ssh ເຂົ້າໄປແລ້ວກໍ່ run ຄຳສັ່ງດັ່ງນີ້
start k8s cluster
$ kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<master-ip-address>
ເຊິ່ງ flag — pod-network-cidr ເປັນການບອກ kubeamd ໃຊ້ IP ໃນຊ່ວງໃດໃນການສ້າງ network ໃຫ້ກັບ pods ຫຼັງຈາກນັ້ນແລ້ວກໍ່ຕ້ອງຕິດຕັ້ງ add-on ຂອງ netowrk ນັ້ນໃຫ້ cluster ຮັບຮູ້ເຊິ່ງເຮົາຈະເວົ້າກັນໃນ step ຕໍ່ໄປ. ສ່ວນ — apiserver-advertise-address ຄືການກຳນົດ API endpoint ຂອງ k8s ເຊິ່ງກໍ່ຄື master IP ນັ້ນເອງ. ເມື່ອເຮົາ start k8s cluster ດ້ວຍຄຳສັ່ງຂ້າງເທິງນັ້ນສຳເລັດແລ້ວກໍ່ຈະມີຄຳອະທິໃຫ້ເຮົາວ່າຈະເຮັດຫຍັງຕໍ່ເຊິ່ງຂັ້ນຕອນຕໍ່ໄປນັ້ນກໍ່ຄືການ join node ເຂົ້າສູ່ cluster ແຕ່ກ່ອນອື່ນເຮົາໄປຕິດຕັ້ງ add-on network ເສຍກ່ອນ.
ຕິດຕັ້ງ pod network add-on
ເຊິ່ງໃນທີ່ນີ້ເຮົາຈະໃຊ້ Flannel Add-on ວ່າແລ້ວກໍ່ເລີ່ມຕິດຕັ້ງກັນເລີຍ
$ sysctl net.bridge.bridge-nf-call-iptables=1
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/c5d10c8/Documentation/kube-flannel.yml
ເມື່ອສຳເລັດແລ້ວກໍ່ເປັນອັນວ່າ cluster network ຂອງເຮົາພ້ອມໃຊ້ງານແລ້ວ.
ການ join Node ເຂົ້າສູ່ cluster
ກ່ອນອື່ນໄປສ້າງບ່ອນເກັບ config ຂອງ k8s ກ່ອນເຊິ່ງຂັ້ນຕອນນີ້ຈະເຮັດສະເພາະຢູ່ master ເທົ່ານັ້ນ.
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
ເບິ່ງລາຍການ token ທີ່ node ຕ່າງໆ ຈະໃຊ້ join ເຂົ້າສູ່ k8s cluster
$ kubeadm token list
TOKEN TTL EXPIRES USAGES
8ewj1p.9r9hcjoqgajrj4gi 23h 2018-06-12T02:51:28Z authentication
ໂດຍປົກກະຕິແລ້ວ token ຈະໝົດອາຍຸການໃຊ້ງານພາຍໃນ 24 ຊົວໂມງ ຖ້າປະກົດວ່າບໍ່ມີລາຍການ token ກໍ່ໃຫ້ສ້າງ token ຂື້ນມາໄຫມ່
$ kubeadm create token
r3b0f4.itay0hxo3aoyzs17
ສ້າງ hash ເພື່ອໃຊ້ join cluster
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
ສຳລັບຂັ້ນຕອນຂ້າງເທິງນັ້ນເວລາເຮົາໃຊ້ຄຳສັ່ງ kube init ມັນຈະສ້າງຂື້ນມາໃຫ້ແລ້ວພຽງແຕ່ຢາກໃຫ້ຮູ້ວ່າຖ້າເຮົາຕ້ອງການສ້າງ token ຫຼື hash ເອງເພື່ອໃນກໍລະນີທີ່ຕ້ອງໄດ້ join node ໃນອະນາຄົດ.
ຫຼັງຈາກນັ້ນກໍ່ ssh ເຂົ້າໄປແຕ່ຫລ່ະ node ທີ່ເຮົາຈະ join ມັນເຂົ້າມາໃນ cluster ແລ້ວກໍ່ run command ດັ່ງນີ້.
$ kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
ເອົາຄ່າ token ແລະ hash ທີ່ໄດ້ມາແທນທີ່ <token> , <hash> ຕາມລຳດັບ. ພຽງເທົ່ານີ້ node ນັ້ນໆກໍ່ join cluster ເປັນອັນສຳເລັດແລ້ວສາມາດກວດສອບໄດ້ຈາກ master node
$ kubectl get node
NAME STATUS ROLES AGE VERSIONxangnam-k8s-lab1 Ready master 13d v1.11.3xangnam-k8s-lab2 Ready <none> 13d v1.11.3xangnam-k8s-lab3 Ready <none> 13d v1.11.3
ພຽງເທົ່ານີ້ cluster ກໍ່ພ້ອມໃນການ deployment application ແລ້ວ.
ທົດລອງ deploy application
ເມື່ອເຮົາສ້າງ cluster ແລະ join node ເຂົ້າມາແລ້ວກໍ່ມາລອງ deploy application ເຂົ້າມາໃນ cluster ລອງເບິ່ງວ່າມັນຈະຍິງໃຫຍ່ອະລັງການແນວໃດ. ເຊິ່ງຜູ້ຂຽນຂໍ້ຍົກເອົາ nginx ຂື້ນມາເປັນຕົວຢ່າງວ່າແລ້ວກໍ່ເລີມກັນເລີຍ
deployment
$ kubectl run nginx --image=nginx --port=80
ສ້າງ service
$ kubectl expose deployments/nginx --type="NodePort" --port=80
$ kubectl get servicesNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) kubernetes ClusterIP 10.96.0.1 <none> 443/TCP nginx NodePort 10.104.144.33 <none> 80:30269/TCP
ຫຼັງຈາກນັ້ນກໍ່ລອງ access ເຂົ້າເບິ່ງວ່າ nginx ເຮັດວຽກຫຼືຍັງ <master-ip>:<service-port> ຫຼື <worker-node-ip>:<service-port> ຖ້າບໍ່ມີຫຍັງຜິດພາດກໍ່ຈະປະກົດໜ້າ wellcome ຂອງ nginx.
Scale application
$ kubectl scale deployments/nginx --replicas=5
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEnginx 5 5 5 5 2
ມາຮອດນີ້ເຮົາກໍ່ສຳເລັດການສ້າງ cluster server ໃນ cloud ເປັນທີ່ຮຽບຮ້ອຍແລ້ວກໍ່ຈະເຫັນວ່າບໍ່ມີຫຍັງຫຍຸງຍາກເລີຍເພາະ k8s ພັດທະນາຂຶ້ນມາເພື່ອໃຫ້ຄົນທຳມະດາສາມັນສາມາດເຮັດ cluster ໄດ້ຢູ່ແລ້ວ. ເຊິ່ງບົດຄວາມນີ້ຈະເປັນບົດຄວາມສຸດທ້າຍທີ່ຈະເວົ້າເຖິງພື້ນຖານການໃຊ້ງານ k8s ເພາະບົດຄວາມຕໍ່ໄປຈະເວົ້າຂັ້ນ advance ຂື້ນໄປອີກເຊັ່ນ persistance storage, deployments file, ການນຳໃຊ້ helm ໃນການ deployment application.
ສຳລັບໃຜທີ່ຄິດວ່າວິທີຕິດຕັ້ງຂ້າງເທິງຍາກ ແລະ ສັບສົນຢູ່ຢາກຫາໂຕຊ່ວຍປະມານວ່າຄຳສັ່ງດຽວຈົບແນະນຳ script ຕິດຕັ້ງ k8s ທີ່ມີຄົນໃຈດີເຮັດໄວ້ໃຫ້ແລ້ວ.
ສາມາດຫາຂໍ້ມູນເພີ່ມເຕີມໄດ້ທີ່
ຂອບໃຈທຸກຄົນທີ່ອ່ານຈົນຈົບ ແລ້ວເຈີກັນໃນບົດຄວາມຕໍ່ໄປ!!