Mở Đầu
Trong phần tiếp theo này của series [K8S], chúng ta sẽ tìm hiểu cách Install Ceph Cluster trên môi trường Kubernetes để triển khai một hệ thống lưu trữ phân tán mạnh mẽ và linh hoạt. Ceph không chỉ hỗ trợ lưu trữ block, object mà còn là giải pháp hoàn hảo cho các ứng dụng yêu cầu khả năng mở rộng và hiệu suất cao.
Trong những ngày đầu của Kubernetes, hầu hết các ứng dụng được triển khai đều là Stateless (không lưu trữ dữ liệu), nghĩa là không cần lưu dữ liệu lâu dài. Tuy nhiên, khi Kubernetes ngày càng phổ biến, nhu cầu về độ tin cậy khi triển khai các dịch vụ có trạng thái (Stateful) bắt đầu xuất hiện. Hiện tại, bạn có thể sử dụng nhiều loại lưu trữ khác nhau như vSphere Volumes, Ceph, AWS Elastic Block Store, Glusterfs, NFS, GCE Persistent Disk, và nhiều loại khác. Điều này giúp chúng ta triển khai các dịch vụ Stateful yêu cầu một nền tảng lưu trữ mạnh mẽ.
Bài viết này sẽ hướng dẫn bạn các bước chi tiết để cài đặt, cấu hình và tích hợp Ceph vào Kubernetes, giúp tận dụng tối đa sức mạnh của hệ thống lưu trữ trong môi trường container docker kubernetes.
Giới Thiệu Về Rook & Ceph Cluster
Rook và Ceph là gì?
Ceph là một hệ thống lưu trữ phân tán cung cấp lưu trữ dạng tệp (file), khối (block) và đối tượng (object) và thường được triển khai trong các cụm sản xuất lớn. Rook cho phép chúng ta tự động hóa quá trình triển khai, cấu hình, mở rộng và nâng cấp Ceph Cluster trong môi trường Kubernetes. Ceph được sử dụng rộng rãi trong cơ sở hạ tầng nội bộ (In-House Infrastructure) khi các giải pháp lưu trữ được quản lý không phải là lựa chọn khả thi.
Rook sử dụng các khái niệm cơ bản của Kubernetes để quản lý lưu trữ định nghĩa bằng phần mềm trên Kubernetes.
Các thành phần chính của Rook Storage Orchestrator:
- Định nghĩa tài nguyên tùy chỉnh (CRDs) – Được sử dụng để tạo và tùy chỉnh các cụm lưu trữ. Các CRDs được triển khai vào Kubernetes trong quá trình cài đặt.
- Rook Operator cho Ceph – Tự động hóa toàn bộ cấu hình của các thành phần lưu trữ và giám sát cụm để đảm bảo sức khỏe và tính sẵn sàng.
- DaemonSet gọi là rook-discover – Khởi chạy một pod chạy tác nhân tìm kiếm trên mỗi node của Kubernetes Cluster để phát hiện các thiết bị đĩa chưa phân vùng hoặc chưa được định dạng có thể dùng làm đĩa OSD cho Ceph.
- Giám sát – Rook kích hoạt Ceph Dashboard và cung cấp bộ thu thập/xuất báo cáo và bảng điều khiển giám sát.
Các tính năng của Rook
- Rook cho phép bạn cung cấp lưu trữ dạng khối, tệp và đối tượng với nhiều nhà cung cấp lưu trữ khác nhau.
- Khả năng phân phối và sao chép dữ liệu hiệu quả để giảm thiểu rủi ro mất dữ liệu.
- Rook được thiết kế để quản lý các công nghệ lưu trữ mã nguồn mở – như NFS, Ceph, Cassandra.
- Rook là phần mềm mã nguồn mở phát hành dưới giấy phép Apache 2.0.
- Rook cho phép mở rộng hoặc hợp nhất cụm lưu trữ trong môi trường Kubernetes.
- Rook giúp các quản trị viên hệ thống dễ dàng kích hoạt lưu trữ linh hoạt trong trung tâm dữ liệu.
- Khi áp dụng Rook làm công cụ quản lý lưu trữ, bạn có thể tối ưu hóa khối lượng công việc trên phần cứng thông thường.
Install Ceph Cluster Trong Kubernetes với Rook
Dưới đây là các yêu cầu thiết lập tối thiểu để triển khai Rook và Ceph Storage trên Kubernetes Cluster:
- Một cụm với ít nhất ba node.
- Các thiết bị đĩa trống (không có phân vùng hoặc hệ thống tệp định dạng sẵn).
- Hoặc các phân vùng thô (không có hệ thống tệp định dạng sẵn).
- Hoặc các Persistent Volumes từ một storage class ở chế độ block.
Mô hình Install Ceph Cluster Rook
Mô hình Install Ceph Cluster Kubernetes sử dụng 4 worker node & 1 master node chạy hệ điều hành Redhat 8, và Install Ceph Cluster trên Kubernetes. Sử dụng thiết bị Load Balancer truy cập qua cơ chế Node Port của các Worker để quản trị Dashboard Ceph với giao diện web.
Cài Đặt, Cấu Hình Rook Ceph Cluster
B1: Thêm disk các worker trên Vsphere vmware
B2: Thực hiện kiểm tra disk thêm vào mỗi worker
B3: Kiểm tra NTP các host đã đồng bộ (nếu chưa có)
sudo yum install chrony -y
vi /etc/chrony.conf
sudo systemctl start chronyd
sudo systemctl enable chronyd
chronyc tracking
B4:Deploy Rook Storage Orchestrator
yum install git -y
git clone https://github.com/rook/rook.git
cd rook/deploy/examples/
kubectl -n rook-ceph get all
kubectl create -f crds.yaml -f common.yaml
B5: Deploy the Rook Operator
kubectl create -f operator.yaml
kubectl get pod -n rook-ceph
kubectl -n rook-ceph get all
B6:Tạo Ceph Cluster trên Kubernetes
Đặt default namespace cho rook
kubectl config set-context –current –namespace rook-ceph
Tạo một app_cluster.yaml ra 1 bản với nội dung dưới đây:
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: ceph-cluster
namespace: rook-ceph
spec:
cephVersion:
image: quay.io/ceph/ceph:v19 # Phien ban su dung
dataDirHostPath: /var/lib/rook
mon:
count: 3
allowMultiplePerNode: false
dashboard:
enabled: true
network:
hostNetwork: false
storage:
useAllNodes: false # Chi dinh su dung khong cho all worker node
useAllDevices: yes # Chi dinh su dung khong cho all worker node
nodes:
– name: “k8s-worker01” # Tên cua worker node 1
devices:
– name: “/dev/sdb” # Chỉ định device là /dev/sdb
– name: “k8s-worker02” # Tên cua worker node 2
devices:
– name: “/dev/sdb”
– name: “k8s-worker03” # Tên cua worker node 3
devices:
– name: “/dev/sdb”
– name: “k8s-worker04” # Tên cua worker node 4
devices:
– name: “/dev/sdb”
Thực hiện chạy tạo cluster
kubectl create -f app_cluster.yaml
Chạy lệnh dưới đây để theo dõi quá trình tạo các pod
kubectl -n rook-ceph get all
kubectl get pods -n rook-ceph -w
Kiểm tra tình trạng các node và cluster
kubectl get -n rook-ceph jobs.batch
kubectl -n rook-ceph get cephcluster
B7:Cài Rook Ceph toolbox in Kubernetes
B8: Làm việc với Ceph Storage Modes
Rook cung cấp ba loại lưu trữ sau đây:
- Shared Filesystem: Tạo một hệ thống tệp được chia sẻ giữa nhiều pod (RWX).
- Block: Tạo lưu trữ khối để được sử dụng bởi một pod (RWO).
- Object: Tạo một kho lưu trữ đối tượng có thể truy cập từ trong hoặc ngoài cụm Kubernetes.
Cephfs được sử dụng để kích hoạt hệ thống tệp được chia sẻ có thể được gắn kết với quyền đọc/ghi từ nhiều pod.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: bmc-cephfs-pvc
labels:
group: snapshot-test
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: bmc-rook-cephfs
B9: Quản lý Ceph Dashboard
- Tình trạng sức khỏe tổng thể
- Trạng thái của mon quorum
- Trạng thái s của mgr và osds
- Trạng thái của các daemon Ceph khác
- Xem nhóm và trạng thái PG
- Nhật ký cho các daemon
Liệt kê các dịch vụ trong rook-ceph
kubectl get svc -n rook-ceph
Truy cập Dashboard với Node Port
Kiểm tra file dashboard-external-http.yaml
B10: Cấu hình LB truy cập cho Ceph
Mở Rộng Disk Trên Ceph Cluster
Thực hiện mở rộng disk trên Vsphere/ESXI
Kiểm tra disk trên mỗi worker đã nhận disk hay chưa
partprobe /dev/sdb
lsblk
Kiểm tra các pod đang chạy trên worker node
kubectl -n rook-ceph get pods -o wide | grep osd
Thực hiện restart pod trên các worker node
kubectl -n rook-ceph delete pod <tên pod>
kubectl -n rook-ceph delete pod rook-ceph-osd-3-555686b896-dnzw7
Kiểm tra disk đã được mở rộng
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools — bash
ceph osd status
Gỡ Bỏ Ceph Cluster On Kubernetes
dd if=/dev/zero of=”/dev/sdb” bs=1M count=100 oflag=direct,dsync
blkdiscard /dev/sdb
ls /dev/mapper/ceph-* | xargs -I% — dmsetup remove %
rm -rf /dev/ceph-*
rm -rf /dev/mapper/ceph–*
partprobe /dev/sdb
rm -rf rook/
cd kubelet/
rm -rf plugins
rm -rf plugins_registry/
Kết Luận
Kết thúc Phần 2 của chuỗi Series Install Ceph Cluster Kubernetes, chúng ta đã hoàn tất việc cài đặt và cấu hình Ceph Cluster trên môi trường Kubernetes. Đây là một bước tiến quan trọng, giúp bạn nắm vững cách tích hợp một hệ thống lưu trữ phân tán mạnh mẽ như Ceph vào hệ sinh thái Kubernetes, cung cấp giải pháp lưu trữ đáng tin cậy cho các ứng dụng Stateful.
Trong các phần tiếp theo của chuỗi Series, chúng ta sẽ tiếp tục khám phá các tính năng nâng cao khác của Kubernetes, từ quản lý tài nguyên hiệu quả đến mở rộng hệ thống và tối ưu hóa hiệu suất. Hãy cùng chờ đón và theo dõi nhé!
Bài viết hay, cám ơn tác giả