2B DevOps | HA K3s cluster EP.1 — Preparation for HA K3s cluster
หากผู้อ่านผ่านมาเจอบทความนี้ แต่ยังไม่รู้จักว่า K3s คืออะไร หรืออยากทำความรู้จัก K3s ก่อนที่จะมาลองใช้งานกัน สามารถทำความรู้จักได้ที่
สำหรับซีรีย์นี้เราจะมีการจำลองสภาพแวดล้อมแบบ on-premise ขึ้นมาโดยการสร้าง VM instance ขึ้นมาจำลองกลุ่มเครื่องเซิร์ฟเวอร์ เพื่อใช้เป็นโครงสร้างพื้นฐานในการรัน K3s cluster โดยก่อนที่เราจะทำการสร้าง K3s cluster ขึ้นมา เราจะต้องมีการเตรียมโครงสร้างพื้นฐานอื่นๆ ก่อนที่จะทำการติดตั้งและตั้งค่า K3s cluster กัน
ในตอนนี้ของซีรีย์ เราก็จะพาทุกท่านมาทำความรู้จักกับซอฟต์แวร์ และเครื่องมืออื่นๆ ที่เราจะนำมาใช้จำลองโครงสร้างพื้นฐานและขั้นตอนการ setup แต่ละเครื่องมือแบบเป็นขั้นเป็นตอน โดยเครื่องมือที่จะนำมาใช้มีดังนี้
- Hyper-V
- Ubuntu Server 22.04.3
- HAProxy
- Keepalived
- kube-vip
What’s…
ก่อนอื่นเราจะพาผู้อ่านทุกท่านมาทำความรู้จักกับซอฟต์แวร์และเครื่องมือต่างๆ ที่จำเป็นต้องใช้กันครับ
Hyper-V
Hyper-v เป็นเครื่องมือที่ใช้ในการสร้าง VM intance บน Windows ที่มีมาให้พร้อมกับระบบปฏิบัติการอยู่แล้ว ซึ่งเราสามารถเข้าไปเปิดการตั้งค่าเพื่อใช้งานได้เลย
Ubuntu Server
Ubuntu server เป็นระบบปฏิบัติการแบบลินุกซ์ ซึ่งถูกออกมาเพื่อการใช้งานในระบบ Cloud และ Datacenter ซึ่ง ณ ขณะที่เขียนบทความนี้เวอร์ชัน LTS ของระบบปฏิบัติการนี้จะเป็นเวอร์ชัน 22.04.3
HAProxy
HAProxy เป็นเครื่องมือที่ใช้ในการทำ Load balancer
Keepalived
Keepalived ในที่นี้จะทำหน้าที่เป็นตัวจัดการว่าในขณะหนึ่ง เซิร์ฟเวอร์ตัวไหนจะรับ traffic จาก Virtual IP ที่ตั้งค่าไว้กับมัน กล่าวคือ ถ้ามีเซิร์ฟเวอร์ 2 เครื่อง ได้แก่เครื่อง master และ master backup ตั้งค่า VIP เป็น 10.1.1.3 เหมือนกัน สภาวะปกติ (เครื่อง master ทำงานอยู่) traffic ที่วิ่งมาที่ VIP 10.1.1.3 ก็ถูกส่งต่อไปที่ master แต่ถ้าเมื่อไหร่ก็ตาม master หยุดทำงาน traffic เหล่านั้นก็จะวิ่งไปที่ master backup แทน
สั้น ๆ ก็คือ keepalived ให้ฟังก์ชัน High Availability นั้นหละครับ
kube-vip
kube-vip เป็นเครื่องมือตัวนึงที่สามารถนำมาใช้แทน HAProxy และ keepalived ได้ เนื่องจากสามารถทำหน้าที่เป็นได้ทั้ง load balancer และ HA function โดยที่ไม่ต้องสร้าง vm เพิ่มขึ้นมาอีก 2 ตัว เพื่อทำหน้าที่เป็น External load balancer
Understanding HA Cluster Structure
ก่อนจะไปลงมือปฏิบัติกัน ก่อนอื่นเราจะพาผู้อ่านมาทำความเข้าใจโครงสร้างของ Cluster และคำว่า HA กันก่อน
Cluster
ง่ายๆ เลยก็คือมากกว่า 1 เครื่อง ในการใช้งานจริงๆ ควรจะเป็นหลายเครื่องที่เป็น Physical สำหรับการใช้งานแบบ On-Premise หรือเป็น VM ที่อยู่แยกโซนกัน สำหรับการใช้งานแบบ On-Cloud แต่สำหรับซีรี่ย์นี้เนื่องจากเป็นเพียง Workshop จำลอง จึงเป็นลักษณะของการแยกเครื่องโดยใช้ VM บนเครื่อง Physical เดียวกันแทน
High Availability: HA
ถ้าแปลตรงตัวเลยก็คือ มีความพร้อมใช้งานสูง ให้เข้าใจง่ายๆ ก็คือการทำยังไงก็ได้ให้ cluster ตัวนี้ยังคงทำงานต่อไปได้ แม้จะมีสมาชิกบางตัวของ cluster ลมหายตายจากไป อีกทั้ง service ต่างๆ ที่รันอยู่ใน cluster ก็ต้องใช้ต่อไปได้ด้วยเช่นกัน
โอเค เมื่อเราเข้าใจ 2 คำนี้แล้ว ต่อมาก็จะเป็นองค์ประกอบที่ต้องมีใน cluster เพื่อที่จะทำให้ cluster นั้นพร้อมใช้งานอยู่เสมอ ซึ่งจะประกอบด้วยองค์ประกอบดังต่อไปนี้
- K3s Server
เสมือนเป็นคนคุมงานของกลุ่มเครื่องคอมพิวเตอร์ที่อยู่ใน cluster - K3s Agent
เสมือนเป็นคนทำงานต่างๆ ใน cluster - Load Balancer
ตัวชี้เป้าว่า request ที่วิ่งเข้ามาใน cluster ต้องไปที่ service ตัวไหนบนเครื่อง VM หรือ Physical ตัวไหน - External DB (Recommended)
จริงๆ แล้วการตั้งค่า cluster สามารถเลือกให้เก็บข้อมูลการตั้งค่าต่างๆ ไว้ที่เครื่องของ Server เองได้ แต่เพื่อให้ง่ายต่อการสำรองข้อมูล การที่นำข้อมูลมาเก็บไว้ในฐานข้อมูลส่วนกลางจะทำได้สะดวกกว่า - Virtual IP (VIP)
ถ้าผู้อ่านเห็นคำว่า VIP ในบทความนี้ให้หมายถึง Virtual IP นะครับ ไม่ใช่ Very important person ส่วน VIP ในที่นี้คืออะไร ตามความเข้าใจแบบง่ายๆ ของผู้เขียนก็คือ เป็น IP Address ที่ชี้ไปที่เครื่องเซิร์ฟเวอร์เครื่องใดเครื่องนึงชั่วคราว โดยจะไม่ได้สัมพันธ์กับอินเทอเฟสจริงของเครื่อง
ถ้าอ่านข้อความแล้วเข้าใจยาก ภาพประกอบอาจช่วยคุณได้
ต่อมาก็คือโซลูชันแบบไหนบ้างหละที่จะทำให้เราบรรลุเป้าหมายของคำเหล่านั้นได้ ในซีรีย์นี้เราก็จะลองยกตัวอย่างขึ้นมา 2 โซลูชันด้วยกัน ได้แก่
- HA K3s cluster with HAProxy and Keepalived as Load Balancer
- HA K3s cluster with kupe-vip as Load Balancer
HA K3s cluster with HAProxy and Keepalive as Load Balancer
โซลูชันนี้เป็นแบบที่เป็นตัวอย่างในเว็บไซต์หลักของ K3s ซึ่งจะให้ HAProxy ซึ่งเป็น Layer 7 ของ OSI ทำหน้าที่เป็น Load Balancer และจะทำงานคู่กับ Keepalived ที่จะคอยจัดการเรื่อง VIP ที่ชี้ไปยัง API Server ของ cluster
HA K3s cluster with kube-vip as Load Balancer
โซลูชันนี้เป็นอีกตัวอย่างที่ผู้เขียนศึกษาเพิ่มมา ประกอบกับเคยใช้ตอนทดลองทำ HA K8s cluster โดยข้อแตกต่างก็คือ kube-vip จะมาทำหน้าที่แทน ซึ่ง load balancer ของ kube-vip จะทำงานอยู่ที่ Layer 2 หรือ 3 ของ OSI ขึ้นอยู่กับการตั้งค่าว่าจะใช้ ARP หรือ BGP และ kube-vip จะเป็น service หนึ่งที่รันอยู่ใน cluster
เอาเข้าจริงๆ ตอนแรกก็ว่าจะทำแบบทางสายกลางนะ แต่ดูไปดูมาก็บานปลายใหญ่โตเหมือนกันแฮะ
Prerequisites
- เครื่องคอมพิวเตอร์พร้อมระบบปฏิบัติการ Windows 10/11 Pro/Education
สามารถใช้เวอร์ชันก่อนหน้าได้ ขั้นตอนไม่ได้ต่างกันมาก แต่เครื่องต้องรองรับ Virtualization (VT) และควรจะมีคุณสมบัติขั้นต่ำดังต่อไปนี้
CPU: 4 Core
RAM: 16 GB
Disk (SSD): 20 x 8 = 160 GB - Ubuntu Server 22.04.3 ISO file
คลิกที่ลิงค์ download เพื่อโหลดไฟล์ image สำหรับใช้ติดตั้งระบบปฏิบัติการบน Ubuntu Server บน VM อาจจะบันทึกไว้ที่ “C:/Users/_username_/Desktop/ISO” เพื่อสะดวกต่อการทำตามตัวอย่าง - Understanding network diagram
ภาพด้านล่างจะเป็น network diagram ที่แสดงโครงสร้างการเชื่อมต่อกับระหว่างอุปกรณ์ต่างๆ ในเครือข่าย ทั้งที่เป็นฮาร์แวร์และซอฟต์แวร์
จากแผนภาพด้านบนจะเป็น network diagram ที่โฟกัสไปที่โซลูชันที่ 2 ซึ่งใช้ kub-vip จะมีรายละเอียดดังนี้
- มี Router ที่เชื่อมต่อออกอินเทอร์เน็ต ซึ่งเครื่องคอมพิวเตอร์ที่เราใช้ทดลอง (Host) เชื่อมต่ออยู่ และได้รับ IP Address เป็น 192.168.x.10 (เป็นการทำ static ip address ที่เครื่อง host)
- ภายในเครื่อง host มีการสร้าง virtual switch (v-switch) ขึ้นมาตัวนึงชื่อว่า K3s โดยมีการตั้งค่า NAT วงเครือข่าย 192.168.x.0/24 กับ 10.1.1.0/24 ซึ่งเป็นเครือข่ายภายใน เพื่อที่จะทำให้เครื่อง vm ที่อยู่ภายใน สามารถติดต่อไปยังอินเทอร์เน็ตได้
- สำหรับ vm ที่อยู่ภายในจะมีการตั้งค่า static ip address โดยชี้ไปที่เกตเวย์คือ 10.1.1.1 เป็น ip address ของ v-switch
- 10.1.1.2 เป็น virtual IP ที่มีการตั้งค่าขึ้นมาภายหลัง ขึ้นอยู่กับโซลูชันที่เลือกใช้ เพื่อทำให้ K3s server หรือ Control plane มีสถานะเป็น HA
Pre-Installation Setup: Step by step
ขั้นตอนในการการ setup จะมีดังต่อไปนี้
- เปิดใช้งาน Hyper-V บนเครื่องโฮสต์ที่เป็น Windows 10/11
- สร้าง Virtual Switch สำหรับ K3s cluster โดยเฉพาะ
- ตั้งค่า NAT ให้กับ Virtual Switch
- สร้าง VM instance บน Hyper-V จำนวน 3 ตัว สำหรับเป็น K3s server โดยใช้ command ผ่าน Terminal (เนื่องจากต้องการทำ High Availability: HA)
- สร้าง VM instance บน Hyper-V จำนวน 2 ตัว สำหรับเป็น K3s agent โดยใช้ command ผ่าน Terminal
- สร้าง VM instance บน Hyper-V จำนวน 2 ตัว สำหรับเป็น Load balancer โดยใช้ command ผ่าน Terminal
- รัน VM instance ทั้ง 3 ตัวสำหรับ Server และติดตั้งระบบปฏิบัติการ Ubuntu Server
- รัน VM instance ทั้ง 3 ตัวสำหรับ Agent และติดตั้งระบบปฏิบัติการ Ubuntu Server
- รัน VM instance ทั้ง 2 ตัวสำหรับ Load Balancer และติดตั้งระบบปฏิบัติการ Ubuntu Server
- ตั้งค่า Static IP Address ให้กับแต่ละเครื่องในเครือข่ายตาม Network Diagram
Enable Hyper-V on Windows 10/11
- กดปุ่ม Start หรือ กดช่อง Search บน Task bar
- พิมพ์ “Turn Windows features on or off” และคลิกเลือก
- มองหาตัวเลือก “Hyper-V” และกดเครื่องหมาย “+”
- ทำเครื่องหมายถูกในช่อง “Hyper-V Management tools” และ “Hyper-V Platform” หรือทำเครื่องหมายถูกที่ช่อง “Hyper-V” ก็ได้เช่นกัน
- รีสตาร์ทระบบเพื่อเปิดใช้งาน
Create a Virtual Switch for a K3s Cluster (using UI)
- กดปุ่ม Start หรือ กดช่อง Search บน Task bar
- พิมพ์ “Hyper-V” และคลิกเลือก
- มองหาชื่อเครื่องของเราในช่องทางซ้ายมือและคลิกเลือก
- ทางช่อง “Actions” ทางขวามือ มองหาเมนู “Virtual Switch Manager…” และคลิกเลือก
- ในหน้าต่าง Virtual Switch Manager ที่ปรากฎขึ้นมา ในช่อง Virtual Switch ให้เลือก “New virtual network switch” และกดปุ่ม Create Virtual Switch ในช่อง Create virtual switch ทางขวา
- กรอกข้อมูลตามภาพตัวอย่างแล้วกดปุ่ม Apply เพื่อเป็นการสร้าง
Create a Virtual Switch for a K3s Cluster (using command-line)
- กดปุ่ม Start หรือ กดช่อง Search บน Task bar
- พิมพ์ “Terminal” และคลิกขวาแล้วเลือก “Run as administrator”
- พิมพ์คำสั่งด้านล่างแล้วกดปุ่ม Enter
New-VMSwitch -SwitchName K3s -SwitchType Internal
Config NAT for the Virtual Switch
- กดปุ่ม Start หรือ กดช่อง Search บน Task bar
- พิมพ์ “Terminal” และคลิกขวาแล้วเลือก “Run as administrator”
- พิมพ์คำสั่งด้านล่างแล้วกดปุ่ม Enter
Get-NetAdapter
New-NetIPAddress -IPAddress 10.1.1.1 -PrefixLength 24 -InterfaceIndex [index]
New-NetNat -Name K3sNAT -InternalIPInterfaceAddressPrefix 10.1.1.0/24
** [index] ในคำสั่งให้เปลี่ยนเป็น index ของ interface ที่ได้จากคำสั่ง Get-NetAdapter มองหา Adapter ชื่อ K3s
Create 3 VMs for Server on Hyper-V using Terminal
- กดปุ่ม Start หรือ กดช่อง Search บน Task bar
- พิมพ์ “Terminal” และคลิกขวาแล้วเลือก “Run as administrator”
- พิมพ์คำสั่งด้านล่างแล้วกดปุ่ม Enter
- เข้าไปที่ Hyper-V Manager ก็จะเห็น VM ที่เราเพิ่งสร้างปรากฎขึ้นในช่อง Virtual Machines
** อย่าลืมเปลี่ยน “_username_” ในคำสั่งเป็นชื่อผู้ใช้ที่เราใช้งานอยู่
New-VM -Name Server1 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\Server1.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName Server1 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
New-VM -Name Server2 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\Server2.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName Server2 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
New-VM -Name Server3 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\Server3.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName Server3 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
Create 3 VMs for Agent on Hyper-V using Terminal
- กดปุ่ม Start หรือ กดช่อง Search บน Task bar
- พิมพ์ “Terminal” และคลิกขวาแล้วเลือก “Run as administrator”
- พิมพ์คำสั่งด้านล่างแล้วกดปุ่ม Enter
- เข้าไปที่ Hyper-V Manager ก็จะเห็น VM ที่เราเพิ่งสร้างปรากฎขึ้นในช่อง Virtual Machines
** อย่าลืมเปลี่ยน “_username_” ในคำสั่งเป็นชื่อผู้ใช้ที่เราใช้งานอยู่
New-VM -Name Agent1 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\Agent1.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName Agent1 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
New-VM -Name Agent2 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\Agent2.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName Agent2 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
New-VM -Name Agent3 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\Agent3.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName Agent3 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
Create 2 VMs for Load Balancer on Hyper-V using Terminal
- กดปุ่ม Start หรือ กดช่อง Search บน Task bar
- พิมพ์ “Terminal” และคลิกขวาแล้วเลือก “Run as administrator”
- พิมพ์คำสั่งด้านล่างแล้วกดปุ่ม Enter
- เข้าไปที่ Hyper-V Manager ก็จะเห็น VM ที่เราเพิ่งสร้างปรากฎขึ้นในช่อง Virtual Machines
** อย่าลืมเปลี่ยน “_username_” ในคำสั่งเป็นชื่อผู้ใช้ที่เราใช้งานอยู่
New-VM -Name LB1 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\LB1.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName LB1 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
New-VM -Name LB2 `
-NewVHDPath C:\ProgramData\Microsoft\Windows\"Virtual Hard Disks"\LB2.vhdx `
-NewVHDSizeBytes 20GB `
-MemoryStartupBytes 2GB `
-SwitchName K3s `
Add-VMDvdDrive -VMName LB2 -Path "C:\Users\_username_\Desktop\ISO\ubuntu-22.04.3-live-server-amd64.iso"
Ubuntu Server installation on VMs
- บนหน้าต่าง Hyper-V Manager ในช่อง Virtual Machines คลิกเลือก VM ที่เราต้องการและคลิกขวาเลือกเมนู Connect ตามด้วย Start
- รอให้ image ของระบบปฏิบัติการบูทจนกระทั่งขึ้นขั้นตอนการติดตั้ง ให้ดำเนินการตามตัวอย่างในวิดีโอด้านล่าง
Static IP Address on Ubuntu Server
- บนหน้าต่าง Hyper-V Manager ในช่อง Virtual Machines คลิกเลือก VM ที่เราต้องการและคลิกขวาเลือกเมนู Connect ตามด้วย Start
- รอจนกว่าระบบจะบูทเสร็จและปรากฏ prompt ให้ login (หากมีข้อความยาวๆ ปรากฏขึ้นตามหลัง ให้กดปุ่ม Enter หนึ่งครึ่งก่อน กรอกข้อมูลเข้าสู่ระบบ)
- เมื่อเข้าสู่ระบบแล้วสามารถดูวิธีการต่อตามวิดีโอด้านล่างได้เลยครับ
Tips
- หากมีปัญหาหรือมีการแจ้งเตือนข้อผิดพลาดเกี่ยวกับ Virtualization (VT) ลองตรวจสอบดูว่าได้ทำการเปิดใช้งาน VT แล้วหรือยัง ได้สามารถทำตามรูปภาพที่แนบมาได้ครับ ถ้ายังไม่ได้เปิดการใช้งาน สามารถเข้าไปเปิดการใช้งานผ่านทาง BIOS ของเครื่องครับ
สำหรับตอนต่อไปเราจะพาทุกท่านไปลงรายละเอียดเกี่ยวกับการติดตั้งและการตั้งค่า K3s cluster กันนะครับ รอติดต่อชมได้เลยครับ