ถ้าไม่มี Linux อาจจะไม่มี Container

ถ้าไม่มี Linux อาจจะไม่มี Container
แล้วมันเกี่ยวอะไรกับ OpenStack ?

(คำเตือน! เนื้อหายาววว ขอคารวะคนอ่านจบ)
ซอยถี่ๆมาแล้วอ่านจบกดแชร์ไปให้เพื่อนรักครับ 🙏

โพสนี้แอดอยากชวนเล่า/อ่านเรื่องราวของคอนเทนเนอร์
หลาย ๆ คนแอดเชื่อว่านรู้จักดีอยู่แล้วพร้อมใช้งานอยู่แล้ว
แต่ก็อยากบังคับอ่าน 😄

โพสนี้แอดจะลากแฟนคลับเพจซูเซ่แมนเรา
ไปรู้จักการเทคโนโลยีคอนเทนเนอร์…

จริง ๆ เทคโนโลยีคอนเทนเนอร์มีมานานแล้วครับ
สำหรับผู้ใช้ Linux น่าจะรู้จักกับ “LXC” ซึ่งเป็นเทคโนโลยี virtualization ในระดับระบบปฏิบัติการ
(operating-system-level) ครับ ^^

หรือหลาย ๆ คน
น่าจะคุ้น ๆ กับซอฟต์แวร์อย่าง OpenVZ
มันเป็นซอฟต์แวร์ container-based ที่เป็น virtualization
ที่ติดตั้งบนลีนุกซ์ หากกล่าวถึงบริการโฮสติ้ง VPS
(หรือบริการ Vitural Private Server)
ใครเขาก็ใช้ OpenVZ นี่แหละครับ

OpenVZ ไม่ใช่ KVM หรือ Xen แต่อย่างใด !!

OpenVZ เป็นซอฟต์แวร์ที่เอาไว้รันซอฟต์แวร์แอพพลิเคชั้นระบบ container แต่ KVM หรือ Zen เป็นซอฟต์แวร์เทคโนโลยี virtualization สำหรับสร้างเครื่องเสมือนจริง (VMs)
ที่ใช้ทรัพยากรจากเครื่องเซิร์ฟเวอร์เพียงเครื่องเดียว

หากฝั่งระบบปฏิบัติการ Windows ก็จะเป็นซอฟต์แวร์จากค่าย VMWARE เช่น VMware ESXi หรือซอฟต์แวร์อย่าง VirtualBox เป็นต้นครับ

หากดูจากไทม์ไลน์จะเป็นได้ว่า…
จุดเริ่มต้นมันมาจากมนุษย์เรานี่แหละ 555+++

(เล่าให้เห็นภาพ)
พอซื้อเซิร์ฟเวอร์แพง ๆ มา
แต่รันเพียงแค่พลิเคชั่นเดียว
เลยคิดว่า…เราจะพัฒนาอะไรขึ้นมาซอย
ใช้ทรัพยากรจากเครื่องที่เราซื้อมาได้ไหม???

จากจุดเริ่มต้น
ก็เลยเป็นที่มาของเทคโนโลยี virtualization

พอมันเป็นเทคโนโลยี virtualization
เวลาที่สร้างเครื่อง VM
มันก็ต้องมีระบบปฏิบัติการแล้วมีแอพพลิเคชั่น

(แอดขอยกตัวอย่างให้เห็นภาพ)

หลังจากซื้อเซิร์ฟเวอร์มา 1 เครื่อง
เราก็จะดำเนินการติดตั้ง Linux server
แล้วลงซอฟต์แวร์ Zen
(หรือเครื่องลงระบบปฏิบัติการ VMware ESXi ไปเลย)

เมื่อต้องการติดตั้งระบบปฏิบัติการ Windows server
เราก็ต้องสร้างเครื่อง VM ขึ้นมา
แล้วเลือกลงระปฏิบัติการ Windows
(ซึ่งอาจจะลงผ่าน iso ไฟล์)

ปัญหาคือ…
กระบวนการทุกอย่าง “ช้า” 555+++
บูตก็นาน อีกอย่าง VM ตายที
จุดธุปเรียกก็ไม่ขึ้น 😅

นั้นแหละครับ ปัญหา ^^

(จริง ๆ ไม่ได้มีแค่นั้นเหรอครับ)
เวลาพัฒนาซอฟต์แวร์ขึ้นมาต้องเขียนเพื่อรองรับ
ระบบเวอร์ชั่นนั้น
พอจะย้ายซอฟต์แวร์ไปรันเซิร์ฟเวอร์เครื่องอื่น ๆ
ที่เวอร์ชั่นแวร์ต่างเวอร์ชั่นกันกลับรันไม่ได้

วิธีแก้ไขก็มีนะ

เขียนโค๊ซใหม่ซิ 55 ++
(ขอใบเสนอราคา) 😄

ถัดมา…
ก็มนุษย์แวดวงไอทีเราเหมือนเดิมนี่แหละ
ที่ตั้งคำถาม คิดต่ออีก…

เราจะพัฒนาหรือมีเทคโนโลยีอะไร
ให้ช่วยให้มันบูต/ติดตั้งแอพพลิเคชั้นได้อย่างเร็ว(กว่านี้ได้ไหม?)
โดยที่ไม่ต้องไปลงระบบปฏิบัติการ คือ…
ใครอยากเอาแอพพลิเคชั่นอะไรมารันก็รันได้เลย

นี่จึงเป็นจึงกำเนิด Docker
(มันเปิดตัวปี 2013 โดยบริษัท Docker Inc.)
มีธุรกิจด้านนักพัฒนา (Docker Desktop และ Docker Hub)
และธุรกิจฝั่งลูกค้าองค์กร (Docker Enterprise)

Docker เป็นซอฟต์แวร์รันไทม์
ที่ต้องติดตั้งเพื่อเอาไว้รันแอพพลิเคชั่น
ที่อยู่ในรูปแบบคอนเทนเนอร์ครับ

(อารมณ์ประมาณว่าฉันรันได้ทุกสภาพแวดล้อม)

เดี๋ยว!!
ไม่ใช่เขียนโปรแกรม VB
หรือภาษาอื่น ๆ build เป็น .exe มารันบน Docker น่าาาา😅
มันมีรูปแบบสถาปัตยกรรมของมัน

(ใครอ่านมาถึงตรงนี้ ช่วยแชร์โพสด้วยนะ)
ขอกันตรง ๆ ตอนนี่แหละ อยากได้ยอดแชร์ 555++ ^^

มาาา เข้าสาระกันดีกว่าครับ
ที่นี่เรามาดูสถาปัตยกรรม Docker กัน

Docker แยกออกเป็น 3 ส่วน

เชื่อแอดเถอะ แอดเรียนมา 😁

1. Client
2. Docker Host
3. Registry

ฝั่ง Client ก็เป็นนักพัฒนา ผู้ใช้ที่ต้องการ
build, pull, run

ฝั่ง Docker Host คือเครื่องเซิร์ฟเวอร์ที่ให้บริการ Docker Daemon เซอร์วิส
และฝั่ง Registry ก็คือคลังเก็บอิมเมจ
(หรือ repository ที่เก็บแพคเกจซอฟต์แวร์บนลีนุกซ์เรานั้นแหละครับ)

(แอดขอยกตัวอย่างให้เห็นภาพ)

สมุติว่าเราจะติดตั้ง Web server บนเครื่อง Laptop ของเรา
ปกติเราก็จะติดตั้ง AppServ หรือ XAMPP ที่ผู้พัฒนาได้รวมซอฟต์แวร์ที่จำเป็นสำหรับทำ Web server มาให้เราพร้อมใช้แล้ว

ซึ่ง Web server ​มันก็จะมี stack ที่ประกอบไปด้วย
ซอฟต์แวร์ที่ทำหน้าที่เป็นเว็บเซอร์เวอร์ เปิดพอร์ต 80 หรืออื่นๆ
ซอฟต์แวร์เช่น Apache, NGINX เป็นต้น
และมีซอฟต์แวร์ส่วนของฐานข้อมูล เช่น MySQL, MariaDB
และส่วนสุดท้ายก็เป็นซอฟต์แวร์รันโปรแกรมต่าง ๆ เช่น PHP ครับ

พอผู้พัฒนามัดรวมมันเข้าด้วยกันก็เลยเป็นซอร์ฟแวร์สำเร็จรูป
สำหรับผู้ใช้ Windows อย่างที่เราใช้กันเต็มบ้าน เต็มเมืองอย่าง XAMPP ครับ

ถ้าคิดตามจะเป็นได้ว่าแม้มันจะเป็นชุดซอฟต์แวร์สำเร็จรูป
แต่เวลาที่ใช้ใจการติดตั้งม้นยังคงกินเวลาเช่นเดิม
อย่างน้อยก็ 10-15 นาที

แล้วมันมีอะไรไหมที่รัน Apache, NGINX ขึ้นมาเลยในเวลา 60วิ
แหละนี่แหละจุดมาของ Docker ครับ

(นี่แอดลากยาววว มันขนาดนี้ เมื่อไหร่จะเข้า Kubernetes 55++)

จะใช้ Docker ได้ต้องทำไง?

1. ติดตั้งโปรแกรม Docker ที่เครื่อง Laptop ที่เป็น
ระบบปฏิบัติการ Windows, MacOS หรือ Linux รองรับหมดครับ

2. เมื่อ Docker ถูกติดตั้งและรันแล้ว
คุณอยากรันแอพพลิเคชั่นอะไรก็แค่
ไปค้นหาแอพพลิเคชั่นใน Registry ว่ามี image แอพพลิชั่นนี้ไหม?

3. ถ้ามีคุณก็แค่ pull มันลงมาแล้วสั่งรันมันครับ

เช่น อยากติดตั้งแอพพลิเคชั่น WordPress

docker pull wordpress

จากนั้นก็แค่สั่งให้ทำงาน
พิมพ์คำสั่ง

docker run --name some-wordpress -p 8080:80 -d wordpress

หรือเราจะเขียนเองไฟล์คอนฟิก
กำหนด environment ภายใน container เอง
ก็ให้สร้างไฟล์ docker-compose.yml ขึ้นมา(สร้างไฟล์ชื่ออื่นๆ ไม่ได้นะครับ 555++)

อันนี้แอดก็ไม่รู้เหตุผล 555 เขาคงต้องการให้เป็นมาตราฐานมั้ง

เขียนโค๊ชเสร็จ ก็แค่รันด้วยคำสั่ง

docker-compose up -d docker-compose.yml

จากนั้นก็เปิด Web browser เช่น ใส่พอร์ตตามที่เราคอนฟิกไว้
http://localhost:8080/

บนสถาปัตยกรรม Docker เราจะสร้างกี่ Container ก็ได้
ขึ้นอยู่กับทรัพยากรเซิร์ฟเวอร์รับไหวไหม

ที่นี่พอมันมี Container เป็นหมื่น เป็นแสนตัว
คำถามคือเราจะควบคุมมันยังไง?

แหละจุดนี้แหละจึงเป็นที่มาของ Kubernetes ครับ
เขาย่อชื่อหล่อ ๆ ว่า k8s
เลข 8 มาจากจำนวนตัวอักษรตั้งแต่ตัว u-e

(คิดได้ไง ^^ 55)

Kubernetes เป็นซอฟต์แวร์ที่เอาไว้บริหารจัดการคอนเทนเนอร์
เปิดตัวปี 2558 สร้างขึ้นโดย Google ปล่อยให้ใช้ฟรีเป็นโอเพ่นซอร์สคอนเทนเนอร์ (จริงๆ Google ทำใช้เองมานานแล้ว 55++)
เราสามารถติดตั้ง Kubernetes ได้บนเครื่องเซิร์ฟเวอร์หรือติดตั้งบน
virtualization อย่าง VMware หรือบนคลาวด์ เช่น AWS หรือ GCP ครับ

สถาปัตยกรรม Kubernetes ประกอบไปด้วย…

Kubernetes อ่านว่า “คูโบเน็ท” (ทิ) ให้อยู่ในลำคอ 555++

1. Master เครื่องที่ทำหน้าที่เป็นผู้จัดการคุมวง และ Node
2. Pods
3. Deployments

ซึ่งในแต่ละ Pods ก็จะมี Container Runtime อยู่
และมี Kuberlet ที่ทำหน้าที่ติดต่อกับ Kubectl ฝั่งผู้ใช้ครับ

(ลืมบอกไป AWS หรือ GCP เขาก็มีบริการ Kubernetes อยู่แล้ว)

คือเราไม่ต้องลงไม่ต้องคอนฟิกอะไรแล้วเปิดใช้บริการแล้ว
เข้าไปสร้าง Cluster ระบุจำนวน Node ได้เลยครับ

ที่นี้หากถามว่ามันจัดการหรือควบคุม Container ยังไง?

ตัวอย่างเช่น แอพพลิชั่น NGINX ที่รันบน Pods ของ Node1
หากมันตาย เจ้า k8s นี่สามารถสั่งสร้าง NGINX ที่จะไปรันอยู่บน Pods อื่น ๆ ได้

หรืออยู่กรณีหากต้องการขยาย NGINX เพื่อรับโหลดการเข้าเว็บ
เราก็สามารถสั่งขยายได้แบบอัตโนมัติ เช่น กำหนด schedule ว่า
หาก CPU ใช้งานโหลดถึง 90% ให้สร้าง NGINX คอนเทนเนอร์ขึ้นมาเพิ่มได้ และหากระบบกลับสู่ปกติแล้วก็ให้สั่งปิดลบคอนเทนเนอร์ทันที

ความเหมือน(ที่แตกต่าง)ระหว่าง Docker กับ Kubernetes

– ทั้ง Docker และ Kubernetes สามารถติดตั้งได้บน vm และ Cloud แพลตฟอร์ม
– Docker ติดตั้งง่าย และ Kubernetes ค่อนช้างซับซ้อน
– Docker ไม่มีแดชบอร์ด GUI ให้ใช้
ส่วน Kubernetes มี Web UI กราฟฟิกโหมด
– ความสนใจ Trends ที่คนค้นหามากสุด
ก็คงยกให้ Docker ที่เป็นที่รู้จักมากกว่า Kubernetes
(ปี 2015-2019)
– บางครั้งหากคอนเทนเนอร์หยุดทำงาน (ตาย) ข้อมูลที่อยู่ภายในอาจเสียหายและปรับขนาดคอนเทนเนอร์ไม่ได้
– Kubernetes ไม่ใช่ High Availability
คุณต้องติดตั้งมันบนคลัสเตอร์หรือระบบโครงสร้างพื้นฐานอย่าง OpenStack ที่เป็นคลาวด์แพลฟอร์ม


สรุป: Docker บริหารทรัพยากรได้มีประสิทธิภาพมากว่าเครื่องเสมือน (VM) ส่วน Kubernetes เป็นเทคโนโลีโอเพ่นซอร์สคอนเทนเนอร์

🧯สุดท้ายการเลือกใช้เทคโนโลยี
ก็อยู่ที่ว่าเราจะนำมันมาใช้แก้ไขปัญหาในจุดไหนมากกว่า
ใช้ตามเทรนด์ให้ดูหล่อ ดูแท้นะคร้าบบ

เนื้อหายาวขนาดนี้
แอดอยากรู้ว่ามีใครอ่านจบบ้างครับ
ช่วยพิมพ์ความในใจ 😍 และบอกเวลามาหน่อย
แอดขอคารวะคนอ่านจบ 🙏 อ่านเพลินมาก

หรือคนที่ไถลงมาอ่านบรรทัดล่างสุด 😄
แล้วพิมพ์อ่านจบ 55+++

ไม่ว่ากันครับ หากมีประโยชน์กดฝากกดแชร์ไปให้น้อง ๆ เพื่อน ๆ เราได้อ่านกันด้วยน่าาาา ขอบคุณครับ

#SUSEMAN #DOCKER #KUBERNETES #K8S

Leave a Reply

Scroll to top