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

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

poc_ep_4

สวัสดีครับ พบกันอีกเช่นเคย วันนี้เป็นวันที่ดี รวมถึงวันนี้เราจะมาคุยแบบเพื่อนบอกเพื่อน อยากให้ทุกคนที่อ่านบทความนี้รู้สึกสบาย ๆ หรือกำลังพบเจอปัญหาเหมือนกัน เรามาช่วยกันแชร์แบ่งปันมุมมองกันเถอะ 🤗

ใครเคยมีปัญหาว่า หากฉันจะเอา 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 เราจะต้องบอกมัน

ทำการเลือก Edit YAML

ทำการเพิ่ม ingressClassName: public

เสร็จแล้วให้เราทำการไปที่ Volumes

กดที่ Add Volume

ทำการตั้งค่าตามที่ระบุไว้

เราจะได้ประมาณแบบนี้ โอเย้

หน้าตา /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

Before ที่จะมีการวาง File Index.html

After หลังที่มีการวาง File Index.html

ศึกษาและเรียนรู้จากบทความ

ยังมีอีกหลากหลายท่าได้แก่การ Backup ไม่ว่าจะไว้ที่ s3 , datastorage , vm อีกตัวก็ทำได้เช่นกันทั้งนี้ทั้งนั้นก็อยู่ที่เราจะออกแบบเพิ่มเติม แต่สำหรับหัวข้อนี้ก็จบไปเพียงเท่านี้ครับ

ต้องขอขอบคุณทุกท่านที่เข้ามาอ่านบทความนี้ หากชอบและเห็นว่ามีประโยชน์กับตัวของท่านเอง รบกวนโปรดแชร์สิ่งนี้บอกต่อ และอยากจะขอบคุณ ผู้สนับสนุนและร่วมช่วยเหลือ คุณโอมและคุณโจ้ รวมถึง Community ต่าง ๆ Dev Thai By Discord