前提条件
k8s 集群
节点挂载空盘用于ceph osd
下载源文件,本文档是1.14.1Source code (tar.gz) (github.com)
解压进入deploy/examples目录,以下操作如果没有说明,都是在examples目录下操作
部署
部署operator
打开自动发现
修改operator.yaml 中的ROOK_ENABLE_DISCOVERY_DAEMON为true
修改镜像地址
国内访问不到google地址,使用修改为阿里云地址
,我这里使用私有仓库,只要保证可以拉取到即可。
ROOK_CSI_CEPH_IMAGE: "registry.aliyuncs.com/google_containers/cephcsi:v3.10.2"
ROOK_CSI_REGISTRAR_IMAGE: "registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.9.1"
ROOK_CSI_RESIZER_IMAGE: "registry.aliyuncs.com/google_containers/csi-resizer:v1.9.2"
ROOK_CSI_PROVISIONER_IMAGE: "registry.aliyuncs.com/google_containers/csi-provisioner:v3.6.3"
ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.aliyuncs.com/google_containers/csi-snapshotter:v6.3.2"
ROOK_CSI_ATTACHER_IMAGE: "registry.aliyuncs.com/google_containers/csi-attacher:v4.4.2"
开始部署
kubectl apply -f crds.yaml -f common.yaml -f operator.yaml
等待所有pod运行
如果这是你第一次安装,不需要初始化,否则需要将磁盘清空。谨慎操作!!!
DISK=$1
# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean)
sgdisk --zap-all $DISK
# Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync
# SSDs may be better cleaned with blkdiscard instead of dd
blkdiscard $DISK
# Inform the OS of partition table changes
partprobe $DISK
# This command hangs on some systems: with caution, 'dmsetup remove_all --force' can be used
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove % &> /dev/null
# ceph-volume setup can leave ceph-<UUID> directories in /dev and /dev/mapper (unnecessary clutter)
rm -rf /dev/ceph-*
rm -rf /dev/mapper/ceph--*
rm -rf /var/lib/rook/
集群中每个节点都运行以上脚本初始化磁盘
$ ./cleanup.sh /dev/sdx # 将sdb盘清空,并删除ceph遗留文件
部署集群
修改cluster.yaml文件中的storage,如果想使用集群中所有的节点上的所有存储,使用默认配置即可
同时支持定义指定节点指定磁盘。如下,指定k8s-master01、2、3中的sd开头的磁盘
storage: # cluster level storage configuration and selection
useAllNodes: false
useAllDevices: false
deviceFilter:
config:
nodes:
- name: "k8s-master01"
deviceFilter: "^sd."
- name: "k8s-master02"
deviceFilter: "^sd."
- name: "k8s-master03"
deviceFilter: "^sd."
如果指定单个磁盘
storage: # cluster level storage configuration and selection
useAllNodes: false
useAllDevices: false
config:
nodes:
- name: "k8s-master01"
devices:
- name: "sdb"
- name: "k8s-master02"
devices:
- name: "sdb"
- name: "k8s-master03"
devices:
- name: "sdb"
开始部署
kubectl apply -f cluster.yaml
检查pod状态
部署工具
kubectl apply -f toolbox.yaml
kubectl exec -it -n rook-ceph rook-ceph-tools-66b77b8df5-b7r22 -- bash
ceph -s # 检查状态
部署StorageClass并测试
使用cephfs
CephFS 共享文件系统(Shared Filesystem)适用于多个Pod之间共享读写(RWX)的存储
kubectl apply -f filesystem.yaml
等待文件系统状态ready
部署storageclass
cd csi/cephfs
kubectl apply -f storageclass.yaml
检查状态
测试cephfs申请动态pvc
kubectl apply -f pvc.yaml
绑定成功
使用rbd存储
块存储(Block)适用于为单个 Pod 提供读写一致性(RWO)的存储
cd csi/rbd
kubectl apply -f storageclass.yaml
测试rbd申请动态pvc
kubectl apply -f pvc.yaml
使用对象存储
对象存储(Object)提供了一个可通过内部或外部的Kubernetes集群的S3端点访问的存储
kubectl apply -f object.yaml
等待状态ready
部署storageclass
kubectl create -f storageclass-bucket-delete.yaml
测试使用对象存储
创建OBC对象存储桶
kubectl apply -f object-bucket-claim-delete.yaml
安装测试工具s5cmd
wget https://github.com/peak/s5cmd/releases/download/v2.2.2/s5cmd_2.2.2_Linux-64bit.tar.gz
tar -xvf s5cmd_2.2.2_Linux-64bit.tar.gz
mv s5cmd /usr/local/bin/
设置凭证
可以使用一下命令生成,或者手动获取OBC同名secret,base64解码获取并写到配置文件
export AWS_ACCESS_KEY_ID=$(kubectl -n default get secret ceph-delete-bucket -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 --decode)
export AWS_SECRET_ACCESS_KEY=$(kubectl -n default get secret ceph-delete-bucket -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 --decode)
mkdir ~/.aws
cat > ~/.aws/credentials << EOF
[default]
aws_access_key_id = ${AWS_ACCESS_KEY_ID}
aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}
EOF
测试获取桶列表
列出当前凭据可以访问的所有桶
kubectl get svc -n rook-ceph
s5cmd --endpoint-url http://10.107.248.38 ls
桶名称与configmap对应即可。
卸载
清空ceph的pvc资源(根据环境删除)
kubectl delete pvc rbd-pvc cephfs-pvc
删除storageclass
kubectl delete sc rook-cephfs rook-ceph-block
kubectl delete -f filesystem.yaml # 如果没有部署cephfs就不需要删除
卸载集群
kubectl delete -f cluster.yaml
或者
kubectl delete cephcluster -n rook-ceph rook-ceph
卸载工具
kubectl delete -f toolbox.yaml
卸载operator
kubectl apply -f crds.yaml -f common.yaml -f operator.yaml
清理磁盘
$ ./cleanup.sh /dev/sdx