- vừa được xem lúc

Sử dụng BizflyCloud Volume làm Persistent Volume cho cụm K8s - BizFlyCloud Volume CSI

0 0 21

Người đăng: Hoàng Việt

Theo Viblo Asia

image.png

Giải quyết vấn đề gì?

Nếu như bạn đang chạy các ứng dụng, dịch vụ trên nền tảng K8s đặc biệt là các ứng dụng Stateful thì sẽ không còn quá lạ lẫm với việc sử dụng các Persistent Volume Claim (PVC) hay Persistent Volume (PV) để lưu dữ liệu cho các ứng dụng khi restart hoặc bị xóa. Có nhiều cách để chúng ta có thể tạo và sử dụng PV và PVC như sử dụng CInder của OpenStack, NFS hay các plugin của các nhà cung cấp dịch vụ thứ 3. Mỗi cách đều có nhưng ưu nhược điểm khác nhau.

Trong bài viết ngày hôm này mình sẽ giới thiệu bạn sử dụng Disk trên nền tảng của BizflyCloud để tự động tạo Persistent Volume cho PVC khi có yêu cầu. Mình sẽ thực hiện cài BizFly Cloud Volume CSI driver for Kubernetes lên trên cụm K8s đang sử dụng để có thể tạo ra các StorageClass. Sau đó khi đã có StorageClass ta chỉ cần chỉ định StorageClass này có các PVC là K8s sẽ tự động tạo ra các PV với kích thước tương ứng để chứa PVC này. Hầu hết các nhà cung cấp dịch vụ Cloud lớn như AWS, GCP hay Azure đều có plugin để hỗ trợ việc tạo theo cách tương tự nên sau khi hiểu bài viết này bạn hoàn toàn có thể ứng dụng cho các Cloud provider khác.

Điều kiện tiên quyết

  • Cụm Kubernetes
  • Tài khoản tại BizflyCloud có đủ quyền tạo ổ đĩa.

Cài đặt

Tạo secret

Các bước để cài đặt khá đơn giản chỉ cần follow đúng theo hướng dẫn trên document. Đầu tiên ta cần tạo 1 secret chứa các thông tin để tạo resoure disk trên cloud.

apiVersion: v1
kind: Secret
metadata: name: bizflycloud namespace: kube-system
stringData: application_credential_id: "your_application_credential_id" application_credential_secret: "your_application_credential_secret" tenant_id: "your_tenant_id" region: "your_region" # HN, HCM

Trong phần này bạn sẽ tạo secret tên bizflycloud ở namespace kube-system, trong đó chứa các thông tin về application id, application secret, tenant_id hay project_id và region là nơi bạn muốn disk được khởi tạo. Hiện tại Bizfly đang có 2 region là Hà Nội và Hồ Chí Minh.

Để lấy thông tin về application credential ta truy cập đường dẫn https://manage.bizflycloud.vn/account/security#application-credential và tạo mới Credential.

image.png

Sau đó ta sẽ có ID và secret của Application image.png

Để lấy được tenant_id ta truy cập vào API https://manage.bizflycloud.vn/account/api/users/info và tìm key tenant_id.

Deploy CSI Plugin

Tạo CSI Plugin

kubectl apply -f https://raw.githubusercontent.com/bizflycloud/csi-bizflycloud/master/manifest/plugin/csi-driver.yaml

Thêm RBAC cho controller plugin và node plugin

kubectl apply -f https://raw.githubusercontent.com/bizflycloud/csi-bizflycloud/master/manifest/plugin/csi-bizflycloud-controllerplugin-rbac.yaml
kubectl apply -f https://raw.githubusercontent.com/bizflycloud/csi-bizflycloud/master/manifest/plugin/csi-bizflycloud-nodeplugin-rbac.yaml

Cài đặt CSI Statefulset và Daemonset

kubectl apply -f https://raw.githubusercontent.com/bizflycloud/csi-bizflycloud/master/manifest/plugin/csi-bizflycloud-controllerplugin.yaml
kubectl apply -f https://raw.githubusercontent.com/bizflycloud/csi-bizflycloud/master/manifest/plugin/csi-bizflycloud-nodeplugin.yaml

Như vậy ta đã tạo xong các thành phần cần thiết, tiếp theo ta tạo StorageClass. Ta tạo file storageClasses.yaml với nội dung như sau:

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: name: premium-hdd annotations: storageclass.kubernetes.io/is-default-class: "true"
provisioner: volume.csi.bizflycloud.vn
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters: category: premium type: HDD
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: name: premium-ssd
provisioner: volume.csi.bizflycloud.vn
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters: category: premium type: SSD
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: name: enterprise-hdd
provisioner: volume.csi.bizflycloud.vn
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters: category: enterprise type: HDD
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: name: enterprise-ssd
provisioner: volume.csi.bizflycloud.vn
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters: category: enterprise type: SSD

Ở đây ta tạo ra 4 storage class tương ứng với 4 loại ổ đĩa khác nhau với tốc độ khác nhau Premium => Enterprise, Ngoài ra còn có ổ địa Dedicated, ta có thể thêm bằng cách tương tự. Với file yaml trên ta đang để loại ổ điã mặc định là hdd-premium nên với 1 PVC không được set StorageClass thì mặc định sẽ sử dụng hdd-prenium. Ta apply file trên để có các storageclass

kubectl apply -f storageClasses.yaml image.png

Như vậy ta đã cài đặt xong CSI hỗ trợ cho việc khởi tạo các PV tương ứng cho PVC. Sau đây ta sẽ thử nghiệm để xem mọi thứ đã hoạt động như mong đợi chưa.

Thử nghiệm

Để thử nghiệm ta tạo một ứng dụng stateful sử dụng PVC, trong ví dụ này sẽ là Redis sử dụng bitnami helm chart.

image.png

Sau khi cài đặt helm chart thì ta thấy các pvc đã được claim vào các PV tự động gen ra như hình

Như vậy nếu không set StorageClassName thì mặc định PVC sẽ sử dụng StorageClass hdd-premium

Lưu ý: Size volume nên để chia hết cho 10

Ưu điểm

  • Tiện lợi hơn trong việc quản trị các resource.
  • Đa dạng các loại ổ đĩa để chọn (HDD, SSD) với các tốc độ khác nhau.
  • Có thể tích hợp với dịch vụ backup trên Cloud để bảo mật dữ liệu.
  • ...

Nhược điểm

  • Chi phí đắt hơn.
  • Đòi hỏi người quản trị cần có kiến thức nhất định về dịch vụ đang sử dụng trên Cloud đó.

Kết

Hy vong bài viết sẽ giúp bạn một lúc nào đó trong công việc.

Tham khảo

https://github.com/bizflycloud/bizfly-cloud-controller-manager https://github.com/bizflycloud/csi-bizflycloud https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/ https://github.com/bitnami/charts/tree/master/bitnami/redis

Bình luận

Bài viết tương tự

- vừa được xem lúc

Deploying A Containerized Web Application On Kubernetes

1. Overview. Kubernetes is an open source project (available on kubernetes.io) which can run on many different environments, from laptops to high-availability multi-node clusters; from public clouds to on-premise deployments; from virtual machines to bare metal.

0 0 55

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 113

- vừa được xem lúc

[Kubernetes] Kubectl và các command cơ bản

Mở đầu. Kubectl là công cụ quản trị Kubernetes thông qua giao diện dòng lệnh, cho phép bạn thực thi các câu lệnh trong Kubernetes cluster.

0 0 59

- vừa được xem lúc

Triển khai EFK Stack trên Kubernetes

EFK stack on K8S. Giới thiệu. Một hệ thống có thể chạy nhiều dịch vụ hoặc ứng dụng khác nhau, vì vậy việc. theo dõi hệ thống là vô cùng cần thiết.

0 0 72

- vừa được xem lúc

Thực hành Kubernetes (K8S) bằng cách sử dụng lệnh Command

Bài hướng dẫn hôm nay sẽ hướng dẫn sử dụng K8S bằng cách sử dụng câu lệnh thay vì UI trên web. Có 2 lựa chọn để thực hiện:. . Sử dụng Cloud Shell.

0 0 56

- vừa được xem lúc

Kubernetes best practices - Liveness và Readiness Health checks

Mở đầu. Kubernetes cung cấp cho bạn một framework để chạy các hệ phân tán một cách mạnh mẽ.

0 0 49