Chào các bạn, trong phần trước mình đã có chia sẻ cách cài đặt và sử dụng nfs storage class trên K8S Cluster. Hôm nay mình sẽ tiếp tục hướng dẫn các bạn cài đặt và sử dụng longhorn storage với K8S.
Ý tưởng cài đặt longhorn hiểu đơn giản như sau:
- Bạn cấu hình cho longhorn biết thư mục mặc định lưu data của longhorn sẽ được dùng ở đâu trên Worker Node
- Longhorn sẽ chạy trên tất cả các Worker Node thỏa mãn điều kiện là có phân vùng lưu trữ như cấu hình bên trên
- Mỗi Worker Node sẽ được coi là một Node của longhorn, trên mỗi node này có thể có 1 hoặc nhiều Disk mà ta có thể cấu hình thêm sau khi đã cài đặt longhorn
Ta sẽ có 2 phần:
- Longhorn storage: Là storage quản lý thiết bị lưu trữ, nó có vai trò giống như NFS Server vậy
- Longhorn storage class: Là một object trên K8S đảm nhiệm việc nhận các yêu cầu tạo Volume trên K8S (PV/PVC) sau đó kết nối với longhorn storage để tạo ra phân vùng lưu trữ trên thiết bị lưu trữ
Các bước thực hiện trong bài lab này như sau:
- Chuẩn bị phân vùng lưu dữ liệu trên các Worker Node-
- Cài đặt longhorn storage trên K8S dùng helm chart
- Cài đặt longhorn storage class trên K8S
- Test thử tạo PV/PVC và tạo Pod dùng longhorn storage class
Sơ đồ cụm k8s của mình
Ta sẽ cài đặt thư mục mặc định lưu dữ liệu của longhorn là /data/longhorn-storage, do đó cần tạo thư mục nào trên các Worker Node:
ssh root@192.168.13.214 mkdir -p '/home/longhorn-storage'
ssh root@192.168.13.215 mkdir -p '/home/longhorn-storage'
ssh root@192.168.13.216 mkdir -p '/home/longhorn-storage'
ssh root@192.168.13.217 mkdir -p '/home/longhorn-storage'
ssh root@192.168.13.218 mkdir -p '/home/longhorn-storage'
Đầu tiên là tạo thư mục lưu helm chart và các file cấu hình đã:
mkdir /home/longhorn-storage
cd /home/longhorn-storage
Khai báo repo
$ helm repo add longhorn https://charts.longhorn.io
"longhorn" has been added to your repositories
Update repo
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "longhorn" chart repository
Update Complete. ⎈Happy Helming!⎈
Tìm thử longhorn có trong repo không
$ helm search repo longhorn
NAME CHART VERSION APP VERSION DESCRIPTION
longhorn/longhorn 1.3.2 v1.3.2 Longhorn is a distributed block storage system ...
Download helm chart của longhorn
helm pull longhorn/longhorn --version 1.3.2
Giải nén longhorn
tar -xzf longhorn-1.3.2.tgz
Ở đây mình đang dùng bản longhorn 1.3.2 và Kubernetes version 1.23.8-00, các bạn nếu cài version khác nên chú ý xem cấu hình có khác thì update tương ứng.
Sau bước trên mình đã down về và giải nén thư mục helm chart của longhorn ở thư mục /home/sysadmin/kubernetes_installation/longhorn-storage
Copy file value mặc định của helmchart ra ngoài để tùy biến theo môi trường của mình:
cd ./longhorn
cp values.yaml values-longhorn.yaml
Sửa file values-longhorn.yaml và cập nhật một số tham số như sau:
ingress:
enabled: true
ingressClassName: nginx
host: longhorn.hoanghd.com
Ở phần defaultSettings, hãy chỉnh sửa các tham số tham khảo như dưới
defaultSettings:
replicaSoftAntiAffinity: true
defaultDataPath: /home/longhorn-storage
storageMinimalAvailablePercentage: 15
upgradeChecker: false
defaultReplicaCount: 3
backupstorePollInterval: 500
nodeDownPodDeletionPolicy: do-nothing
guaranteedEngineManagerCPU: 15
guaranteedReplicaManagerCPU: 15
Các giá trị cấu hình bao gồm:
replicaSoftAntiAffinity
: Xác định liệu các pod replica có thể được lên lịch để chạy trên cùng một node hay không. Giá trị mặc định làtrue
, có nghĩa là các pod replica không được phép chạy trên cùng một node nếu có thể.defaultDataPath
: Xác định đường dẫn mặc định để lưu trữ dữ liệu. Giá trị mặc định là/home/longhorn-storage
.storageMinimalAvailablePercentage
: Xác định tỷ lệ tối thiểu của dung lượng lưu trữ phải khả dụng trên một nút trước khi Longhorn ngừng ghi vào nút đó. Giá trị mặc định là 15%.upgradeChecker
: Xác định liệu Longhorn có kiểm tra các bản cập nhật mới không. Giá trị mặc định làfalse
.defaultReplicaCount
: Xác định số lượng replica mặc định cho một tập tin dữ liệu được lưu trữ trong Longhorn. Giá trị mặc định là 2.backupstorePollInterval
: Xác định khoảng thời gian (theo mili giây) giữa các lần kiểm tra xem một bản sao lưu đã được tạo ra hay chưa. Giá trị mặc định là 500.nodeDownPodDeletionPolicy
: Xác định cách xử lý các pod replica khi một nút bị ngắt kết nối hoặc bị tắt. Giá trị mặc định làdo-nothing
, có nghĩa là các pod replica sẽ vẫn được giữ lại.guaranteedEngineManagerCPU
: Xác định mức CPU đảm bảo cho Engine Manager của Longhorn. Giá trị mặc định là 15.guaranteedReplicaManagerCPU
: Xác định mức CPU đảm bảo cho Replica Manager của Longhorn. Giá trị mặc định là 15.
namespaceOverride: "longhorn-storage"
namespaceOverride: "longhorn-storage"
là một giá trị cấu hình trong Longhorn, một hệ thống lưu trữ dựa trên điều khiển phiên bản cho Kubernetes. Giá trị này được sử dụng để ghi đè tên namespace mặc định được sử dụng bởi Longhorn trong Kubernetes.
Khi Longhorn triển khai, nó sẽ tạo ra các đối tượng Kubernetes trong namespace được chỉ định. Theo mặc định, Longhorn sử dụng namespace longhorn-system
. Tuy nhiên, nếu bạn muốn sử dụng một tên namespace khác, bạn có thể sử dụng namespaceOverride
để ghi đè giá trị này.
Trong trường hợp này, giá trị namespaceOverride
được đặt thành storage
, do đó Longhorn sẽ triển khai các đối tượng Kubernetes trong namespace storage
thay vì longhorn-system
.
Hãy cài thêm open-iscsi cho các Worker Node để nó có thể mount được phân vùng từ longhorn storage
ssh -o StrictHostKeychecking=no root@192.168.13.214 'apt install -y open-iscsi'
ssh -o StrictHostKeychecking=no root@192.168.13.215 'apt install -y open-iscsi'
ssh -o StrictHostKeychecking=no root@192.168.13.216 'apt install -y open-iscsi'
ssh -o StrictHostKeychecking=no root@192.168.13.217 'apt install -y open-iscsi'
ssh -o StrictHostKeychecking=no root@192.168.13.218 'apt install -y open-iscsi'
ssh -p 22 -o StrictHostKeychecking=no root@192.168.13.214 "apt install -y nfs-common nfs-kernel-server rpcbind && systemctl restart rpcbind && systemctl restart nfs-server"
ssh -p 22 -o StrictHostKeychecking=no root@192.168.13.215 "apt install -y nfs-common nfs-kernel-server rpcbind && systemctl restart rpcbind && systemctl restart nfs-server"
ssh -p 22 -o StrictHostKeychecking=no root@192.168.13.216 "apt install -y nfs-common nfs-kernel-server rpcbind && systemctl restart rpcbind && systemctl restart nfs-server"
ssh -p 22 -o StrictHostKeychecking=no root@192.168.13.217 "apt install -y nfs-common nfs-kernel-server rpcbind && systemctl restart rpcbind && systemctl restart nfs-server"
ssh -p 22 -o StrictHostKeychecking=no root@192.168.13.218 "apt install -y nfs-common nfs-kernel-server rpcbind && systemctl restart rpcbind && systemctl restart nfs-server"
Vậy là đã config xong rồi, cài lên thôi xem nó có chạy được không nào. Đầu tiên hãy tạo namespace cho longhorn.
$ kubectl create ns longhorn-storage
namespace/longhorn-storage created
Hãy triển khai nó, lưu ý khi triển khai nhớ trỏ tới file values đã chỉnh sửa values-longhorn.yaml.
$ helm install longhorn-storage -f values-longhorn.yaml longhorn/longhorn --namespace longhorn-storage --version 1.3.2
NAME: longhorn-storage
LAST DEPLOYED: Wed May 17 02:40:47 2023
NAMESPACE: longhorn-storage
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Longhorn is now installed on the cluster!
Please wait a few minutes for other Longhorn components such as CSI deployments, Engine Images, and Instance Managers to be initialized.
Visit our documentation at https://longhorn.io/docs/
Lưu ý: Một số phiên bản bạn phải sử dụng helm install longhorn-storage -f values-longhorn.yaml longhorn/longhorn --namespace storage --version 1.3.2
thay cho helm install longhorn-storage -f values-longhorn.yaml longhorn --namespace storage --version 1.3.2
.
Chờ ít phút để các port được khởi tạo
$ kubectl get po -n longhorn-storage
NAME READY STATUS RESTARTS AGE
csi-attacher-7bf4b7f996-gtnx8 1/1 Running 0 7m33s
csi-attacher-7bf4b7f996-ls72s 1/1 Running 0 7m33s
csi-attacher-7bf4b7f996-r7dt4 1/1 Running 0 7m33s
csi-provisioner-869bdc4b79-942fx 1/1 Running 0 7m33s
csi-provisioner-869bdc4b79-fz4xc 1/1 Running 0 7m33s
csi-provisioner-869bdc4b79-p8dh7 1/1 Running 0 7m33s
csi-resizer-6d8cf5f99f-rj4ff 1/1 Running 0 7m32s
csi-resizer-6d8cf5f99f-wp2q6 1/1 Running 0 7m32s
csi-resizer-6d8cf5f99f-wsqts 1/1 Running 0 7m32s
csi-snapshotter-588457fcdf-nrlqb 1/1 Running 0 7m32s
csi-snapshotter-588457fcdf-prwkq 1/1 Running 0 7m32s
csi-snapshotter-588457fcdf-t5wnm 1/1 Running 0 7m32s
engine-image-ei-a5371358-bwglb 1/1 Running 0 7m44s
engine-image-ei-a5371358-fd2d4 1/1 Running 0 7m44s
engine-image-ei-a5371358-k4zct 1/1 Running 0 7m44s
engine-image-ei-a5371358-q5nd7 1/1 Running 0 7m44s
engine-image-ei-a5371358-zzxbj 1/1 Running 0 7m44s
instance-manager-e-6f34b455 1/1 Running 0 7m44s
instance-manager-e-8245514f 1/1 Running 0 7m44s
instance-manager-e-b31c0bcb 1/1 Running 0 7m42s
instance-manager-e-bfc11541 1/1 Running 0 7m43s
instance-manager-e-eee87d62 1/1 Running 0 7m43s
instance-manager-r-0746944c 1/1 Running 0 7m42s
instance-manager-r-34f408f3 1/1 Running 0 7m44s
instance-manager-r-3921a223 1/1 Running 0 7m43s
instance-manager-r-7d2c567f 1/1 Running 0 7m43s
instance-manager-r-a080b962 1/1 Running 0 7m43s
longhorn-admission-webhook-7c844f9f84-7z2wr 1/1 Running 0 8m59s
longhorn-admission-webhook-7c844f9f84-srgqd 1/1 Running 0 8m59s
longhorn-conversion-webhook-7ccbc76644-jf2xs 1/1 Running 0 8m59s
longhorn-conversion-webhook-7ccbc76644-v5lf6 1/1 Running 0 8m59s
longhorn-csi-plugin-2mc56 2/2 Running 0 7m32s
longhorn-csi-plugin-886zx 2/2 Running 0 7m32s
longhorn-csi-plugin-c67t2 2/2 Running 0 7m32s
longhorn-csi-plugin-jnrg6 2/2 Running 0 7m32s
longhorn-csi-plugin-zd662 2/2 Running 0 7m32s
longhorn-driver-deployer-7cc87fccc8-9f7w2 1/1 Running 0 8m59s
longhorn-manager-79gmc 1/1 Running 0 8m59s
longhorn-manager-ggzsn 1/1 Running 0 8m59s
longhorn-manager-rc7xn 1/1 Running 0 8m59s
longhorn-manager-s28zq 1/1 Running 0 8m59s
longhorn-manager-xnp78 1/1 Running 0 8m59s
longhorn-ui-78f7cdf84c-vsmjv 1/1 Running 0 8m59s
Hãy kiểm tra Ingress ta thấy Ingress đã được tạo.
$ kubectl get ing longhorn-ingress -n longhorn-storage
NAME CLASS HOSTS ADDRESS PORTS AGE
longhorn-ingress nginx longhorn.hoanghd.com 192.168.13.239 80 9m28s
Hãy trỏ tên miền cho longhorn.hoanghd.com về VIP của loadbalancer 192.168.13.239.
$ cat /etc/hosts | grep 'longhorn'
192.168.13.239 longhorn.hoanghd.com
Kiểm tra kết nối.
$ ping longhorn.hoanghd.com
PING longhorn.hoanghd.com (192.168.13.239): 56 data bytes
64 bytes from 192.168.13.239: icmp_seq=0 ttl=63 time=5.587 ms
64 bytes from 192.168.13.239: icmp_seq=1 ttl=63 time=5.588 ms
64 bytes from 192.168.13.239: icmp_seq=2 ttl=63 time=5.190 ms
64 bytes from 192.168.13.239: icmp_seq=3 ttl=63 time=4.721 ms
--- longhorn.hoanghd.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 4.721/5.272/5.588/0.357 ms
Hãy sử dụng trình duyệt truy cập vào longhorn.hoanghd.com, ta có kết quả như dưới.
Đúng như đã đề cập ở đầu bài viết, longhorn storage được cài trên 5 Worker Node và trên mỗi node đều sử dụng một Disk mặc định ở phân vùng /home/longhorn-storage
Để xoá Longhorn Storage dùng lệnh helm uninstall <tên của ứng dụng triển khai bằng helm muốn xoá> --namespace <tên namespace>
.
$ helm uninstall longhorn-storage --namespace storage
release "longhorn-storage" uninstalled