Sunday, November 24, 2024

Cài đặt Storage cho K8S dùng longhorn

-

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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories