วันศุกร์ที่ 2 สิงหาคม พ.ศ. 2562

[Linux Container] - Storage Pool & LXC Storage

เรื่องของพื้นที่ เราจำได้ว่าครั้งนั้นเราทำพลาดที่ไม่ได้คิดว่า Storage นั้นจะโตขึ้นเรื่อยๆ และยังไม่ได้ศึกษาให้ดีก่อนการใช้งาน
และในที่สุดเราก็เจอปัญหาจากการที่ Container ใช้งาน Storage จนเต็มแล้วเราเองก็ขยายมันไม่เป็นเลยทำให้ต้องไปหาข้อมูลเพิ่ม
แล้วนำมาเขียนเก็บไว้ในตอนนี้ เรื่องของ Storage Pool กับ Linux Container

เราคิดว่า Storage Pool นั้นสำคัญเพราะเป็นพื้นที่ใช้งานหลักของ Container เลย และบางส่วนก็จะต่อออกไปที่ Host เพิ่มด้วย
Storage จะติดอยู่กับ Profile หนึ่งตัวในตอนที่เรา LXD Init ครั้งแรกนั้นเอง จากที่หาข้อมูล จะมีการแนะนำว่าให้ใช้ btrfs และ zsf

"Recommended setup : The two best options for use with LXD are ZFS and btrfs."
อ้างอิงจาก : https://lxd.readthedocs.io/en/latest/storage/
ข้อมูลเพิ่มเติม : https://medium.com/life-at-dek-d/


เราเคยใช้อยู่ 2 ตัวคือ btrfs และ zfs (ต้องลง zfsutils_linux ก่อน)
เราจะเขียนการใช้งานส่วนของ zfs ก่อน แล้วตัวอื่นถ้าใช้พอเป็นแล้วจะมาเขียนอีกที



การใช้งาน ZFS Pool

ในการ Initial LXD ครั้งแรกเพื่อสร้าง Profile ถ้าเราไม่ได้ติดตั้ง zfsutils_linux ก่อน เวลาสร้าง Storage Pool
เราจะไม่สามารถเลือกใช้งาน zfs ได้ งั้นก็ไปติดตั้งก่อน
sudo apt install zfsutils-linux

เมื่อทำการติดตั้งเสร็จแล้วตอนที่เราทำการ Initial LXD ก็สามารถเลือก Storage Pool เป็นแบบ zfs ได้แล้ว

ต่อไปเป็นตัวอย่างที่เราทำการสร้าง Storage Pool ขึ้นมาใหม่ เมื่อเราติดตั้ง zfsutils_linux เราจะสามารถใช้ zpool ได้
# คำสั่งใช้ดู pool ที่สร้างไว้
sudo zpool list

# คำสั่งที่ใช้สร้าง pool ตรง path-file ใช้ path เต็มเริ่มจาก root path (/)
sudo zpool create <pool-name> <path-file>

# คำสั่งใช้ขยายขนาดของ pool -e หมายถึง expand  
sudo zpool online -e <pool-name> <path-file>

ลองสร้าง Pool ชื่อ Standard_Pool
# สร้าง Directory รองรับไว้ก่อน
cd /
sudo mkdir /lxd
sudo mkdir /lxd/pool

# สร้างไฟล์ขนาด 10G ที่ /lxd/pool/standard
sudo truncate -s 10G /lxd/pool/standard

# แสดงข้อมูลไฟล์ที่สร้าง และแสดงขนาดของไฟล์
ls /lxd/pool/ -lsh

## เราจะเห็นไฟล์ และขนาดไฟล์ตามนี้
sarankon@ubuntu:~$ ls /lxd/pool/ -lsh

total 0
0 -rw-r--r-- 1 root root 10G Aug  3 00:15 standard

# แสดงข้อมูล Storage Pool ที่มีอยู่
sudo zpool list

## ตอนนี้ยังไม่มีข้อมูล
sarankon@ubuntu:~$ sudo zpool list

NAME           SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT

# สร้าง Storage Pool
sudo zpool create standard_pool /lxd/pool/standard

## สร้าง Storage Pool แล้วดูข้อมูล Storage Pool อีกครั้ง
sarankon@ubuntu:~$ sudo zpool create standard_pool /lxd/pool/standard
sarankon@ubuntu:~$ sudo zpool list

NAME            SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
standard_pool  9.94G   272K  9.94G         -     0%     0%  1.00x  ONLINE  -

# เมื่อเราใช้งานไปสักพักแล้วต้องการขยายก็ทำตามนี้
# เพิ่มขนาดให้ไฟล์ /lxd/pool/standard
sudo truncate -s +5G /lxd/pool/standard

## เมื่อทำการเพิ่มขนาด และให้แสดงข้อมูลแล้วจะพบว่าขนาดไฟล์ใหญ่ขึ้นตามต้องการแล้ว
sarankon@ubuntu:~$ sudo truncate -s +5G /lxd/pool/standard
sarankon@ubuntu:~$ ls /lxd/pool/ -lsh

total 1.3M
1.3M -rw-r--r-- 1 root root 15G Aug  3 00:23 standard

## แต่เมื่อเราดูขนาดจาก Storage Pool จะพบว่ามันไม่ขยาย
sarankon@ubuntu:~$ sudo zpool list

NAME            SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
standard_pool  9.94G   272K  9.94G         -     0%     0%  1.00x  ONLINE  -

# สั่งให้ Standard_Pool ขยายขึ้น
sudo zpool online -e standard_pool /lxd/pool/standard

## สั่งให้ Standard_Pool ขยายแล้วลองตรวจสอบข้อมูลพบว่าขยายเรียบร้อยแล้ว
sarankon@ubuntu:~$ sudo zpool online -e standard_pool /lxd/pool/standard
sarankon@ubuntu:~$ sudo zpool list

NAME            SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
standard_pool  14.9G   363K  14.9G         -     0%     0%  1.00x  ONLINE  -

### เราสามารถขยายขนาดของ Pool ได้โดยที่ Container ยังทำงานอยู่

เมื่อเราได้ Pool แล้วเราจะยังใช้งาน Pool นี้ไม่ได้จนกว่าจะบอกให้ LXD รู้ก่อนว่าเราจะใช้ Storage Pool นี้
เราใช้คำสั่ง lxc storage ในการจัดการ Storage สำหรับ Container เอาไปใช้งาน
# แสดงรายการ Storage Pool
lxc storage list

# แสดงข้อมูล Storage Pool
lxc storage show <pool-name>
lxc storage info <pool-name>

# สร้างและลบ Storage Pool ตรง pool-name เป็นชื่อที่เราตั้งเอง
lxc storage create <pool-name> <type> source=<pool-name-in-zpool-list>
lxc storage delete <pool-name>


## แสดงรายการ Storage Pool ที่ Container เอาไปใช้งานได้
sarankon@ubuntu:~$ lxc storage list
+--------------+-------------+--------+-------------------------------------+---------+
|     NAME     | DESCRIPTION | DRIVER |               SOURCE                | USED BY |
+--------------+-------------+--------+-------------------------------------+---------+
| default      |             | zfs    | /var/lib/lxd/disks/pool_default.img | 0       |
+--------------+-------------+--------+-------------------------------------+---------+

## ทำการสร้าง Storage Pool
sarankon@ubuntu:~$ lxc storage create standard_pool zfs source=standard_pool
Storage pool standard_pool created

## แสดงรายการ Storage Pool อีกครั้ง
sarankon@ubuntu:~$ lxc storage list
+---------------+-------------+--------+-------------------------------------+---------+
|     NAME      | DESCRIPTION | DRIVER |               SOURCE                | USED BY |
+---------------+-------------+--------+-------------------------------------+---------+
| default       |             | zfs    | /var/lib/lxd/disks/pool_default.img | 0       |
+---------------+-------------+--------+-------------------------------------+---------+
| standard_pool |             | zfs    | standard_pool                       | 1       |
+---------------+-------------+--------+-------------------------------------+---------+

## เท่านี้ก็เรียบร้อยสามารถเอาไปใช้งานได้เลย

เราจะเอาไปใส่ใน Profile ก็ได้ หรือจะบอกตอนสร้าง Container ก็ได้ว่าให้ใช้ Storage Pool อะไร
# ตัวอย่าง ก็ใส่ --storage <pool-name> ลงไป
lxc launch ubuntu/18.04 ubuntu --storage standard_pool

# เมื่อสร้างเสร็จแล้วใช้คำสั่ง lxc storage info standard_pool จะเห็นว่า container ไหนใช้งานอยู๋
sarankon@ubuntu:~$ lxc storage info standard_pool
info:
  description: ""
  driver: zfs
  name: standard_pool
  space used: 444.73MB
  total space: 15.09GB
used by:
  containers:
  - ubuntu
  images:
  - de52e3b19d0f1a0d129ade357ce86a77f7bd18ecebbdfe6528104be169392979

ไม่มีความคิดเห็น:

แสดงความคิดเห็น