Filestore: Share File Server พร้อมใช้งานบน Google Cloud Platform
สวัสดีค่าา ห่างหายกันไปนานมากกกก
วันนี้กลับมาพร้อมกับ service share file server ที่ให้เราสามารถ share file หรือ directory ได้ผ่าน network บน Google Cloud Platform ซึ่งสร้างง่ายและใช้งานง่ายสุดๆๆ
Filestore ที่ไม่ใช่ Firestore
หลายคนอาจจะเคยได้ยินชื่อ Firestore มาก่อน แล้วกำลังสงสัยว่ามันอาจจะเป็น service เดียวกันหรือเปล่านะ (ถ้าอ่านออกเสียงด้วย Thai accent ก็จะเหมือนกันเลย5555)
สรุปง่ายๆ ได้ว่า
Firestore คือ NoSQL database ที่เราใช้กับ Firebase
ส่วน Filestore คือ fully managed file server เอาไว้จัดการการ share file นั่นเอง
อย่าเพิ่งสับสน ไม่ใช่ตัวเดียวกันน้าาาา
Firestore คือ NoSQL database
Filestore คือ fully managed file server
สั้นๆ เกี่ยวกับ Filestore
จริงๆ แล้วในการที่เราจะสร้าง file server สักตัวนึงเนี่ย เราสามารถสร้าง VM เครื่องโง่ๆ สักเครื่องนึงแล้วทำการ install NFS service ก็ได้เหมือนกัน แต่จะดีกว่ามั้ยถ้าเราไม่ต้องเสียเวลามานั่ง manage VM เอง โดย Google Cloud Platform ก็ได้มีบริการ fully managed file server ให้เราเสร็จสรรพ นั่นก็คือ Filestore ซึ่งคำว่า fully managed ก็คือ GCP จะเป็นคนดูแล infrastructure ให้เราทั้งหมดเลย เรามีหน้าที่ใช้งานอย่างเดียวเท่านั้น
Filestore จะใช้ NFSv3 protocol ใน instance ของมัน แต่ instance นี้เราจะไม่สามารถมองเห็นและ access เข้าไปได้แบบ VM นะ เพราะ Google จะคอยจัดการและดูแลให้ (เพราะมันเป็น serverless)
สำหรับการใช้งาน Filestore สามารถเชื่อมต่อได้ทั้ง service ที่อยู่ภายใน GCP เช่น Compute Engine, GKE, GCVE หรือเชื่อมต่อกับ on-premise ก็ได้เช่นเดียวกัน
มาเริ่มใช้งาน Filestore กันเลยดีกว่า
สิ่งที่เราจะสร้าง ได้แก่ Filestore instance และ Compute Engine 2 ตัว เพื่อทดสอบการ mount directory และการเข้าถึง
เราจะวาด diagram ให้ดูคร่าวๆ เพื่อที่จะได้เห็นภาพมากขึ้น
สร้าง Filestore instance ก่อนเลย
- เริ่มแรกไปที่ Filestore -> Create an instance หรือ https://console.cloud.google.com/filestore/instances/new
- ตั้งชื่อ Filestore instance ของเรา
3. เลือก instance type
Filestore จะมี instance type ให้เลือกอยู่ 3 types ได้แก่ Basic, Enterprise และ Zonal แตกต่างกันไปตามนี้
4. เลือก storage type
มีให้เลือกทั้ง HDD และ SSD ซึ่ง capicity ขั้นต่ำที่เราสามารถ allocate ได้คือ 1 TB และ 2.5 TB ตามลำดับ
5. เลือก region และ zone ให้กับ instance ของเรา
6. Setup connections
เลือก network ของเครื่องปลายทางที่จะมาใช้งาน Filestore instance
7. ตั้งชื่อ file share ของเรา
8. กด create เพื่อสร้างได้เลย
9. Filestore instance ของเราพร้อมใช้งานแล้ว
สร้าง Compute Engine
จะสร้าง Compute Engine มา 2 ตัว เพื่อทดสอบ โดยชื่อว่า bie-vm1 และ bie-vm2 โดยที่อยู่ใน region asia-southeast1 (Singapore) และ asia-northeast2 (Osaka) ซึ่งทั้ง 2 VMs จะต้องอยู่ภายใต้ network เดียวกันกับที่เราเลือกตอนตั้งค่าใน step 6 ตอน create Filestore instance ก็คือ default network นั่นเอง
จะเห็นว่า bie-vm1 อยู่ region เดียวกับ Filestore instance แต่ bie-vm2 อยู่คนละ region กัน แต่ในเชื่อมต่อก็ไม่ได้มีปัญหาอะไร เพราะทั้งสอง VM อยู่ใน network เดียวกัน เพียงแต่เวลาที่ bie-vm2 วิ่งไปหา Filestore จะมีค่า network egress cost วิ่งข้าม region นิดหน่อยเท่านั้น แต่เราต้องการให้เห็นว่าไม่ว่า VM จะอยู่ใน region ไหนๆ ก็ตาม ขอแค่อยู่ใน network เดียวกันก็ไม่มีปัญหา (ถ้าอยู่คนละ network ต้องทำ VPN หรือ VPC peering ก่อนนะ)
แอบบอก trick นิดๆ ว่าเวลาที่เราสร้างเครื่องเพื่อจะ test อะไรแบบอย่าง ไม่ได้ process task ที่ใช้เวลานาน เลือกใช้เป็น Spot VM ก็ได้เพื่อที่จะได้ประหยัดเงิน
ถึงเวลาแล้ว มาลองเชื่อมต่อกันเลย!
ในการ mount file หรือ directory เราจะใช้เป็น internal ip address ในการคุยกันระหว่าง VM 2 เครื่องและ Filestore instance โดยที่เมื่อเรากดเข้าไปที่ชื่อของ Filestore instance ที่เราสร้าง จะเจอ mount point ที่เป็น internal ip พร้อมกับ file share path ที่เราสร้างไว้
- ssh เข้ายัง VM ทั้งสองเครื่อง bie-vm1 และ bie-vm2
- install nfs-common service ลงในแต่ละเครื่อง
apt-get install nfs-common
3. สร้าง local directory ในแต่ละเครื่องเพื่อจะ map กับ file share
mkdir -p /mnt/vm1 #bie-vm1
mkdir -p /mnt/vm2 #bie-vm2
4. mount file share (NFS mount point) กับ local directory ของเราได้เลย
mount 10.217.119.98:/bie_file_share /mnt/vm1 #bie-vm1
mount 10.217.119.98:/bie_file_share /mnt/vm2 #bie-vm2
5. ตรวจสอบว่า mount สำเร็จแล้วหรือยัง
df -h --type=nfs
6. จากเครื่อง bie-vm1 ลองสร้าง file อะไรบ้างอย่างดู ในที่นี้จะสร้าง happy.txt
cd /mnt/vm1
touch happy.txt
ผลลัพธ์ที่ได้ คือ ทั้ง bie-vm1 และ bie-vm2 จะต้องมองเห็น file happy.txt เหมือนกันได้
ถ้าติดปัญหาไม่สามารถสร้าง file ได้ อย่าลืม chmod ก่อนน้า ;-P
ไปแล้ววันนี้ บัยบัย
reference docs
Mounting a file share on a Compute Engine VM instance: https://cloud.google.com/filestore/docs/mounting-fileshares#linux:-mount