Filestore: Share File Server พร้อมใช้งานบน Google Cloud Platform

Nichapat H.
4 min readAug 26, 2023

--

สวัสดีค่าา ห่างหายกันไปนานมากกกก
วันนี้กลับมาพร้อมกับ 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 ให้ดูคร่าวๆ เพื่อที่จะได้เห็นภาพมากขึ้น

diagram แสดงการเชื่อมต่อกันระหว่าง Filestore กับ Compute Engine อีก 2 เครื่อง

สร้าง Filestore instance ก่อนเลย

  1. เริ่มแรกไปที่ Filestore -> Create an instance หรือ https://console.cloud.google.com/filestore/instances/new
  2. ตั้งชื่อ Filestore instance ของเรา
ตั้งชื่อ instance ว่า bie-filestore ชื่อต้องห้ามซ้ำกันในแต่ละ zone

3. เลือก instance type

Filestore จะมี instance type ให้เลือกอยู่ 3 types ได้แก่ Basic, Enterprise และ Zonal แตกต่างกันไปตามนี้

Instance type ของ Filestore — มีให้เลือกทั้งหมด 3 types เราจะเลือกเป็น Basic

4. เลือก storage type

มีให้เลือกทั้ง HDD และ SSD ซึ่ง capicity ขั้นต่ำที่เราสามารถ allocate ได้คือ 1 TB และ 2.5 TB ตามลำดับ

Storage type — เลือกได้ระหว่าง HDD หรือ SSD ในการ test เราจะใช้เป็น HDD ก็พอ

5. เลือก region และ zone ให้กับ instance ของเรา

เลือกเป็น Singapore region zone ไหนก็ได้

6. Setup connections

เลือก network ของเครื่องปลายทางที่จะมาใช้งาน Filestore instance

เลือก network เป็น default network หรือสร้าง network ใหม่ขึ้นมาก็ได้แล้วแต่เรา

7. ตั้งชื่อ file share ของเรา

ชื่อต้องเป็นไปตาม format นี้เท่านั้น คือ ประกอบ ตัวอักษรตัวเล็ก หรือ ตัวเลข หรือ underscore

8. กด create เพื่อสร้างได้เลย

9. Filestore instance ของเราพร้อมใช้งานแล้ว

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 ก็ได้เพื่อที่จะได้ประหยัดเงิน

VM ทั้งสองตัวของเราพร้อมแล้ว!

ถึงเวลาแล้ว มาลองเชื่อมต่อกันเลย!

ในการ mount file หรือ directory เราจะใช้เป็น internal ip address ในการคุยกันระหว่าง VM 2 เครื่องและ Filestore instance โดยที่เมื่อเรากดเข้าไปที่ชื่อของ Filestore instance ที่เราสร้าง จะเจอ mount point ที่เป็น internal ip พร้อมกับ file share path ที่เราสร้างไว้

มันจะ generate internal ip address ของ Filestore instance มาให้เราโดยอัตโนมัติ
  1. ssh เข้ายัง VM ทั้งสองเครื่อง bie-vm1 และ bie-vm2
  2. 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
mount path แล้วเรียบร้อย

6. จากเครื่อง bie-vm1 ลองสร้าง file อะไรบ้างอย่างดู ในที่นี้จะสร้าง happy.txt

cd /mnt/vm1
touch happy.txt

ผลลัพธ์ที่ได้ คือ ทั้ง bie-vm1 และ bie-vm2 จะต้องมองเห็น file happy.txt เหมือนกันได้

ผลลัพธ์จาก bie-vm1
ผลลัพธ์จาก bie-vm2

ถ้าติดปัญหาไม่สามารถสร้าง 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

--

--

Nichapat H.
Nichapat H.

No responses yet