
Digital Ocean Volumes — Photo by Gemini Generated
Digital Ocean Volumes: บริการ Block Storage สำหรับธุรกิจเริ่มต้น
เพิ่มพื้นที่จัดเก็บข้อมูลแบบ SSD ให้กับ Droplets ได้อย่างยืดหยุ่น ปรับขนาดได้ตามต้องการ และมีความทนทานสูง
1. ทำความเข้าใจ Digital Ocean Volumes
Volumes คืออะไร?
- นิยาม: บริการ Block Storage ที่ช่วยให้คุณสามารถเพิ่มพื้นที่จัดเก็บข้อมูลแบบ SSD ให้กับ Droplets ได้อย่างยืดหยุ่น โดยแยกออกจากพื้นที่จัดเก็บหลักของ Droplet
- ความสามารถหลัก:
- เพิ่มพื้นที่จัดเก็บข้อมูลได้สูงสุด 16TB ต่อ Volume
- ติดตั้งและถอดออกจาก Droplets ได้อย่างยืดหยุ่น
- ปรับขนาดได้ตามต้องการ (เพิ่มขนาดเท่านั้น)
- ใช้เทคโนโลยี SSD ทั้งหมด
- สำรองข้อมูลด้วย Snapshots
- ข้อดี: ยืดหยุ่น ปรับขนาดได้ง่าย มีความทนทานสูง และราคาคาดเดาได้
ทำไมต้องใช้ Volumes?
- แยกข้อมูลออกจาก Droplet: เก็บข้อมูลแยกจาก Droplet ทำให้สามารถย้ายข้อมูลระหว่าง Droplets ได้
- ขยายพื้นที่จัดเก็บ: เพิ่มพื้นที่จัดเก็บข้อมูลโดยไม่ต้องอัพเกรด Droplet
- ความทนทานสูง: ข้อมูลถูกเก็บแบบ redundant เพื่อป้องกันการสูญหาย
- ประสิทธิภาพ: ใช้ SSD ทั้งหมดเพื่อความเร็วในการอ่าน/เขียนข้อมูล
- ความยืดหยุ่น: ติดตั้งและถอดออกจาก Droplets ได้ตามต้องการ
- ราคาที่คาดเดาได้: โครงสร้างราคาที่ชัดเจน ไม่มีค่าใช้จ่ายแฝง
2. เปรียบเทียบ Volumes กับบริการ Block Storage อื่น
Volumes vs AWS EBS
คุณสมบัติ | Digital Ocean Volumes | AWS EBS |
---|---|---|
ราคาพื้นฐาน | $0.10/GB/เดือน | $0.10/GB/เดือน (gp2) |
โครงสร้างราคา | ชัดเจน | ซับซ้อน มีหลายประเภท |
ขนาดสูงสุด | 16TB | 16TB |
ประเภท | SSD เท่านั้น | หลายประเภท (SSD, HDD) |
IOPS | ไม่มีการคิดค่าใช้จ่ายเพิ่ม | คิดค่าใช้จ่ายเพิ่มสำหรับ IOPS สูง |
การปรับขนาด | เพิ่มขนาดเท่านั้น | เพิ่มและลดขนาดได้ |
Volumes vs Google Persistent Disk
คุณสมบัติ | Digital Ocean Volumes | Google Persistent Disk |
---|---|---|
ราคาพื้นฐาน | $0.10/GB/เดือน | $0.10/GB/เดือน (SSD) |
โครงสร้างราคา | ชัดเจน | ซับซ้อนปานกลาง |
ขนาดสูงสุด | 16TB | 64TB |
ประเภท | SSD เท่านั้น | หลายประเภท (SSD, HDD) |
การปรับขนาด | เพิ่มขนาดเท่านั้น | เพิ่มและลดขนาดได้ |
การสำรองข้อมูล | Snapshots | Snapshots และ regional persistent disks |
Volumes vs Linode Block Storage
คุณสมบัติ | Digital Ocean Volumes | Linode Block Storage |
---|---|---|
ราคาพื้นฐาน | $0.10/GB/เดือน | $0.10/GB/เดือน |
โครงสร้างราคา | ชัดเจน | ชัดเจน |
ขนาดสูงสุด | 16TB | 10TB |
ประเภท | SSD เท่านั้น | SSD เท่านั้น |
การปรับขนาด | เพิ่มขนาดเท่านั้น | เพิ่มขนาดเท่านั้น |
การบูรณาการ | บริการ DO | บริการ Linode |
3. ประโยชน์ของ Volumes สำหรับธุรกิจเริ่มต้น
กรณีการใช้งานที่เหมาะสม
-
ฐานข้อมูล:
- จัดเก็บไฟล์ฐานข้อมูลบน Volume แยกต่างหาก
- ปรับขนาดพื้นที่จัดเก็บตามการเติบโตของข้อมูล
- ย้ายฐานข้อมูลระหว่าง Droplets ได้ง่าย
- สำรองข้อมูลด้วย Snapshots
- รักษาข้อมูลไว้เมื่อต้องการอัพเกรดหรือเปลี่ยน Droplet
-
ระบบไฟล์สำหรับแอปพลิเคชัน:
- จัดเก็บไฟล์ที่อัปโหลดจากผู้ใช้
- เก็บ logs และข้อมูลการติดตาม
- จัดเก็บไฟล์สื่อและคอนเทนต์
- แชร์ไฟล์ระหว่างหลาย Droplets
- ขยายพื้นที่จัดเก็บโดยไม่ต้องหยุดการทำงานของแอปพลิเคชัน
-
การสำรองและการกู้คืน:
- สร้าง Volumes สำหรับการสำรองข้อมูลโดยเฉพาะ
- ใช้ Snapshots เพื่อสร้างจุดกู้คืน
- ทดสอบการอัพเดตหรือการเปลี่ยนแปลงบน Volume ชั่วคราว
- กู้คืนข้อมูลได้อย่างรวดเร็วเมื่อเกิดปัญหา
- รักษาประวัติการสำรองข้อมูล
ข้อได้เปรียบทางธุรกิจ
-
ความคุ้มค่า:
- จ่ายเฉพาะพื้นที่ที่ใช้จริง
- ไม่ต้องลงทุนในฮาร์ดแวร์จัดเก็บข้อมูล
- ลดค่าใช้จ่ายในการบำรุงรักษา
- ไม่มีค่าใช้จ่ายแฝงหรือค่าธรรมเนียมการโอนข้อมูล
- ประหยัดกว่าการอัพเกรด Droplet เพื่อเพิ่มพื้นที่จัดเก็บ
-
ความยืดหยุ่นและการปรับขนาด:
- เพิ่มพื้นที่จัดเก็บได้ตามต้องการ
- ปรับขนาดได้โดยไม่ต้องหยุดการทำงาน
- ย้ายข้อมูลระหว่าง Droplets ได้ง่าย
- รองรับการเติบโตของธุรกิจ
- ปรับเปลี่ยนตามความต้องการที่เปลี่ยนแปลง
-
ความน่าเชื่อถือและความปลอดภัย:
- ข้อมูลถูกเก็บแบบ redundant เพื่อป้องกันการสูญหาย
- สำรองข้อมูลด้วย Snapshots
- แยกข้อมูลออกจาก Droplet เพื่อความปลอดภัย
- ลดความเสี่ยงจากการสูญเสียข้อมูล
- กู้คืนได้อย่างรวดเร็วเมื่อเกิดปัญหา
4. การเริ่มต้นใช้งาน Volumes
การสร้าง Volume แรก
-
การเตรียมพร้อม:
- มีบัญชี Digital Ocean
- มี Droplet ที่ต้องการเชื่อมต่อกับ Volume
- เข้าใจความต้องการด้านพื้นที่จัดเก็บ
- วางแผนการใช้งานและการติดตั้ง
- ตรวจสอบว่า Droplet อยู่ในภูมิภาคเดียวกับที่ต้องการสร้าง Volume
-
การสร้าง Volume ผ่าน Dashboard:
- เข้าสู่ Digital Ocean Dashboard
- คลิก “Create” > “Volumes”
- เลือกภูมิภาคที่ตรงกับ Droplet
- กำหนดขนาด Volume (เริ่มต้นที่ 1GB)
- ตั้งชื่อ Volume
- เลือก Droplet ที่ต้องการเชื่อมต่อ (หรือเลือกเชื่อมต่อภายหลัง)
- คลิก “Create Volume”
-
การสร้าง Volume ผ่าน API หรือ CLI:
- ใช้ Digital Ocean CLI (doctl):
doctl compute volume create my-volume --region nyc1 --size 10GiB
- หรือใช้ API:
curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $DO_API_TOKEN" \ -d '{"name":"my-volume","region":"nyc1","size_gigabytes":10}' \ "https://api.digitalocean.com/v2/volumes"
- ติดตั้ง Volume กับ Droplet:
doctl compute volume-action attach my-volume droplet-id
- ใช้ Digital Ocean CLI (doctl):
การติดตั้งและการฟอร์แมต Volume
-
การติดตั้ง Volume บน Linux:
- เข้าสู่ Droplet ผ่าน SSH
- ตรวจสอบ Volume ที่เชื่อมต่อ:
lsblk
- สร้างระบบไฟล์ (ถ้าเป็น Volume ใหม่):
sudo mkfs.ext4 /dev/disk/by-id/scsi-0DO_Volume_volume-name
- สร้างจุดเชื่อมต่อ:
sudo mkdir -p /mnt/my-volume
- ติดตั้ง Volume:
sudo mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_volume-name /mnt/my-volume
- ตั้งค่าสิทธิ์การเข้าถึง:
sudo chown -R user:user /mnt/my-volume
-
การติดตั้งอัตโนมัติเมื่อรีสตาร์ท:
- แก้ไขไฟล์ /etc/fstab:
sudo nano /etc/fstab
- เพิ่มบรรทัดต่อไปนี้:
/dev/disk/by-id/scsi-0DO_Volume_volume-name /mnt/my-volume ext4 defaults,nofail,discard 0 2
- บันทึกและปิดไฟล์
- ทดสอบการติดตั้ง:
sudo mount -a
- ตรวจสอบพื้นที่ว่าง:
df -h /mnt/my-volume
- แก้ไขไฟล์ /etc/fstab:
-
การใช้งาน Volume:
- เริ่มใช้งาน Volume สำหรับจัดเก็บข้อมูล
- ย้ายไฟล์ไปยัง Volume:
sudo rsync -av /path/to/source/ /mnt/my-volume/
- ตั้งค่าแอปพลิเคชันให้ใช้ Volume
- ตรวจสอบประสิทธิภาพและการใช้งาน
- ติดตามพื้นที่ว่างอย่างสม่ำเสมอ
การจัดการ Volumes
-
การปรับขนาด Volume:
- ผ่าน Dashboard: เลือก Volume > “Resize Volume”
- ผ่าน CLI:
doctl compute volume-action resize volume-id --size 20GiB
- ขยายระบบไฟล์หลังจากปรับขนาด:
sudo resize2fs /dev/disk/by-id/scsi-0DO_Volume_volume-name
- ตรวจสอบขนาดใหม่:
df -h /mnt/my-volume
-
การย้าย Volume ระหว่าง Droplets:
- ถอด Volume จาก Droplet ปัจจุบัน:
sudo umount /mnt/my-volume
- ผ่าน Dashboard: เลือก Volume > “More” > “Detach”
- ผ่าน CLI:
doctl compute volume-action detach volume-id
- ติดตั้ง Volume กับ Droplet ใหม่:
doctl compute volume-action attach volume-id new-droplet-id
- ติดตั้ง Volume บน Droplet ใหม่ตามขั้นตอนการติดตั้ง
- ถอด Volume จาก Droplet ปัจจุบัน:
-
การสำรองข้อมูลด้วย Snapshots:
- ผ่าน Dashboard: เลือก Volume > “More” > “Create Snapshot”
- ผ่าน CLI:
doctl compute volume-action snapshot volume-id --snapshot-name my-volume-snapshot
- ตั้งเวลาสำรองข้อมูลอัตโนมัติด้วย cron job:
0 3 * * * doctl compute volume-action snapshot volume-id --snapshot-name "backup-$(date +\%Y\%m\%d)"
- จัดการ Snapshots เก่า:
doctl compute snapshot list doctl compute snapshot delete snapshot-id
5. การใช้งาน Volumes สำหรับกรณีการใช้งานทั่วไป
การใช้งานกับฐานข้อมูล
-
การย้ายฐานข้อมูล MySQL ไปยัง Volume:
- หยุดบริการ MySQL:
sudo systemctl stop mysql
- สำรองข้อมูลปัจจุบัน:
sudo mysqldump --all-databases > /tmp/all_databases.sql
- ย้ายไฟล์ฐานข้อมูลไปยัง Volume:
sudo rsync -av /var/lib/mysql/ /mnt/my-volume/mysql/
- แก้ไขไฟล์คอนฟิก MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- เปลี่ยน datadir:
datadir = /mnt/my-volume/mysql
- อัพเดท AppArmor (ถ้าใช้):
sudo nano /etc/apparmor.d/tunables/alias
- เพิ่มบรรทัด:
alias /var/lib/mysql/ -> /mnt/my-volume/mysql/,
- รีสตาร์ท AppArmor และ MySQL:
sudo systemctl restart apparmor sudo systemctl start mysql
- หยุดบริการ MySQL:
-
การใช้งานกับ PostgreSQL:
- หยุดบริการ PostgreSQL:
sudo systemctl stop postgresql
- สำรองข้อมูลปัจจุบัน:
sudo -u postgres pg_dumpall > /tmp/pg_backup.sql
- ย้ายไฟล์ฐานข้อมูลไปยัง Volume:
sudo rsync -av /var/lib/postgresql/ /mnt/my-volume/postgresql/
- แก้ไขไฟล์คอนฟิก PostgreSQL:
sudo nano /etc/postgresql/13/main/postgresql.conf
- เปลี่ยน data_directory:
data_directory = '/mnt/my-volume/postgresql/13/main'
- ตั้งค่าสิทธิ์:
sudo chown -R postgres:postgres /mnt/my-volume/postgresql/
- รีสตาร์ท PostgreSQL:
sudo systemctl start postgresql
- หยุดบริการ PostgreSQL:
-
การปรับแต่งประสิทธิภาพ:
- ตั้งค่า noatime เพื่อเพิ่มประสิทธิภาพ:
/dev/disk/by-id/scsi-0DO_Volume_volume-name /mnt/my-volume ext4 defaults,nofail,discard,noatime 0 2
- ปรับแต่งค่าคอนฟิกฐานข้อมูลสำหรับ SSD:
- สำหรับ MySQL:
innodb_flush_method = O_DIRECT innodb_io_capacity = 2000 innodb_io_capacity_max = 4000
- สำหรับ PostgreSQL:
random_page_cost = 1.1 effective_io_concurrency = 200
- สำหรับ MySQL:
- ติดตามประสิทธิภาพและปรับแต่งตามความเหมาะสม
- ตั้งค่า noatime เพื่อเพิ่มประสิทธิภาพ:
การใช้งานกับแอปพลิเคชันเว็บ
-
การจัดเก็บไฟล์ที่อัปโหลดจากผู้ใช้:
- สร้างโฟลเดอร์สำหรับไฟล์ที่อัปโหลด:
sudo mkdir -p /mnt/my-volume/uploads
- ตั้งค่าสิทธิ์:
sudo chown -R www-data:www-data /mnt/my-volume/uploads sudo chmod -R 755 /mnt/my-volume/uploads
- ตั้งค่าเว็บเซิร์ฟเวอร์ (Nginx):
location /uploads { alias /mnt/my-volume/uploads; }
- หรือสร้าง symbolic link:
sudo ln -s /mnt/my-volume/uploads /var/www/html/uploads
- ตั้งค่าแอปพลิเคชันให้ใช้โฟลเดอร์นี้สำหรับการอัปโหลด
- สร้างโฟลเดอร์สำหรับไฟล์ที่อัปโหลด:
-
การจัดเก็บ logs และข้อมูลการติดตาม:
- ย้าย logs ไปยัง Volume:
sudo mkdir -p /mnt/my-volume/logs
- แก้ไขไฟล์คอนฟิกเว็บเซิร์ฟเวอร์:
- สำหรับ Nginx:
error_log /mnt/my-volume/logs/error.log; access_log /mnt/my-volume/logs/access.log;
- สำหรับ Apache:
ErrorLog /mnt/my-volume/logs/error.log CustomLog /mnt/my-volume/logs/access.log combined
- สำหรับ Nginx:
- ตั้งค่า log rotation:
sudo nano /etc/logrotate.d/my-app
/mnt/my-volume/logs/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data www-data sharedscripts postrotate [ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid` endscript }
- ย้าย logs ไปยัง Volume:
-
การใช้งานกับ Content Management Systems (CMS):
- WordPress:
- ย้าย wp-content ไปยัง Volume:
sudo rsync -av /var/www/html/wp-content/ /mnt/my-volume/wp-content/
- สร้าง symbolic link:
sudo rm -rf /var/www/html/wp-content sudo ln -s /mnt/my-volume/wp-content /var/www/html/wp-content
- ย้าย wp-content ไปยัง Volume:
- Drupal:
- ย้าย sites/default/files ไปยัง Volume:
sudo rsync -av /var/www/html/sites/default/files/ /mnt/my-volume/drupal-files/
- สร้าง symbolic link:
sudo rm -rf /var/www/html/sites/default/files sudo ln -s /mnt/my-volume/drupal-files /var/www/html/sites/default/files
- ย้าย sites/default/files ไปยัง Volume:
- ตั้งค่าสิทธิ์ที่เหมาะสม:
sudo chown -R www-data:www-data /mnt/my-volume/
- WordPress:
การใช้งานสำหรับการสำรองและการกู้คืน
-
การสร้างระบบสำรองข้อมูลอัตโนมัติ:
- สร้าง script สำหรับการสำรองข้อมูล:
#!/bin/bash # backup.sh BACKUP_DIR="/mnt/my-volume/backups/$(date +\%Y\%m\%d)" mkdir -p $BACKUP_DIR # สำรองฐานข้อมูล mysqldump --all-databases > $BACKUP_DIR/all_databases.sql # สำรองไฟล์แอปพลิเคชัน tar -czf $BACKUP_DIR/app_files.tar.gz /var/www/html # เก็บเฉพาะ backups 7 วันล่าสุด find /mnt/my-volume/backups -type d -mtime +7 -exec rm -rf {} \;
- ตั้งค่าสิทธิ์:
sudo chmod +x /usr/local/bin/backup.sh
- ตั้งเวลาทำงานอัตโนมัติด้วย cron:
sudo crontab -e
0 2 * * * /usr/local/bin/backup.sh
- สร้าง script สำหรับการสำรองข้อมูล:
-
การใช้ Snapshots:
- สร้าง script สำหรับการสร้าง Snapshot:
#!/bin/bash # snapshot.sh # ต้องตั้งค่า DO_API_TOKEN ก่อน # สร้าง Snapshot curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $DO_API_TOKEN" \ -d '{"name":"volume-snapshot-'$(date +\%Y\%m\%d)'","volume_id":"your-volume-id"}' \ "https://api.digitalocean.com/v2/volumes/your-volume-id/snapshots" # ลบ Snapshots เก่า (เก็บ 7 วันล่าสุด) SNAPSHOTS=$(curl -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer $DO_API_TOKEN" \ "https://api.digitalocean.com/v2/volumes/your-volume-id/snapshots" | jq -r '.snapshots[] | select(.name | startswith("volume-snapshot-")) | .id') COUNT=$(echo "$SNAPSHOTS" | wc -l) if [ $COUNT -gt 7 ]; then OLDEST=$(echo "$SNAPSHOTS" | head -n $(($COUNT - 7))) for SNAPSHOT_ID in $OLDEST; do curl -X DELETE -H "Content-Type: application/json" \ -H "Authorization: Bearer $DO_API_TOKEN" \ "https://api.digitalocean.com/v2/snapshots/$SNAPSHOT_ID" done fi
- ตั้งค่าสิทธิ์และ cron job เช่นเดียวกับข้างต้น
- สร้าง script สำหรับการสร้าง Snapshot:
-
การกู้คืนข้อมูล:
- จาก backup ปกติ:
# กู้คืนฐานข้อมูล mysql < /mnt/my-volume/backups/20250620/all_databases.sql # กู้คืนไฟล์แอปพลิเคชัน tar -xzf /mnt/my-volume/backups/20250620/app_files.tar.gz -C /tmp rsync -av /tmp/var/www/html/ /var/www/html/
- จาก Snapshot:
- สร้าง Volume ใหม่จาก Snapshot ผ่าน Dashboard หรือ API
- ติดตั้ง Volume ใหม่กับ Droplet
- ย้ายข้อมูลจาก Volume ใหม่ไปยังตำแหน่งที่ต้องการ
- จาก backup ปกติ:
6. การบูรณาการ Volumes กับบริการอื่นๆ
การใช้งานกับ Docker
-
การตั้งค่า Docker Volume Driver:
- ติดตั้ง Docker บน Droplet
- ติดตั้ง Volume บน Droplet
- สร้างโฟลเดอร์สำหรับ Docker volumes:
sudo mkdir -p /mnt/my-volume/docker-volumes
- แก้ไขไฟล์คอนฟิก Docker:
sudo nano /etc/docker/daemon.json
{ "data-root": "/mnt/my-volume/docker-volumes" }
- รีสตาร์ท Docker:
sudo systemctl restart docker
-
การใช้งานกับ Docker Compose:
- ตัวอย่างไฟล์ docker-compose.yml:
version: '3' services: db: image: mysql:8.0 volumes: - /mnt/my-volume/mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: myapp web: image: nginx:latest volumes: - /mnt/my-volume/web-content:/usr/share/nginx/html - /mnt/my-volume/nginx-logs:/var/log/nginx ports: - "80:80"
- รัน Docker Compose:
docker-compose up -d
- ตัวอย่างไฟล์ docker-compose.yml:
-
การสำรองข้อมูล Docker:
- สำรอง Docker volumes:
docker run --rm -v my-volume:/source -v /mnt/my-volume/backups:/backup ubuntu tar -czf /backup/my-volume-backup.tar.gz -C /source .
- กู้คืน Docker volumes:
docker run --rm -v my-volume:/target -v /mnt/my-volume/backups:/backup ubuntu bash -c "cd /target && tar -xzf /backup/my-volume-backup.tar.gz"
- หรือใช้ plugin เช่น docker-volume-backup
- สำรอง Docker volumes:
การใช้งานกับ Kubernetes
-
การใช้ Volumes กับ Digital Ocean Kubernetes (DOKS):
- สร้าง StorageClass:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: do-block-storage provisioner: dobs.csi.digitalocean.com
- สร้าง PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-app-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: do-block-storage
- ใช้ใน Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: my-app:latest volumeMounts: - name: data mountPath: /app/data volumes: - name: data persistentVolumeClaim: claimName: my-app-data
- สร้าง StorageClass:
-
การสำรองข้อมูล Kubernetes:
- ใช้ Velero:
velero backup create my-app-backup --include-namespaces my-app
- หรือใช้ CSI snapshots:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-app-data-snapshot spec: volumeSnapshotClassName: do-block-storage-snapshot source: persistentVolumeClaimName: my-app-data
- ใช้ Velero:
-
การใช้งานกับ StatefulSets:
- ตัวอย่าง StatefulSet:
apiVersion: apps/v1 kind: StatefulSet metadata: name: db spec: serviceName: "db" replicas: 3 selector: matchLabels: app: db template: metadata: labels: app: db spec: containers: - name: db image: mysql:8.0 volumeMounts: - name: data mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] storageClassName: do-block-storage resources: requests: storage: 10Gi
- ตัวอย่าง StatefulSet:
การใช้งานกับ CI/CD
-
การใช้ Volumes สำหรับ CI/CD Runners:
- ตัวอย่างสำหรับ GitLab Runner:
- ติดตั้ง GitLab Runner บน Droplet
- ติดตั้ง Volume
- แก้ไขไฟล์คอนฟิก:
sudo nano /etc/gitlab-runner/config.toml
concurrent = 3 check_interval = 0 [[runners]] name = "my-runner" url = "https://gitlab.com/" token = "TOKEN" executor = "docker" [runners.docker] tls_verify = false image = "docker:latest" privileged = true disable_cache = false volumes = ["/mnt/my-volume/gitlab-runner-cache:/cache", "/var/run/docker.sock:/var/run/docker.sock"]
- รีสตาร์ท GitLab Runner:
sudo systemctl restart gitlab-runner
- ตัวอย่างสำหรับ GitLab Runner:
-
การใช้ Volumes สำหรับ Artifacts:
- สร้างโฟลเดอร์สำหรับ artifacts:
sudo mkdir -p /mnt/my-volume/artifacts
- ตั้งค่าสิทธิ์:
sudo chown -R ci-user:ci-user /mnt/my-volume/artifacts
- ใช้ในไฟล์ CI/CD:
# .gitlab-ci.yml build: script: - npm run build - cp -r dist/ /mnt/my-volume/artifacts/$CI_COMMIT_SHA/ deploy: script: - cp -r /mnt/my-volume/artifacts/$CI_COMMIT_SHA/ /var/www/html/
- สร้างโฟลเดอร์สำหรับ artifacts:
-
การใช้ Volumes สำหรับ Cache:
- สร้างโฟลเดอร์สำหรับ cache:
sudo mkdir -p /mnt/my-volume/ci-cache
- ตั้งค่าสิทธิ์:
sudo chown -R ci-user:ci-user /mnt/my-volume/ci-cache
- ใช้ใน GitHub Actions:
# .github/workflows/build.yml jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v2 - name: Cache node modules uses: actions/cache@v2 with: path: /mnt/my-volume/ci-cache/node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - name: Install dependencies run: | cp -r /mnt/my-volume/ci-cache/node_modules ./node_modules || true npm install mkdir -p /mnt/my-volume/ci-cache cp -r ./node_modules /mnt/my-volume/ci-cache/
- สร้างโฟลเดอร์สำหรับ cache:
7. เทคนิคและแนวปฏิบัติที่ดีที่สุด
การเพิ่มประสิทธิภาพ
-
การปรับแต่งระบบไฟล์:
- ใช้ตัวเลือก mount ที่เหมาะสม:
discard,noatime,nodiratime
- ใช้ระบบไฟล์ที่เหมาะสม (ext4 หรือ xfs)
- ตั้งค่า I/O scheduler:
echo noop > /sys/block/vda/queue/scheduler
- ปรับแต่ง readahead:
sudo blockdev --setra 256 /dev/disk/by-id/scsi-0DO_Volume_volume-name
- ใช้ตัวเลือก mount ที่เหมาะสม:
-
การจัดการ I/O:
- ใช้ ionice สำหรับงานที่ใช้ I/O สูง:
ionice -c2 -n7 rsync -av /source/ /mnt/my-volume/destination/
- ติดตาม I/O ด้วย iotop:
sudo iotop
- ใช้ fio สำหรับทดสอบประสิทธิภาพ:
fio --name=test --ioengine=libaio --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=4 --directory=/mnt/my-volume
- พิจารณาใช้ caching solutions เช่น bcache หรือ dm-cache
- ใช้ ionice สำหรับงานที่ใช้ I/O สูง:
-
การปรับแต่งแอปพลิเคชัน:
- ใช้ connection pooling สำหรับฐานข้อมูล
- ลดการเขียนข้อมูลที่ไม่จำเป็น
- ใช้ batch operations เมื่อเป็นไปได้
- พิจารณาใช้ in-memory caching (Redis, Memcached)
- ปรับแต่งค่าคอนฟิกแอปพลิเคชันให้เหมาะกับ SSD
การรักษาความปลอดภัย
-
การเข้ารหัสข้อมูล:
- ใช้ LUKS สำหรับการเข้ารหัสข้อมูล:
sudo cryptsetup luksFormat /dev/disk/by-id/scsi-0DO_Volume_volume-name sudo cryptsetup luksOpen /dev/disk/by-id/scsi-0DO_Volume_volume-name encrypted-volume sudo mkfs.ext4 /dev/mapper/encrypted-volume sudo mount /dev/mapper/encrypted-volume /mnt/my-volume
- หรือใช้ eCryptfs สำหรับการเข้ารหัสระดับโฟลเดอร์:
sudo apt-get install ecryptfs-utils sudo mount -t ecryptfs /mnt/my-volume/encrypted /mnt/my-volume/decrypted
- ใช้ application-level encryption เมื่อเหมาะสม
- ใช้ LUKS สำหรับการเข้ารหัสข้อมูล:
-
การควบคุมการเข้าถึง:
- ตั้งค่าสิทธิ์ไฟล์และโฟลเดอร์อย่างเหมาะสม:
sudo chmod 700 /mnt/my-volume/sensitive-data
- ใช้ ACLs สำหรับการควบคุมการเข้าถึงที่ละเอียดขึ้น:
sudo setfacl -m u:user1:rwx,u:user2:r-x /mnt/my-volume/shared-data
- จำกัดการเข้าถึงผ่าน SSH keys เท่านั้น
- ใช้ SELinux หรือ AppArmor เมื่อเหมาะสม
- ตั้งค่าสิทธิ์ไฟล์และโฟลเดอร์อย่างเหมาะสม:
-
การตรวจสอบและการติดตาม:
- ติดตั้ง auditd สำหรับการตรวจสอบการเข้าถึงไฟล์:
sudo apt-get install auditd sudo auditctl -w /mnt/my-volume -p rwxa
- ตรวจสอบ logs เป็นประจำ:
sudo ausearch -f /mnt/my-volume
- ใช้ tools เช่น tripwire หรือ aide สำหรับการตรวจสอบความสมบูรณ์ของไฟล์
- ตั้งค่าการแจ้งเตือนสำหรับการเปลี่ยนแปลงที่น่าสงสัย
- ติดตั้ง auditd สำหรับการตรวจสอบการเข้าถึงไฟล์:
การจัดการต้นทุน
-
การติดตามการใช้งาน:
- ติดตามการใช้งานพื้นที่:
df -h /mnt/my-volume
- ใช้ tools เช่น ncdu สำหรับการวิเคราะห์การใช้พื้นที่:
sudo ncdu /mnt/my-volume
- ติดตามค่าใช้จ่ายผ่าน Digital Ocean Dashboard
- ตั้งค่าการแจ้งเตือนค่าใช้จ่าย
- ติดตามการใช้งานพื้นที่:
-
การลดต้นทุน:
- ลบไฟล์ที่ไม่ได้ใช้งาน
- บีบอัดข้อมูลเมื่อเหมาะสม:
find /mnt/my-volume -name "*.log" -exec gzip {} \;
- ใช้ tools เช่น logrotate สำหรับการจัดการ logs
- พิจารณาการย้ายข้อมูลที่เข้าถึงน้อยไปยัง Spaces (Object Storage)
- ใช้ Snapshots อย่างมีประสิทธิภาพ (ลบ Snapshots เก่าที่ไม่จำเป็น)
-
การวางแผนความจุ:
- ติดตามอัตราการเติบโตของข้อมูล
- วางแผนการปรับขนาด Volume ล่วงหน้า
- ใช้ tools เช่น Prometheus และ Grafana สำหรับการติดตามและการคาดการณ์
- พิจารณาการแยก Volumes ตามประเภทข้อมูลและอัตราการเติบโต
- ตั้งค่านโยบายการเก็บข้อมูลที่ชัดเจน
8. กรณีศึกษา: การใช้งานจริงของ Startup
กรณีศึกษา 1: บริษัท SaaS ด้านการจัดการโครงการ
- ความท้าทาย: บริษัท SaaS ด้านการจัดการโครงการต้องการระบบจัดเก็บข้อมูลที่ขยายได้สำหรับไฟล์โครงการและเอกสารที่ผู้ใช้อัปโหลด
- การใช้ Volumes:
- ใช้ Volumes สำหรับจัดเก็บไฟล์ที่ผู้ใช้อัปโหลด
- แยก Volumes ตามประเภทข้อมูล (เอกสาร, รูปภาพ, ไฟล์โครงการ)
- ตั้งค่าการสำรองข้อมูลอัตโนมัติด้วย Snapshots
- ใช้ Docker volumes สำหรับการจัดการแอปพลิเคชัน
- ปรับขนาด Volumes ตามการเติบโตของผู้ใช้
- ผลลัพธ์:
- รองรับการเติบโตของข้อมูลจาก 50GB เป็น 2TB ในเวลา 1 ปี
- ลดเวลาในการกู้คืนข้อมูลจาก 24 ชั่วโมงเหลือ 1 ชั่วโมง
- ประหยัดค่าใช้จ่ายด้านการจัดเก็บข้อมูลลง 40% เทียบกับการใช้ Droplets ขนาดใหญ่
- เพิ่มความน่าเชื่อถือของระบบและลดการสูญเสียข้อมูล
กรณีศึกษา 2: แพลตฟอร์ม E-commerce
- ความท้าทาย: แพลตฟอร์ม E-commerce ต้องการระบบจัดเก็บข้อมูลที่รองรับการเติบโตของสินค้าและรูปภาพ
- การใช้ Volumes:
- ใช้ Volumes สำหรับฐานข้อมูล MySQL
- แยก Volumes สำหรับรูปภาพสินค้า
- ใช้ Volumes สำหรับ logs และข้อมูลการวิเคราะห์
- ตั้งค่าการสำรองข้อมูลอัตโนมัติทุกวัน
- ใช้ scripts สำหรับการจัดการรูปภาพอัตโนมัติ
- ผลลัพธ์:
- รองรับการเพิ่มขึ้นของสินค้าจาก 10,000 เป็น 100,000 รายการ
- ลดเวลาในการโหลดหน้าเว็บลง 30% ด้วยการแยกฐานข้อมูลและรูปภาพ
- ประหยัดค่าใช้จ่ายด้านการจัดเก็บข้อมูลลง 35%
- เพิ่มความพร้อมใช้งานของระบบเป็น 99.9%
กรณีศึกษา 3: บริษัทพัฒนาซอฟต์แวร์
- ความท้าทาย: บริษัทพัฒนาซอฟต์แวร์ต้องการระบบ CI/CD ที่มีประสิทธิภาพและรองรับการทำงานร่วมกันของทีม
- การใช้ Volumes:
- ใช้ Volumes สำหรับ GitLab Runner cache
- ใช้ Volumes สำหรับ Docker images และ containers
- ใช้ Volumes สำหรับ artifacts และ build outputs
- ตั้งค่าการสำรองข้อมูลอัตโนมัติ
- ใช้ Volumes สำหรับการทดสอบและการ staging
- ผลลัพธ์:
- ลดเวลาในการ build และ test ลง 50%
- ประหยัดค่าใช้จ่ายด้านการจัดเก็บข้อมูลลง 30%
- เพิ่มความเร็วในการ deploy ขึ้น 40%
- รองรับการทำงานร่วมกันของทีมพัฒนาที่เพิ่มขึ้นจาก 5 เป็น 20 คน
9. ข้อจำกัดและทางเลือก
ข้อจำกัดของ Volumes
-
ข้อจำกัดด้านฟีเจอร์:
- ไม่สามารถลดขนาด Volume ได้ (เพิ่มขนาดเท่านั้น)
- ไม่รองรับการติดตั้งกับหลาย Droplets พร้อมกัน
- ไม่มี multi-region replication ในตัว
- ไม่มี automatic tiering
- ไม่มี built-in encryption
-
ข้อจำกัดด้านประสิทธิภาพ:
- ประสิทธิภาพอาจต่ำกว่าพื้นที่จัดเก็บในตัวของ Droplet
- อาจมีความล่าช้าเล็กน้อยเนื่องจากเป็นการเชื่อมต่อผ่านเครือข่าย
- ข้อจำกัดด้าน IOPS สำหรับการใช้งานที่ต้องการประสิทธิภาพสูงมาก
- ไม่เหมาะสำหรับการใช้งานที่ต้องการ ultra-low latency
- ไม่มีการปรับแต่งประสิทธิภาพอัตโนมัติ
-
ข้อจำกัดด้านการใช้งาน:
- ต้องอยู่ในภูมิภาคเดียวกับ Droplet
- ไม่สามารถย้ายระหว่างภูมิภาคได้โดยตรง
- ไม่รองรับการแชร์ระหว่างหลายบัญชี
- ไม่มี built-in file sharing protocols (NFS, SMB)
- ต้องจัดการ filesystem และ mounting เอง
เมื่อไรควรพิจารณาทางเลือกอื่น
-
ควรพิจารณา Spaces (Object Storage) เมื่อ:
- ต้องการจัดเก็บไฟล์ static เช่น รูปภาพ, วิดีโอ, เอกสาร
- ต้องการเข้าถึงไฟล์ผ่าน HTTP/HTTPS
- ต้องการ CDN สำหรับการส่งมอบคอนเทนต์
- ไม่ต้องการระบบไฟล์แบบดั้งเดิม
- ต้องการเข้าถึงจากหลาย Droplets หรือจากภายนอก
-
ควรพิจารณา Local Storage (Droplet) เมื่อ:
- ต้องการประสิทธิภาพสูงสุด
- มีข้อมูลขนาดเล็กที่ไม่ต้องการแยกออกจาก Droplet
- ต้องการความเรียบง่ายในการตั้งค่า
- ไม่ต้องการย้ายข้อมูลระหว่าง Droplets
- งบประมาณจำกัดสำหรับบริการเพิ่มเติม
-
ควรพิจารณาบริการ Block Storage จากผู้ให้บริการอื่น เมื่อ:
- ต้องการฟีเจอร์ขั้นสูงเช่น multi-attach, encryption, replication
- ต้องการประสิทธิภาพที่สูงกว่า
- ต้องการความยืดหยุ่นในการปรับขนาด (เพิ่มและลด)
- ต้องการ IOPS ที่สูงกว่าหรือสามารถปรับแต่งได้
- มีความต้องการเฉพาะทางที่ Digital Ocean Volumes ไม่รองรับ
การใช้งานแบบ Hybrid
-
การใช้ Volumes ร่วมกับ Spaces:
- ใช้ Volumes สำหรับฐานข้อมูลและไฟล์ระบบ
- ใช้ Spaces สำหรับไฟล์ static และไฟล์ที่เข้าถึงจากภายนอก
- สร้าง scripts สำหรับการย้ายข้อมูลระหว่าง Volumes และ Spaces
- ใช้ Spaces สำหรับการสำรองข้อมูลระยะยาว
- ใช้ Volumes สำหรับการประมวลผลข้อมูลก่อนอัปโหลดไปยัง Spaces
-
การใช้ Volumes ร่วมกับ Local Storage:
- ใช้ Local Storage สำหรับระบบปฏิบัติการและแอปพลิเคชัน
- ใช้ Volumes สำหรับข้อมูลที่ต้องการความทนทานและการขยาย
- ใช้ Local Storage สำหรับ cache และข้อมูลชั่วคราว
- ใช้ Volumes สำหรับข้อมูลที่ต้องย้ายระหว่าง Droplets
- สร้างระบบการสำรองข้อมูลที่ครอบคลุมทั้งสองประเภท
-
การใช้ Multi-cloud Strategy:
- ใช้ Digital Ocean Volumes สำหรับการใช้งานทั่วไป
- ใช้ AWS EBS หรือ Google Persistent Disk สำหรับความต้องการเฉพาะทาง
- ใช้ tools เช่น rclone สำหรับการซิงค์ข้อมูลระหว่างผู้ให้บริการ
- สร้างระบบการสำรองข้อมูลที่ครอบคลุมหลายผู้ให้บริการ
- พิจารณาค่าใช้จ่ายในการโอนข้อมูลระหว่างผู้ให้บริการ
10. สรุป: ทำไม Volumes ถึงเหมาะกับธุรกิจเริ่มต้น
-
ความยืดหยุ่น
เพิ่มพื้นที่จัดเก็บข้อมูลได้ตามต้องการ ติดตั้งและถอดออกจาก Droplets ได้อย่างยืดหยุ่น ช่วยให้ธุรกิจเริ่มต้นสามารถปรับตัวตามการเติบโตได้อย่างรวดเร็ว -
ราคาที่คาดเดาได้
โครงสร้างราคาที่ชัดเจน ไม่มีค่าใช้จ่ายแฝง ช่วยให้ธุรกิจเริ่มต้นสามารถวางแผนงบประมาณได้อย่างแม่นยำ -
ความทนทานสูง
ข้อมูลถูกเก็บแบบ redundant เพื่อป้องกันการสูญหาย ช่วยลดความเสี่ยงจากการสูญเสียข้อมูลสำคัญ -
ประสิทธิภาพ
ใช้ SSD ทั้งหมดเพื่อความเร็วในการอ่าน/เขียนข้อมูล ช่วยให้แอปพลิเคชันทำงานได้อย่างรวดเร็วและมีประสิทธิภาพ -
การบูรณาการ
ทำงานร่วมกับบริการอื่นๆ ของ Digital Ocean ได้อย่างไร้รอยต่อ ช่วยให้สร้างระบบที่สมบูรณ์ได้ง่าย
“Digital Ocean Volumes เป็นทางเลือกที่ยอดเยี่ยมสำหรับธุรกิจเริ่มต้นที่ต้องการระบบจัดเก็บข้อมูลที่ยืดหยุ่น มีประสิทธิภาพ และราคาที่คาดเดาได้ ด้วยความสามารถในการเพิ่มพื้นที่จัดเก็บข้อมูลแบบ SSD ให้กับ Droplets ได้อย่างง่ายดาย Volumes ช่วยให้ธุรกิจเริ่มต้นสามารถรองรับการเติบโตของข้อมูลได้โดยไม่ต้องกังวลเรื่องข้อจำกัดด้านพื้นที่จัดเก็บหรือการสูญเสียข้อมูลสำคัญ”
11. แหล่งเรียนรู้เพิ่มเติม
เอกสารและบทความ:
- Digital Ocean Volumes Documentation
- Digital Ocean Volumes API Documentation
- Digital Ocean Community Tutorials on Volumes
- Digital Ocean Blog - Block Storage Articles
คอมมูนิตี้:
- Digital Ocean Community
- Digital Ocean GitHub
- Stack Overflow - Digital Ocean Volumes
- Reddit r/DigitalOcean
เครื่องมือและทรัพยากร:
- doctl - Digital Ocean CLI
- Terraform Provider for Digital Ocean
- Ansible Digital Ocean Modules
- Docker Volume Plugins
เคล็ดลับ: Digital Ocean มีโปรแกรม “Hatch” สำหรับ startups ที่ให้เครดิตมูลค่าสูงถึง $100,000 เพื่อใช้บริการ Digital Ocean เป็นเวลา 12 เดือน ซึ่งรวมถึงการใช้งาน Volumes ด้วย ตรวจสอบคุณสมบัติและสมัครได้ที่ digitalocean.com/hatch