K8S กึ่งสำเร็จรูป
หลังจากบทความแรกๆ ที่เคยเขียนเกี่ยวกับการทำ K8S หรือ Kubernetes แบบ Single Node ไว้ใช้งานเองไปแล้วนั้น
แต่.. พอมาวันนี้ อยากบอกว่า ทำไม่ได้แล้วครับ เอิ๊กๆ
เหตุผลก็เพราะว่าตัว K8S ดันไม่รองรับกับ Docker 18.09 (เป็น Version ปัจจุบันในขณะนี้ครับ) และอีกเหตุผลหนึ่งก็คือ Docker For Windows ไม่ยอมปล่อย Hard disk ให้สามารถเอาไปใช้งานอย่างอื่นได้เลยครับ (Hyper-V วิ่งเล่นซะอย่างกับสนามแข่งรถ F1) ก็เลยลองๆ หาดูว่าพอจะมีวิธีทำอย่างอื่นบ้างหรือเปล่า ก็เลยมาจบตรงที่ใช้ VM เอาเหมือนเดิม เพิ่มเติมคือลงแค่ Ubuntu และใช้คำสั่งแค่ ไม่กี่คำสั่งเท่านั้นครับ สงสัยแล้วละสิว่าทำยังไง มาเริ่มกันเลยดีกว่าเนาะครับ
ขั้นตอนแรกเราก็จะไปสร้าง VM ขึ้นมา 1 ตัว โดยใช้สเปกตามนี้เลยครับ

ส่วนวิธีการสร้าง VM และติดตั้ง Ubuntu Server ผมขอข้ามนะครับ และสำหรับในบทความนี้จะใช้ Ubuntu 18.04.1 ครับ และเพิ่มเติมเกี่ยวกับการเลือกติดตั้ง Feature ของ Ubuntu เราจะไม่เลือกลงอะไรเลยนะครับ กดผ่านไปได้เลยครับ
(ในภาพข้างล่างครับ)

ต่อจากนั้นหลังจากที่เราติดตั้ง Server เราเสร็จแล้วเราก็จะทำการอัพเดทด้วยคำสั่ง ดังนี้
~$ sudo apt-get update \
&& sudo apt-get upgrade -y \
&& sudo apt-get dist-upgrade -y \
&& sudo apt-get clean \
&& sudo apt-get autoremove -y

หลังจากนั้นก็ทิ้งเอาไปแล้วไปห้องน้ำก่อน หรือใครจะไปหากาแฟมากิน หรือจะงีบหลับรอไปก่อนเลยก็ได้ครับ

หลังจากที่อัพเดทเสร็จแล้วจากนั้นเราก็จะมาทำการติดตั้ง K8S กัน โดยเราจะติดตั้งผ่าน Snap ของ Ubuntu กันครับ โดยเราจะใช้คำสั่งนี้ เพื่อติดตั้ง MicroK8s ครับ
~$ sudo snap install microk8s --classic
สำหรับถ้าใครต้องการเช็คดูว่ามี Version ไหนบ้างก็ใช้คำสั่งนี้สำหรับแสดง version
~$ snap info microk8s
และสำหรับคำสั่งติดตั้งแบบระบุ version เราก็จะใช้คำสั่ง
~$ snap install microk8s --channel {version/channel} --classic
แต่ผมแนะนำว่าตัวล่าสุดดีกว่าครับ

หลังจากที่รอจนหน้าจอแสดงเหมือนภาพข้างล่างแล้วก็เสร็จแล้วครับ สำหรับขั้นตอนติดตั้ง Kubernetes ตอนนี้ก็พร้อมใช้งานแล้วครับ ของผมใช้คำสั่งแค่ 2 คำสั่ง
คืออัพเดท Ubuntu และติดตั้ง MicroK8s เท่านั้นครับ

ถ้าไม่เชื่อลองใช้คำสั่งนี้เช็คดูก็ได้ครับ
~$ microk8s.kubectl get all --all-namespaces

หรือจะเช็คดูข้อมูลของ cluster ก็ใช้คำสั่งนี้ครับ
~$ microk8s.kubectl cluster-info

ส่วนคำสั่งนี้สำหรับดูข้อมูลของ Node ครับ
~$ microk8s.kubectl get no

หลังจากนั้นเราก็จะมาเปิดใช้งาน DNS Dashboard กันด้วยคำสั่งนี้ครับ
~$ microk8s.enable dns dashboard

สำหรับการเข้าดูข้อมูลใน DNS Dashboard เราจะใช้คำสั่งนี้ครับ
~$ watch microk8s.kubectl get all --all-namespaces

ถ้าไม่ชอบหน้าจอดำๆ เราก็มีหน้าจอแบบเดิมๆ ที่สามารถเข้าใช้งานจากเครื่องอื่นได้เหมือนกัน โดยเราจะใช้คำสั่ง enable dns dashboard เหมือนเดิม แต่เพิ่มเติมคือ ตามนี้ครับ
~$ microk8s.enable dns dashboard ingress

จากนั้นก็จะใช้คำสั่งนี้เพื่อให้เครื่องอื่นสามารถเข้าใช้ Dashboard ได้จาก Browser ครับ
~$ microk8s.kubectl proxy --accept-hosts=.* --address=0.0.0.0 &

สำหรับการเข้าหน้า Dashboard ผ่าน Browser ก็จะใช้ url นี้ครับ
http://{your_micro8ks_host_name}:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
เมื่อเข้ามาแล้วก็จะเจอหน้าต่างนี้ กด Skip ไปเบาๆ เลยครับ

แล้วเราก็จะเข้าสู่หน้า Dashboard ที่คุ้นเคยแบบนี้ครับ

แต่ถ้าการเรียกใช้ microk8s.kubectl ยาวไป เราก็จะมาทำให้สั้น ด้วยการใช้คำสั่งนี้
~$ sudo snap alias microk8s.kubectl kubectl
ก็จะสามารถเรียกใช้คำสั่งแบบสั้นๆ ได้แบบนี้ครับ

ถ้าเกิดว่าเราจะใช้ Docker เราก็สามารถใช้คำสั่งเหมือนกับ docker ทุกอย่างเลยครับ อย่างเช่น Pull image เหมือนในภาพ

เราสามารถใช้คำสั่งนี้ เพื่อดูคำแนะนำและรายชื่อของ Add-On ที่ติดตั้งมาด้วยได้ครับ
~$ microk8s.enable --help

สำหรับคำสั่งสำหรับตรวจสอบว่า Kubernetes ที่เราติดตั้งมีปัญหาในการทำงานอะไรบ้างที่ทำให้เราไม่สามารถ Access หรือ Start ได้จะใช้คำสั่งนี้ครับ
~$ microk8s.inspect

และสุดท้ายสำหรับการลบ Kubernetes ออก เราก็จะใช้คำสั่งนี้ครับ
~$ sudo snap remove microk8s

สำหรับบทความนี้ก็จะออกแนวๆ แนะนำการใช้งานซะมากกว่าครับ ไม่ได้เป็นแนวขายของใดๆ นะครับ แหะๆ หวังว่าพอจะมีประโยชน์ไม่มากก็น้อยสำหรับคนที่ต้องการเริ่มต้นกับ K8s กันนะครับ
หากมีข้อผิดพลาดประการใดก็ขอกราบขออภัยมา ณ ที่นี้ด้วยครับ
ขอบคุณครับ
** Update 12/12/2018 **
เพิ่มเติมสำหรับ pod ที่เราสร้างขึ้นมาแล้วไม่สามารถ Access เข้า Internet ได้ เช่นเราติดตั้ง Jenkins แล้วต้องมีการ Install Plug-In ในตอนแรก แต่ติดปัญหาโหลดไฟล์ไม่ได้ ให้ใช้คำสั่งนี้ครับ
$> sudo iptables -P FORWARD ACCEPT
หรือถ้าใครใช้งาน UFW อยู่ ก็สามารถใช้คำสั่งนี้ได้ครับ
$> sudo ufw default allow routed
ส่วนการ Restart เราจะใช้คำสั่ง stop และ start ครับ
$> microk8s.stop
$> microk8s.start
และเพิ่มเติมสำหรับการ Remove แนะนำให้ใช้คำสั่ง reset ก่อน เพื่อหยุดการทำงานของ pod ทุกตัวก่อนที่จะทำการ remove ครับ สำหรับคำสั่งก็ตามนี้ครับ
$> microk8s.reset
$> sudo snap remove microk8s
Reference : MicroK8s, MicroK8s Github