Giới thiệu

MSc | AI/ML | Cyber Security | DevOps | ITIL | Compliance | Cloud | System | Virtualization | DBA | SAN...

Security/DevSecOps tại VietSunshine CyberSecurity

System & Network Engineer tại HQG

Từng học Thạc sĩ khoa học máy tính - Đại học quốc tế Sài Gòn

Từng học Đại học công nghệ thông tin - ĐHQG TPHCM

Sống tại Hồ Chí Minh, Việt Nam

Đến từ Lộc Ninh, Bình Phước, Việt Nam

Xem nhiều hơn

Bài mới

Series [K8S]: Phần 3 Install Rancher on Kubernetes
Series [K8S]: Phần 2 Install Ceph Cluster Kubernetes
Series [K8S]: Phần 1 Install Kubernetes Cluster v1.28
Series [CA]: Phần 2 Create SAN Certificate
Linux Route Two Card Network
Resize LVM Disk On Redhat
Series [Powershell]: Phần 1 Encrypting Script Using AES
Series [SIEM]: Phần 05 Postman With Qradar API
Series [CA]: Phần 1 Install CA Windows Server

Series [K8S]: Phần 2 Install Ceph Cluster Kubernetes

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ì?

Rook là một công cụ mạnh mẽ và miễn phí, cung cấp giải pháp lưu trữ gốc đám mây (cloud-native) mã nguồn mở cho Kubernetes. Rook hỗ trợ nhiều giải pháp lưu trữ để tích hợp tự nhiên vào các môi trường đám mây. Các giải pháp lưu trữ hiện được Rook hỗ trợ được liệt kê chi tiết trong phần trạng thái dự án.

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

Thiết kế mô hinh Install Ceph Cluster Kubernetes
Thiết kế mô hinh Install Ceph Cluster Kubernetes

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

Add disk

B2: Thực hiện kiểm tra disk thêm vào mỗi worker

kiem tra disk kubernetes

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

ceph operator

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

cluster ceph

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

cluster ceph healthy

B7:Cài Rook Ceph toolbox in Kubernetes

Hộp công cụ Rook Ceph là một container có các công cụ phổ biến được sử dụng để gỡ lỗi và thử nghiệm rook. Hộp công cụ này dựa trên CentOS và bất kỳ công cụ bổ sung nào cũng có thể dễ dàng cài đặt qua yum.
Chúng ta sẽ khởi động một pod toolbox để chúng ta kết nối và thực thi các lệnh Ceph từ một shell.
Chuyển đến thư mục ceph:
cd rook/deploy/examples
kubectl apply -f toolbox.yaml
Kết nối pod sử dụng kubectl command
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools — bash
ceph status
ceph osd status
ceph df
ceph check

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.

Cập nhật file filesystem.yaml bằng cách đặt tên nhóm dữ liệu, kích thước sao chép, v.v. và thực hiện chạy tạo dịch vụ:
kubectl create -f filesystem.yaml
filesystem
Thực hiện kiểm tra thông tin osd pool
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools — bash
ceph fs ls
ceph osd lspools
pool
Cập nhật fsName vàpool name vào Cephfs storageclass.yaml
storage class
Tạo và kiểm tra Storage class
kubectl create -f csi/cephfs/storageclass.yaml
kubectl get sc
create storage class
Tạo Persistent Volume PVC
Nội dung một file pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: bmc-cephfs-pvc
labels:
group: snapshot-test
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: bmc-rook-cephfs
kubectl create -f csi/cephfs/pvc.yaml
kubectl get pvc
pvc create

B9: Quản lý Ceph Dashboard

Ceph Dashboard cung cấp cho bạn tổng quan về trạng thái của cụm Ceph:
  • 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

Tạo dashboard và lấy password truy cập
kubectl create -f dashboard-external-http.yaml
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath=”{[‘data’][‘password’]}” | base64 –dec ode && echo
ceph password

B10: Cấu hình LB truy cập cho Ceph

Trên thiết bị LB, ở đây dùng Citrix ADC, thêm dịch vụ và Node port của các worker node
citrix adc ceph
Thực hiện. thêm virtual server truy cập qua SSL
Dashboard truy cập qua LB

Mở Rộng Disk Trên Ceph Cluster

Thực hiện mở rộng disk trên Vsphere/ESXI

vsphere extend disk

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

Sửa CephCluster và thêm vào cleanupPolicy
kubectl -n rook-ceph patch cephcluster rook-ceph –type merge -p ‘{“spec”:{“cleanupPolicy”:{“confirmation”:”yes-really-destroy-data”}}}’
Xóa block storage và file storage:
cd rook/deploy/examples
kubectl delete -n rook-ceph cephblockpool replicapool
kubectl delete -f csi/rbd/storageclass.yaml
kubectl delete -f filesystem.yaml
kubectl delete -f csi/cephfs/storageclass.yaml
Xóa CephCluster
kubectl -n rook-ceph delete cephcluster rook-ceph
Kiểm tra lại cephcluster
kubectl -n rook-ceph get cephcluster
Xóa Operator và các file liên quan
kubectl delete -f operator.yaml
kubectl delete -f common.yaml
kubectl delete -f crds.yaml
Thực hiện trên các worker format disk về raw
Cài đặt gdisk nếu chưa cài trên worker node
yum install gdisk -y
Sửa lại disk sdb phù hợp với lable disk được thêm vào
sgdisk –zap-all /dev/sdb
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
Xóa các thư viện plugin rook trên các worker node
cd /var/lib/
rm -rf rook/
cd kubelet/
rm -rf plugins
rm -rf plugins_registry/
Kiểm tra thêm tài nguyên nào đang trì hoãn việc xóa và loại bỏ trình hoàn tất rồi xóa những tài nguyên đó.
kubectl api-resources –verbs=list –namespaced -o name | xargs -n 1 kubectl get –show-kind –ignore-not-found -n rook-ceph
Nếu output là
NAME                                               DATA     AGE
configmap/rook-ceph-mon-endpoints 4         23h
Thực hiện delete
kubectl delete configmap/rook-ceph-mon-endpoints -n rook-ceph

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é!

Theo dõi
Thông báo của
guest
1 Bình luận
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Hoàng
Hoàng
1 tháng trước

Bài viết hay, cám ơn tác giả

LƯỢT TRUY CẬP

Đang Online 0
Hôm nay 9
Hôm qua 55
Tổng truy cập 29547

Xem nhiều

Series [K8S]: Phần 3 Install Rancher on Kubernetes
Series [K8S]: Phần 2 Install Ceph Cluster Kubernetes
Series [K8S]: Phần 1 Install Kubernetes Cluster v1.28
Series [CA]: Phần 2 Create SAN Certificate

Video