Rancher NFS-Server + Docker Nginx [Step by Step]

สวัสดีครับ พบกันอีกเช่นเคย วันนี้เป็นวันที่ดี รวมถึงวันนี้เราจะมาคุยแบบเพื่อนบอกเพื่อน อยากให้ทุกคนที่อ่านบทความนี้รู้สึกสบาย ๆ หรือกำลังพบเจอปัญหาเหมือนกัน เรามาช่วยกันแชร์แบ่งปันมุมมองกันเถอะ 🤗
ใครเคยมีปัญหาว่า หากฉันจะเอา Docker Deploy Kube แล้วต้องการ mount ออกมาฉันจะต้องทำอย่างไร แล้วหาก mount มาแล้วฉันจะเข้าไปอย่างไร เก็บไฟล์แบบไหน วันนี้เรามีคำตอบและพาทำ
Network File System คือ ?
บริการที่ทำให้เครื่องคอมพิวเตอร์สามารถเข้าถึง File และ Directory บนเครื่องคอมพิวเตอร์เครื่องอื่นได้เหมือนกับใช้งานเครื่องของตัวเอง โดยสามารถใช้บริการได้อย่างสะดวก ง่ายและมี ประสิทธิภาพผ่านระบบเครือข่าย Network โดยระบบปฏิบัติการของเครื่องลูกข่ายไม่จาเป็นต้องเป็นระบบปฏิบัติการ
ติดตั้ง NFS Server
หมายความว่าหากเพื่อน ๆ ที่กำลังมองหาการเข้าถึงไฟล์จาก Server นึง ถึงอีก Server นึงก็สามารถทำได้เช่นกันครับ
sudo apt-get update
sudo apt install nfs-kernel-server
sudo mkdir -p /mnt/sharedfolder
sudo chown nobody:nogroup /mnt/sharedfolder
sudo chmod 777 /mnt/sharedfolder
เพื่อน ๆ จะเห็นว่า ผมได้มีการสร้าง folder sharedfolder เอาไว้ กรณีหากเราจะทำให้ nfs นั้นมีการส่งอะไรบางอย่างเข้าไป โดยเราจะทำขั้นตอนต่อไปกัน
sudo nano /etc/exports
/mnt/sharedfolder ${ippublic}(rw,sync,no_root_squash,insecure) or /mnt/sharedfolder *(rw,sync,no_root_squash)
exportfs -rav
sudo systemctl restart nfs-kernel-server
sudo mount ${ipserver}:/mnt/sharedfolder ~/mountfolder_client
// uninstall
umount ~/mountfolder_client
ต่อมาเราทำการติดตั้ง kubernetes-sigs/nfs-subldir-external-provisioner
ใช้ Helm ในการสร้าง NFS-External
หากเรามี helm อยากให้เราลองติดตั้ง helm ก่อนเลยครับ
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=x.x.x.x \
--set nfs.path=/mnt/sharedfolder
เสร็จแล้วให้เข้าไปที่ Rancher Workloads ให้เราลองสร้าง Deploy Workloads ก่อน
สร้าง Nginx Images
ให้ตั้งตามผม ขบวนการ kiki (สำหรับท่านใดที่ยังไม่สร้าง namespace รบกวนให้สร้างก่อน)
เสร็จแล้วให้เราทำการไปสร้าง Load Balancing ทำการ Add Ingress
ให้เราทำการ setting host ของเราเลยแล้วเลือกแบบที่ผมตั้ง
กรณีขึ้น Initializing นานเกินไปไม่ทำงาน อาจจะเป็นเพราะว่า Rancher มันไม่เจอ Ingress เราจะต้องบอกมัน
ทำการเพิ่ม ingressClassName: public
เสร็จแล้วให้เราทำการไปที่ Volumes
หน้าตา /mnt/sharedfolder ก็จะประมาณนี้
ต่อมาให้เราไปที่ Workloads > kiki > edit
เลือกเป็น Use an existing persistent volume (claim)
Mount Point รู้ได้อย่างไรอยู่ที่ไหน อันนี้เป็นของ nginx default นะครับ หากเราทำ docker เองก็จะง่าย
Volume Name : จะตั้งเป็นอะไรก็ได้ผมขอตั้งเป็น index Persistent Volume Claim : ผมตั้งตามที่ Volume Claim สร้างก่อนหน้านี้ Mount Point : อันนี้เป็น Default Nginx Sub Path in Volume : จำเป็นจะต้องใส่ หากเราเป็นพวก config ก็ใช้เป็น config ก็ได้เวลาวางก็จะได้วางพวก env
ให้เรากดเข้าไป html แล้ววางไฟล์ index.html ดูนะครับ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Demo Nginx NFS</title>
</head>
<body>
สวัสดีครับชาวโลก
</body>
</html>
ให้เราสร้างไฟล์ เพื่อจะนำไปวางไว้ที่ html โดยตั้งชื่อว่า index.html
ศึกษาและเรียนรู้จากบทความ
ยังมีอีกหลากหลายท่าได้แก่การ Backup ไม่ว่าจะไว้ที่ s3 , datastorage , vm อีกตัวก็ทำได้เช่นกันทั้งนี้ทั้งนั้นก็อยู่ที่เราจะออกแบบเพิ่มเติม แต่สำหรับหัวข้อนี้ก็จบไปเพียงเท่านี้ครับ
ต้องขอขอบคุณทุกท่านที่เข้ามาอ่านบทความนี้ หากชอบและเห็นว่ามีประโยชน์กับตัวของท่านเอง รบกวนโปรดแชร์สิ่งนี้บอกต่อ และอยากจะขอบคุณ ผู้สนับสนุนและร่วมช่วยเหลือ คุณโอมและคุณโจ้ รวมถึง Community ต่าง ๆ Dev Thai By Discord