ฉันกำลังเรียกใช้สภาพแวดล้อม "ความพร้อมใช้งานสูง" แบบมัลติมาสเตอร์แบบเรียบง่ายที่มีมาสเตอร์ 2 คนและพนักงาน 2 คน รวมถึง VM อื่นที่มี HAProxy ที่ทำหน้าที่เป็น Load Balancer ภายนอก
คำถามของฉันคือ: เป็นไปได้ที่จะเข้าถึงบริการต่างๆ (แดชบอร์ด, ngnix, mysql (โดยเฉพาะ mysql) ฯลฯ...) จากภายนอกคลัสเตอร์ โดยเปิดเผยให้เครือข่ายทราบด้วยการตั้งค่าที่ฉันใช้อยู่
ฉันได้ลองใช้ MetalLB ในสภาพแวดล้อมนี้เพื่อแสดงบริการเป็น LoadBalancer แต่ดูเหมือนว่าจะไม่ทำงาน และเนื่องจากฉันยังใหม่กับ Kubernetes ฉันจึงไม่เข้าใจว่าทำไม
แก้ไข: ใช้งานได้แล้ว ตามคำแนะนำของ @c4f4t0r แทนที่จะเป็น HAProxy Load Balancer ภายนอก VM เดียวกันนั้นกลายเป็นโหนดหลักที่สาม และเช่นเดียวกับโหนดอื่น ๆ ตอนนี้พวกเขาเรียกใช้แต่ละอินสแตนซ์ภายในของ HAProxy และ Keepalived ในขณะที่ VM ที่เคยเป็น LB ภายนอกตอนนี้กลายเป็น endpoint master สำหรับตัวอื่นๆ เพื่อเข้าร่วมคลัสเตอร์ โดย MetalLB จะทำงานภายในคลัสเตอร์ที่มีตัวควบคุม nginx ingress ที่นำคำขอไปยังบริการที่ได้รับการร้องขอ
>>> ด้านล่างนี้เป็นขั้นตอนที่ฉันได้ปฏิบัติตามเพื่อสร้างสภาพแวดล้อมตลอดจนการกำหนดค่าทั้งหมดที่ใช้ในการตั้งค่า
ตั้งค่าคลัสเตอร์ Kubernetes ที่พร้อมใช้งานสูงโดยใช้ kubeadm
ทำตามเอกสารประกอบนี้เพื่อตั้งค่าคลัสเตอร์ Kubernetes ที่พร้อมใช้งานสูงโดยใช้ อูบุนตู 20.04 LTS.
เอกสารนี้จะแนะนำคุณในการตั้งค่าคลัสเตอร์ที่มีโหนดหลัก 2 โหนด โหนดผู้ปฏิบัติงาน 1 โหนด และโหนดโหลดบาลานเซอร์โดยใช้ HAProxy
สภาพแวดล้อมโลหะเปลือย
บทบาท |
FQDN |
ไอพี |
ระบบปฏิบัติการ |
แกะ |
ซีพียู |
โหลดบาลานเซอร์ |
loadbalancer.example.com |
192.168.44.100 |
อูบุนตู 21.04 |
1G |
1 |
ผู้เชี่ยวชาญ |
kmmaster1.example.com |
10.84.44.51 |
อูบุนตู 21.04 |
2G |
2 |
ผู้เชี่ยวชาญ |
kmmaster2.example.com |
192.168.44.50 |
อูบุนตู 21.04 |
2G |
2 |
คนงาน |
kworker1.example.com |
10.84.44.50 |
อูบุนตู 21.04 |
2G |
2 |
คนงาน |
kworker2.example.com |
192.168.44.51 |
อูบุนตู 21.04 |
2G |
2 |
- รหัสผ่านสำหรับ ราก บัญชีบนเครื่องเสมือนเหล่านี้คือ คูบีดมิน
- ดำเนินการคำสั่งทั้งหมดในฐานะผู้ใช้ root เว้นแต่จะระบุไว้เป็นอย่างอื่น
ข้อกำหนดเบื้องต้น
หากคุณต้องการลองสิ่งนี้ในสภาพแวดล้อมเสมือนจริงบนเวิร์กสเตชันของคุณ
- ติดตั้ง Virtualbox แล้ว
- เครื่องโฮสต์มีอย่างน้อย 8 คอร์
- เครื่องโฮสต์มีหน่วยความจำอย่างน้อย 8G
ตั้งค่าโหนดตัวจัดสรรภาระงาน
ติดตั้ง Haproxy
ปรับปรุง apt && apt ติดตั้ง -y haproxy
กำหนดค่า haproxy
ต่อท้ายบรรทัดด้านล่างเพื่อ /etc/haproxy/haproxy.cfg
ส่วนหน้า kubernetes-ส่วนหน้า
ผูก 192.168.44.100:6443
โหมด tcp
ตัวเลือก tcplog
default_backend kubernetes-แบ็กเอนด์
แบ็กเอนด์ kubernetes-แบ็กเอนด์
โหมด tcp
ตัวเลือก tcp-ตรวจสอบ
วงเวียนสมดุล
เซิฟเวอร์ kmmaster1 10.84.44.51:6443 ตรวจสอบ ล้ม 3 ลุก 2
เซิฟเวอร์ kmmaster2 192.168.44.50:6443 ตรวจสอบ ล้ม 3 ลุก 2
เริ่มบริการ haproxy ใหม่
systemctl รีสตาร์ท haproxy
บนโหนด Kubernetes ทั้งหมด (kmaster1, kmmaster2, kworker1)
ปิดใช้งานไฟร์วอลล์
ufw ปิดการใช้งาน
ปิดการแลกเปลี่ยน
สลับ -a; sed -i '/swap/d' /etc/fstab
อัปเดตการตั้งค่า sysctl สำหรับเครือข่าย Kubernetes
แมว >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
อฟ
sysctl -- ระบบ
ติดตั้งเครื่องเทียบท่า
{
apt install -y apt-transport-https ca-certificates curl gnupg-agent ซอฟต์แวร์คุณสมบัติทั่วไป
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key เพิ่ม -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) เสถียร"
ปรับปรุง apt && apt ติดตั้ง -y docker-ce containerd.io
}
การตั้งค่า Kubernetes
เพิ่มที่เก็บ Apt
{
ขด -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key เพิ่ม -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
ติดตั้งส่วนประกอบ Kubernetes
ปรับปรุง apt && ติดตั้ง apt -y kubeadm=1.19.2-00 kubelet=1.19.2-00 kubectl=1.19.2-00
บนโหนดหลัก Kubernetes ตัวใดตัวหนึ่ง (เช่น kmmaster1)
เริ่มต้น Kubernetes Cluster
kubeadm init --control-plane-endpoint="192.168.44.100:6443" --upload-certs
คัดลอกคำสั่งเพื่อรวมโหนดหลักและโหนดผู้ปฏิบัติงานอื่นๆ
ปรับใช้ ผ้าดิบ เครือข่าย (ฉันใช้สานแทน Calico)
kubectl --kubeconfig=/etc/kubernetes/admin.conf สร้าง -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
เข้าร่วมโหนดอื่นในคลัสเตอร์ (kmaster2 & kworker1)
ใช้คำสั่งรวม kubeadm ตามลำดับที่คุณคัดลอกจากเอาต์พุตของคำสั่ง kubeadm init บนมาสเตอร์ตัวแรก
สำคัญ: คุณต้องส่ง --apiserver-advertise-address ไปยังคำสั่ง join เมื่อคุณเข้าร่วมโหนดหลักอื่น