ຮູ້ຈັກ Kubernetes|k8s

xangnam phiasakha
VtCamp
Published in
3 min readMay 27, 2018

ໃນໂລກຂອງ server ແລະ ການ deploy application ເພື່ອໃຫ້ຮ້ອງຮັບປະລິມານການເຂົ້າໃຊ້ງານຂອງຄົນຈຳນວນຫຼາຍ ແລະ ຍັງຕ້ອງຮັບປະກັນຄວາມສະຖຽນລະພາບຂອງ application ວ່າຈະບໍ່ shutdown ໄປແບບບໍ່ມີວັນກັບມານັ້ນ ຕ້ອງໄດ້ມີການເຮັດ cluster ເພື່ອກະຈາຍການເຮັດວຽກອອກໄປໃນແຕ່ລະ node ແທນທີ່ຈະໃຫ້ພຽງ node ດຽວຮັບພາລະພຽງຜູ້ດຽວ ແຕ່ການ cluster ໃນເມື່ອກ່ອນນັ້ນຄອນຂ້າງເຮັດໄດ້ລຳບາກເພາະຕ້ອງໄດ້ຕຽມສະພາບແວດລ້ອມໃຫ້ແຕ່ລະ node ທີ່ເຮົາຕ້ອງມາ config ແຕ່ລະ node ຫຼື server ແລະ ຕິດຕັ້ງນັ້ນນີ້ຫຼາຍຢ່າງແຖມຍັງມີການເຊື່ອມຕໍ່ແຕ່ລະ node ເຂົ້າດ້ວຍກັນອີກເຊິ່ງເບິ່ງແລ້ວຍັງຄົງຫ່າງໄກກັບນັກພັດທະນາທົ່ວໄປທີ່ຈະເຮັດ clusterໃຫ້ກັບ application ຂອງຕົນດັງນັ້ນຈື່ງເກີດມີ technology ທີ່ເອີ້ນວ່າ: Containerization ແລະ Container Orchestration ທີ່ຈະປ່ຽນໂລກນີ້ໄປຕະຫຼອດການ.

ໃນບົດຄວາມນີ້ຈະພາທຸກຄົນໄປຮູ້ຈັກ ເຄື່ອງມືໃນການນເຮັດ cluster ທີ່ຊື່ວ່າ Kubernetes ເຊິ່ງເອີ້ນສັ້ນໆວ່າ k8s ເພື່ອໃຫ້ເຂົາໃຈ concept ແລະ ອົງປະກອບຂອງມັນກ່ອນທີ່ຈະໃຊ້ງານມັນຈິ່ງໆ.

Containerization

ກອນທີ່ຈະຮູ້ຈັກ k8s ເຮົາມາຮູ້ຈັກວ່າ container technology ນີ້ຄືຫຍັງກ່ອນ ໂດຍໃນເມື່ອກ່ອນໃນການເອົາເວັບໜຶ່ງໆທີ່ເຮົາພັດທະນາຂື້ນມາ publish ໃຫ້ໂລກຮູ້ນັ້ນຕ້ອງໄດ້ລົງຫຼາຍໆຢ່າງຢູ່ໃນ server ຫຼື VM ໃນ cloud ເຊັ່ນ : Apache, Nginx, MySQL, php … etc. ແຕ່ຖ້າເປັນ container technology ຄືການ pack ທຸກສິ່ງທີ່ຈຳເປັນໃນການ deploy application ຂອງເຮົາເອົາໄວ້ເຊິ່ງເອີ້ນວ່າ container ເຮົາກໍ່ພຽງແຕ່ນຳເອົາ container ນີ້ໄປ run ຢູ່ server ໃດກໍ່ໄດ້ໂດຍບໍ່ຕ້ອງຕິດຕັ້ງຫຍັງເພີ່ມໃສ່ທັ່ງນັ້ນ. ເຮັດໃຫ້ສະດວກຂຶ້ນມາຫຼາຍເລີຍ. ເຊິ່ງໃນ server ໜຶ່ງກໍ່ສາມາດ run ໄດ້ຫຼາຍ container ລອງສັງເກດຄວາມແຕກຕ່າງລະຫວ່າງການ deploy ແບບເກົ່າກັບການໃຊ້ container

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

ສຳລັບ container platform ທີ່ໃຊ້ກັນແຜ່ຫຼາຍໃນປັດຈຸບັນກໍ່ແມ່ນ docker ທີ່ໃຊ້ງ່າຍເໝາະກັບທຸກເພດທຸກໄວ.

ສຳລັບໃຜຍັງບໍ່ຮູ້ວ່າ docker ຄືຫຍັງກໍ່ນຳໄປອ່ານໄດ້ທີ່ບົດຄວາມເກົ່າ

Container Orchestration

ຕໍ່ມາກໍ່ມີການນຳເອົາ container ຕ່າງໆມາລວມກັນເພື່ອກະຈາຍກັນເຮັດວຽກໂດຍມີ node (server ຫຼື vm) ໜຶ່ງເປັນ master ແລະ node ອື່ນໆເປັນ worker ທີ່ຈະເຮັດວຽກຕາມ master node ສັ່ງການ. ກໍ່ຄື conductor ທີ່ແກວ່ງໄມ້ໄປມາ (ບໍ່ຮູ້ເຂົາເອີ້ນວ່າຫຍັງ) ເພື່ອກຳນົດຈັງຫວະຂອງນັກດົນຕີແຕ່ລະຄົນ ເຊິ່ງນັກດົນຕີກໍ່ຄື worker node ນັ້ນເອງ ):

https://cloudblogs.microsoft.com/dynamics365/wp-content/uploads/sites/4/2016/02/242980_5F00_5-ways-to-better-orchestrate-customer-contact-center-1024x683.jpg

ເຄື່ອງມືທີ່ໃຊ້ຈັດການ ການເຮັດວຽກຮ່ວມກັນຂອງ Container ນັ້ນມີຫຼາຍເຈົ້າແຕ່ເປັນທີ່ຮູ້ຈັກກັນແຜ່ຫຼາຍ ແລະ ເປັນທີ່ນິຍົມກັນກໍ່ແມ່ນ docker swarm ແລະ Kubernetes ທີ່ເຮົາຈະເວົ້າເຖິງໃນບົດຄວາມນີ້ເອງ.

Kubernetes

k8s ຫຼື kuberates ຄື open-source container Cluster platform ທີ່ໃຊ້ບໍລິຫານຈັດການ container ເຊິ່ງລວມມີການ deploy, scale application ໃນການເຮັດວຽກເປັນ cluster ໃຫ້ງ່າຍ ແລະ ການຈັດການຕ່າງໆຈະເປັນແບບອັດໂຕໂນມັດ ເວົ້າງ່າຍໆກໍ່ຄືເຄື່ອງມືທີ່ໃຊ້ເຮັດ container cluster ນັ້ນເອງ. ເຊິ່ງ k8s ຈະມີສອງສ່ວນການເຮັດວຽກຫຼັກໆຄື Kubernetes API ທີ່ເປັນສ່ວນທີ່ໃຫ້ເຮົາລະບຸ desired state ວ່າ ເຮົາຕ້ອງການ run application ຫຍັງ? ໃຊ້ image ໃດ? ການເຊື່ອມຕໍ່ແຕ່ລະ container ໃນ cluster ເປັນແນວໃດ? ການລົບ container ແລະ ອື່ນໆທີ່ເຮົາຕ້ອງການຈັດການກັບ container ເຮົາຈະເຮັດຜ່ານ Kubernetes API ນີ້ເຊິ່ງເຮົາຈະຈັດການຜ່ານ kubectl ທີ່ເປັນ command-line interface

ຫຼັງຈາກທີ່ເຮົາລະບຸ desired state ແລ້ວ Kubernetes Control Plane ກໍ່ຈະເຮັດຕາມທີ່ລະບຸໄວ້ແບບອັດໂຕໂນມັດ ຕົວຢ່າງເຊັ່ນ: ການ start ແລະ restart container, ຂະຫຍາຍຈຳນວນ container ແລະ ອື່ນໆທີ່ຈະເຮັດໃຫ້ application ຂອງເຮົາມີຄວາມສະຖຽນລະພາບທີ່ສຸດ

ອົງປະກອບສຳຄັນຂອງ k8s

ກ່ອນທີ່ທຸກຄົນຈະໄປໃຊ້ງານ k8s ນັ້ນຕ້ອງຮູ້ສ່ວນປະກອບຂອງມັນເສຍກ່ອນເຊິ່ງມີດັ່ງນີ້:

k8s cluster
ກໍ່ຄືໂຄງສ້າງຂອງການເຮັດ cluster ນັ້ນເອງເຊິ່ງຫຼັກໆກໍ່ມີ
- master ທີ່ຈະເປັນໂຕຄອບຄຸມການເຮັດວຽກຕ່າງໆຂອງ worker ຈັດການຫຍັງກໍ່ຕາມໃນ cluster ຈະເຮັດຜ່ານ master
- worker ຄື node ທີ່ມີ kubelet ໄວ້ຕິດຕໍ່ກັບ master ແລະ ມີ docker ເພື່ອເປັນໂຕ run container(ຖ້າໃຊ້ docker ເປັນ container platform)

Deployment

ການທີ່ເຮົາຈະ run application ຂອງເຮົາໃນ k8s cluster ນັ້ນຕ້ອງໄດ້ລະບຸ deployment ຫຼື desired state ວ່າເຮົາຈະໃຊ້ image ຫຍັງ? port ໃດ? ຈຳນວນ replicas ຕະຫຼອດເຖິງການ update ຕ່າງໆກໍ່ຕ້ອງເຮັດຜ່ານ deployment.

pods

ເມື່ອເຮົາສ້າງ deployment ແລ້ວ k8s ຈະສ້າງ pods ຂື້ນມາເຊິ່ງແມ່ນຫົວໜ່ວຍນ້ອຍສຸດໃນ k8s ທີ່ເປັນກຸ່ມຂອງ container ຫຼື container ດຽວ ແລະ ບວກກັບ resource ທີ່ຈຳເປັນສຳລັບ container ນັ້ນໆເຊັ່ນ: storage, network IP, port.

container ທີ່ຢູ່ໃນ pods ດຽວກັນສາດມາດຕິດຕໍ່ກັນຜ່ານ localhost ໄດ້ເລີຍປຽບຄືກັບຢູ່ໃນເຄື່ອງດຽວກັນ. pods ຈະຖືກ k8s ຈັດແຈງວ່າຈະໄປເຮັດວຽກຢູ່ worker node ໃດຕາມຄວາມເໝາະສົມ

pods ທີ່ເຮັດວຽກພາຍໃນ node ໃດໜຶ່ງ

Services and Labels

services ນັ້ນຄື router ຫຼື endpoint ຂອງບັນດາ pods ທີ່ຖືກ scale ຫຼື ຍັງບໍ່ຖືກ scale ກໍ່ຕາມເຊິ່ງມັນກໍ່ໝາຍເຖິງເວລາທີ່ເຮົາ scale application ອອກເປັນຫຼາຍໆ replicate ແລ້ວເຮົາຈະມີໜຶ່ງຊ່ອງທາງເຂົ້າເຖິງ app ເຊິ່ງກໍ່ຄື IP ທີ່ສາມາດ access ຈາກທາງນອກນັ້ນຫລ່ະ(ເວົ້າແບບບ້ານໆ). ໃຫ້ເຂົ້າໃຈວ່າ IP ຂອງ pods ບໍ່ສາມາດເຂົ້າເຖິງໄດ້ຈາກພາຍນອກຕ້ອງເຮັດເປັນ services ເທົ່ານັ້ນຈື່ງສາມາດເຂົ້າເຖິງຈາກນອກ

ສ່ວນ Labels ກໍ່ເປັນພຽງໂຕທີ່ໃຊ້ກຳກັບວ່າ services ໃດເປັນຂອງ deployment ໃດເພື່ອງ່າຍຕໍ່ການອ້າງເຖິງ

Scaling

ການ scale ກໍ່ຄືການ replicate pods ອອກໄປຕາມຈຳນວນທີ່ຕ້ອງການ ແລະ ຕ້ອງເຂົາໃຈວ່າການ scale ໃນ k8s ບໍ່ແມ່ນການ scale service ແຕ່ແມ່ນການ scale pods ອອກໄປເຊິ່ງຈະນັບເປັນ 1 service ຖ້າຕ້ອງການຫຼາຍ service ກໍ່ຕ້ອງສ້າງ deployment ຂຶ້ນມາ scale ອີກ.

ກ່ອນ scale
ຫຼັງ scale

To be continued

ນີ້ຄືພື້ນຖານກ່ອນທີ່ເຮົາຈະນຳ k8s ມາໃຊ້ໃນບົດຄວາມຕໍ່ໄປຫວັງວ່າຄົງຈະມີປະໂຫຍດ ແລະ ຖ້າບໍ່ເຂົ້າໃຈຫຍັງໃນບົດຄວາມກໍ່ comment ຖາມກັນມາໄດ້ເພາະຄິດວ່າບົດຄວາມຍັງບໍ່ລະອຽດພໍ ໄວ້ພົບກັນໄໝ່ໃນບົດຄວາມຕໍ່ໄປ.

--

--