Kubernetes Cluster Design: ทำไมไม่ควรมี Master Node แค่ 2 เครื่องสำหรับ HA

Kubernetes Cluster Design: Why Shouldn’t Have Only 2 Master Nodes for HA

Nopnithi Khaokaew (Game)
2 min readJun 18, 2021

— — — — — — — — — — — — — — —
สารบัญเนื้อหาทั้งหมด (My Contents)
— — — — — — — — — — — — — — —

การทำ HA สำหรับ Kubernetes cluster หมายความว่าใน cluster ของเราจะต้องมี master node มากกว่าหนึ่งตัวใช่มั้ยครับ? เพราะโดยทั่วไปแล้วการมี node จำนวน 2 ตัวก็ถือว่าโอเคแล้วในการหลีกเลี่ยง single point of failure

ใช่ครับ แต่ไม่ใช่สำหรับ Kubernetes

สำหรับ Kubernetes นั้นเมื่อเรามี master node มากกว่าหนึ่ง ในส่วนของ control plane components ต่าง ๆ จะต้องทำงานร่วมกัน และก็ไม่ได้มีปัญหาอะไรสำหรับ…

API server เพราะเราใช้ load balancer ช่วย distribute traffic ไปให้แต่ละ node ได้

และ controller manager รวมถึง scheduler เพราะจะใช้การเลือก leader ขึ้นมาโดยคนที่ไม่ได้เป็น leader ก็จะถูก lock process เอาไว้เป็น standby เพื่อป้องกัน duplicate job เกิดขึ้น

แต่สำหรับ ETCD ซึ่งเป็น key-value store database ที่ใช้เก็บข้อมูลต่าง ๆ ภายใน cluster เนี่ยแหละที่จะมีปัญหาในเรื่อง write consistency ถ้าหากมีหลายตัว เพราะเราไม่สามารถ write ข้อมูลพร้อมกันหลาย node ได้

ETCD จึงใช้ RAFT protocol เข้ามาช่วยในการเลือก leader ขึ้นมาเพื่อรับหน้าที่ในการ write แต่เพียงผู้เดียว(ส่วน node ที่เป็น follower จะ forward งานไป) และการ write จะถือว่าสำเร็จก็ต่อเมื่อ data ถูก replicate ไปยัง master node ได้เกินครึ่งหนึ่งของจำนวน master node ทั้งหมดที่มี ซึ่งค่าที่แทนจำนวน node ดังกล่าวเรียกว่า majority

ตัวอย่างการหา Majority/Quorum (ไม่ต้องใช้สูตรหรอก)

  • ถ้าเรามี master node 2 ตัว จะได้ majority เท่ากับ 2 เพราะ 1 จะยังไม่เกินครึ่งของจำนวน master node ที่มี ดังนั้นจึงเป็น 2
  • ถ้าเรามี master node 3 ตัว จะได้ majority เท่ากับ 2 เหมือนกัน เพราะ 1 จะยังไม่เกินครึ่งของจำนวน master node ที่มี แต่ 2 ถือว่าเกินครึ่งของจำนวนที่มีแล้ว
  • ถ้าเรามี master node 4 ตัว จะได้ majority เท่ากับ 3 เพราะ 1 และ 2 จะยังไม่เกินครึ่งของจำนวน master node ที่มี แต่ 3 ถือว่าเกินครึ่งของจำนวนที่มีแล้ว

โอเคครับ น่าจะเห็นภาพของ majority แล้วเนอะ ดังนั้น…

  • ถ้าหากเรามี master node 2 ตัว (majority=2) หมายความว่าหากมี master node ของเรา down ไปแค่ตัวเดียว cluster เราจะพังทันที (เพราะการ write ข้อมูลลง ETCD จะไม่สามารถสำเร็จได้เลย)
  • แต่ถ้าเรามี master node 3 ตัว (majority=2) หมายความว่า master node ของเราจะสามารถ down ได้ 1 ตัวโดยที่ cluster ยังทำงานได้อยู่ เพราะยังเหลือ available master node อยู่ 2 ตัว (ก็เท่ากับจำนวน majority ไง)

นี่แหละคือเหตุผลที่ว่าทำไมเราจึงไม่ควรมี master node แค่ 2 ตัวในการทำ HA สำหรับ Kubernetes cluster เพราะมันไม่ได้ประโยชน์อะไรนั่นเอง

ถ้าคิดว่าบทความนี้มีประโยชน์ ฝากกด clap, follow และ share บทความนี้ให้ผมด้วยนะครับ ขอบคุณมากครับ ^_^

--

--

Nopnithi Khaokaew (Game)
Nopnithi Khaokaew (Game)

Written by Nopnithi Khaokaew (Game)

Cloud Solutions Architect & Hobbyist Developer | 6x AWS Certified, CKA, CKAD, 2x HashiCorp Certified (Terraform, Vault), etc.

Responses (1)