|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
使用外部 Ceph 驱动程序
这些说明介绍了如何在 RKE2 集群中使用外部 Ceph 驱动程序.如果您使用的是 RKE,则需要额外的步骤。有关详细信息,请参阅 本节。
在 RKE 中使用 Ceph 驱动程序
以下资源与基于 RKE 的集群完全兼容,但需要对 RKE 进行额外的 kubelet 配置。
在 RKE 集群中,kubelet 组件在 Docker 容器中运行,默认情况下无法访问主机的内核模块,如 rbd 和 libceph。
为了解决这个限制,您可以在工作节点上运行 modprobe rbd,或者配置 kubelet 容器以自动将主机的 /lib/modules 目录挂载到容器中。
对于 kubelet 配置,请在 RKE 集群配置之前将以下行放入 cluster.yml 文件中。您还可以通过在 Rancher UI 中点击 来稍后修改 cluster.yml,并重启工作节点.
services:
kubelet:
extra_binds:
- '/lib/modules:/lib/modules:ro'
有关 extra_binds 指令的更多信息,请参阅 本节。
在 SUSE® Rancher Prime: RKE2 集群上安装 ceph-csi 驱动程序
|
这些步骤仅适用于动态 RBD 配置。 |
有关 ceph-csi-rbd 图表的更多信息,请参阅 此页面。
要获取有关您的 SES 集群的详细信息,请运行:
ceph mon dump
查看其输出:
dumped monmap epoch 3 epoch 3 fsid 79179d9d-98d8-4976-ab2e-58635caa7235 last_changed 2021-02-11T10:56:42.110184+0000 created 2021-02-11T10:56:22.913321+0000 min_mon_release 15 (octopus) 0: [v2:10.85.8.118:3300/0,v1:10.85.8.118:6789/0] mon.a 1: [v2:10.85.8.123:3300/0,v1:10.85.8.123:6789/0] mon.b 2: [v2:10.85.8.124:3300/0,v1:10.85.8.124:6789/0] mon.c
稍后您将需要 fsid 和 mon 地址值。
使用 Helm 安装 ceph-csi 驱动程序
运行这些命令:
helm repo add ceph-csi https://ceph.github.io/csi-charts helm repo update helm search repo ceph-csi -l helm inspect values ceph-csi/ceph-csi-rbd > ceph-csi-rbd-values.yaml
修改 ceph-csi-rbd-values.yaml 文件,仅保留所需的更改:
# ceph-csi-rbd-values.yaml
csiConfig:
- clusterID: "79179d9d-98d8-4976-ab2e-58635caa7235"
monitors:
- "10.85.8.118:6789"
- "10.85.8.123:6789"
- "10.85.8.124:6789"
provisioner:
name: provisioner
replicaCount: 2
确保 ceph 监视器可以从 RKE2 集群访问,例如,通过 ping。
kubectl create namespace ceph-csi-rbd helm install --namespace ceph-csi-rbd ceph-csi-rbd ceph-csi/ceph-csi-rbd --values ceph-csi-rbd-values.yaml kubectl rollout status deployment ceph-csi-rbd-provisioner -n ceph-csi-rbd helm status ceph-csi-rbd -n ceph-csi-rbd
如果您希望通过 Helm 直接修改配置,可以调整 ceph-csi-rbd-values.yaml 文件并调用:
helm upgrade \ --namespace ceph-csi-rbd ceph-csi-rbd ceph-csi/ceph-csi-rbd --values ceph-csi-rbd-values.yaml
创建 RBD Ceph 资源
# 创建一个 ceph 池: ceph osd pool create myPool 64 64 # 创建一个块设备池: rbd pool init myPool # 创建一个块设备映像: rbd create -s 2G myPool/image # 创建一个块设备用户并记录密钥: ceph auth get-or-create-key client.myPoolUser mon "allow r" osd "allow class-read object_prefix rbd_children, allow rwx pool=myPool" | tr -d '\n' | base64 QVFDZ0R5VmdyRk9KREJBQTJ5b2s5R1E2NUdSWExRQndhVVBwWXc9PQ== # 将 ceph 用户 myPoolUser 编码为 base64 哈希: echo "myPoolUser" | tr -d '\n' | base64 bXlQb29sVXNlcg== # 创建一个块设备管理员用户并记录密钥: ceph auth get-or-create-key client.myPoolAdmin mds 'allow *' mgr 'allow *' mon 'allow *' osd 'allow * pool=myPool' | tr -d '\n' | base64 + QVFCK0hDVmdXSjQ1T0JBQXBrc0VtcVhlZFpjc0JwaStIcmU5M3c9PQ== # 将 ceph 用户 myPoolAdmin 编码为 base64 哈希: echo "myPoolAdmin" | tr -d '\n' | base64 bXlQb29sQWRtaW4=
配置 RBD Ceph 访问密钥
用户帐户
对于静态 RBD 配置(ceph 池中的映像必须存在),运行这些命令:
cat > ceph-user-secret.yaml << EOF apiVersion: v1 kind: Secret metadata: name: ceph-user namespace: default type: kubernetes.io/rbd data: userID: bXlQb29sVXNlcg== userKey: QVFDZ0R5VmdyRk9KREJBQTJ5b2s5R1E2NUdSWExRQndhVVBwWXc9PQ== EOF kubectl apply -f ceph-user-secret.yaml
管理员账户
要进行动态 RBD 配置(用于在给定的 Ceph 池中自动创建映像),请运行以下命令:
cat > ceph-admin-secret.yaml << EOF apiVersion: v1 kind: Secret metadata: name: ceph-admin namespace: default type: kubernetes.io/rbd data: userID: bXlQb29sQWRtaW4= userKey: QVFCK0hDVmdXSjQ1T0JBQXBrc0VtcVhlZFpjc0JwaStIcmU5M3c9PQ== EOF kubectl apply -f ceph-admin-secret.yaml
创建 RBD 测试资源
在 Pods 中使用 RBD
# pod
cat > ceph-rbd-pod-inline.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
name: ceph-rbd-pod-inline
spec:
containers:
- name: ceph-rbd-pod-inline
image: busybox
command: ["sleep", "infinity"]
volumeMounts:
- mountPath: /mnt/ceph_rbd
name: volume
volumes:
- name: volume
rbd:
monitors:
- 10.85.8.118:6789
- 10.85.8.123:6789
- 10.85.8.124:6789
pool: myPool
image: image
user: myPoolUser
secretRef:
name: ceph-user
fsType: ext4
readOnly: false
EOF
kubectl apply -f ceph-rbd-pod-inline.yaml
kubectl get pod
kubectl exec pod/ceph-rbd-pod-inline -- df -k | grep rbd
在持久卷中使用 RBD
# pod-pvc-pv
cat > ceph-rbd-pod-pvc-pv-allinone.yaml << EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: ceph-rbd-pv
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteOnce
rbd:
monitors:
- 10.85.8.118:6789
- 10.85.8.123:6789
- 10.85.8.124:6789
pool: myPool
image: image
user: myPoolUser
secretRef:
name: ceph-user
fsType: ext4
readOnly: false
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceph-rbd-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
name: ceph-rbd-pod-pvc-pv
spec:
containers:
- name: ceph-rbd-pod-pvc-pv
image: busybox
command: ["sleep", "infinity"]
volumeMounts:
- mountPath: /mnt/ceph_rbd
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: ceph-rbd-pvc
EOF
kubectl apply -f ceph-rbd-pod-pvc-pv-allinone.yaml
kubectl get pv,pvc,pod
kubectl exec pod/ceph-rbd-pod-pvc-pv -- df -k | grep rbd
在存储类中使用 RBD
此示例用于动态配置。需要 ceph-csi 驱动程序。
# pod-pvc-sc
cat > ceph-rbd-pod-pvc-sc-allinone.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd-sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: rbd.csi.ceph.com
parameters:
clusterID: 79179d9d-98d8-4976-ab2e-58635caa7235
pool: myPool
imageFeatures: layering
csi.storage.k8s.io/provisioner-secret-name: ceph-admin
csi.storage.k8s.io/provisioner-secret-namespace: default
csi.storage.k8s.io/controller-expand-secret-name: ceph-admin
csi.storage.k8s.io/controller-expand-secret-namespace: default
csi.storage.k8s.io/node-stage-secret-name: ceph-admin
csi.storage.k8s.io/node-stage-secret-namespace: default
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- discard
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceph-rbd-sc-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: ceph-rbd-sc
---
apiVersion: v1
kind: Pod
metadata:
name: ceph-rbd-pod-pvc-sc
spec:
containers:
- name: ceph-rbd-pod-pvc-sc
image: busybox
command: ["sleep", "infinity"]
volumeMounts:
- mountPath: /mnt/ceph_rbd
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: ceph-rbd-sc-pvc
EOF
kubectl apply -f ceph-rbd-pod-pvc-sc-allinone.yaml
kubectl get pv,pvc,sc,pod
kubectl exec pod/ceph-rbd-pod-pvc-sc -- df -k | grep rbd
SUSE® Rancher Prime: RKE2 服务器/主节点部署
sudo su + curl -sfL https://get.rke2.io | sh - + systemctl enable -- now rke2-server cat > /root/.bashrc << EOF + export PATH=$PATH:/var/lib/rancher/rke2/bin/ + export KUBECONFIG=/etc/rancher/rke2/rke2.yaml + EOF cat /var/lib/rancher/rke2/server/node-token token:K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTED::server:ec0308000b8a6b595da000efREDACTED
SUSE® Rancher Prime: RKE2 代理/工作节点部署
mkdir -p /etc/rancher/rke2/ cat > /etc/rancher/rke2/config.yaml << EOF + server: https://10.100.103.23:9345 + token:K10ca0c38d4ff90d8b80319ab34092e315a8b732622e6adf97bc9eb0536REDACTED::server:ec0308000b8a6b595da000efREDACTED + EOF curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh - systemctl enable --now rke2-agent.service
要将集群导入 Rancher,请点击 ☰ > 集群管理。然后在 集群 页面上,点击 导入现有。然后在服务器/主节点上运行提供的 kubectl 命令。
测试版本
运行 RKE2 节点的操作系统:安装了 kernel-default-5.3.18-24.49 的 JeOS SLE15-SP2
kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.4", GitCommit:"c96aede7b5205121079932896c4ad89bb93260af", GitTreeState:"clean", BuildDate:"2020-06-22T12:00:00Z", GoVersion:"go1.13.11", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7+rke2r1", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-20T01:50:52Z", GoVersion:"go1.15.5b5", Compiler:"gc", Platform:"linux/amd64"}
helm version
version.BuildInfo{Version:"3.4.1", GitCommit:"c4e74854886b2efe3321e185578e6db9be0a6e29", GitTreeState:"clean", GoVersion:"go1.14.12"}
RKE2 集群上的 Kubernetes 版本:v1.19.7+rke2r1
查错
如果您使用的是基于 SES7 的 SUSE 的 ceph-rook,编辑 rook-1.4.5/ceph/cluster.yaml 并设置 spec.network.hostNetwork=true 可能会有助于在 hostNetwork 上暴露监视器。
此外,为了操作 ceph-rook 集群,建议在由 kubectl apply -f rook-1.4.5/ceph/toolbox.yaml 部署 ceph-rook 的 Kubernetes 集群上部署一个工具箱。然后,所有与 ceph 相关的命令都可以在工具箱 pod 中执行,例如通过运行 kubectl exec -it -n rook-ceph rook-ceph-tools-686d8b8bfb-2nvqp — bash。
使用 ceph 的基本命令:
ceph osd pool stats ceph osd pool delete myPool myPool --yes-i-really-really-mean-it rbd list -p myPool > csi-vol-f5d3766c-7296-11eb-b32a-c2b045952d38 > image
删除镜像:rbd rm csi-vol-f5d3766c-7296-11eb-b32a-c2b045952d38 -p myPool
rook 工具箱中的 CephFS 命令:
ceph -s ceph fs ls ceph fs fail cephfs ceph fs rm cephfs --yes-i-really-mean-it ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
要准备 cephfs 文件系统,您可以在 rook 集群上运行此命令:
kubectl apply -f rook-1.4.5/ceph/filesystem.yaml