目 录CONTENT

文章目录

Ceph CSI Helm 部署详解:Ceph Quincy 17.2.9 对接 Kubernetes 1.23.17

Administrator
2026-03-23 / 0 评论 / 0 点赞 / 2 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Ceph CSI Helm 部署详解:Ceph Quincy 17.2.9 对接 Kubernetes 1.23.17

本文详细介绍如何使用 Helm 部署 Ceph CSI 插件,实现 Ceph Quincy 17.2.9 版本与 Kubernetes 1.23.17 的对接。

Helm3 安装说明

二进制方式安装 Helm3

# 下载 Helm 二进制包(示例版本 v3.5.2)
wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz

# 解压文件
tar -zxf helm-v3.5.2-linux-amd64.tar.gz

# 将 Helm 移动到系统 PATH 路径中
mv linux-amd64/helm /usr/local/bin/

# 验证安装
helm version

如需获取 Helm 离线安装包及 devops 相关方面支持,可联系张师傅:ggttxlss

使用 Helm 部署 Ceph CSI

方法一:使用官方 Ceph CSI Helm Chart

1. 添加 Helm 仓库

# 添加 Ceph CSI 官方 Helm 仓库
helm repo add ceph-csi https://ceph.github.io/csi-charts
helm repo update

2. 搜索可用的 Chart

# 查看可用的 CephFS Chart
helm search repo ceph-csi/ceph-csi-cephfs --versions

# 搜索特定版本
helm search repo ceph-csi/ceph-csi-cephfs --version v3.7.2

# 下载3.7.2 版本
helm pull ceph-csi/ceph-csi-cephfs --version v3.7.2

# 解压文件
tar -zxf ceph-csi-cephfs-3.7.2.tgz
cd ceph-csi-cephfs-3.7.2
cp -rp values.yaml values.yaml.bak

张师傅已经将ceph-csi-cephfs-3.7.2.tgz下载下来了,ceph-csi-cephfs-3.7.2.tgz

3. 创建 values.yaml 配置文件

根据环境创建 values.yaml 文件:

---
# RBAC 配置
rbac:
  create: true

# ServiceAccount 配置
serviceAccounts:
  nodeplugin:
    create: true
    name: cephfs-csi-nodeplugin
  provisioner:
    create: true
    name: cephfs-csi-provisioner

# CSI 配置 - 连接 Ceph 集群
csiConfig:
  - clusterID: "6fbff83e-d0e5-11f0-a088-5254005c5c5c"
    monitors:
      - "192.168.3.41:6789"
      - "192.168.4.33:6789"
      - "192.168.4.34:6789"
    cephFS:
      subvolumeGroup: "csi"
      # 可选,如果需要网络命名空间隔离
      # netNamespaceFilePath: "{{ .kubeletDir }}/plugins/{{ .driverName }}/net"

# 日志级别
logLevel: 5
sidecarLogLevel: 1

# Node Plugin 配置
nodeplugin:
  name: csi-cephfsplugin
  updateStrategy: RollingUpdate
  priorityClassName: system-node-critical

  httpMetrics:
    enabled: true
    containerPort: 8081
    service:
      enabled: true
      servicePort: 8080
      type: ClusterIP
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "8080"
      clusterIP: ""
      externalIPs: []
      loadBalancerIP: ""
      loadBalancerSourceRanges: []

  profiling:
    enabled: false

  registrar:
    image:
      repository: registry.k8s.io/sig-storage/csi-node-driver-registrar
      tag: v2.5.1
      pullPolicy: IfNotPresent
    resources: {}

  plugin:
    image:
      repository: quay.io/cephcsi/cephcsi
      tag: v3.7.2
      pullPolicy: IfNotPresent
    resources: {}

  nodeSelector: {}

  tolerations: []

  affinity: {}

  # 如果需要使用内核客户端(内核版本 < 4.17 支持配额)
  # forcecephkernelclient: true

  # 挂载选项
  kernelmountoptions: ""
  fusemountoptions: ""

  # Pod Security Policy
  podSecurityPolicy:
    enabled: true

# Provisioner 配置
provisioner:
  name: csi-cephfsplugin-provisioner
  replicaCount: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 50%
  timeout: 150s
  # 集群名称(可选)
  # clustername: "k8s-cluster-1"
  
  priorityClassName: system-cluster-critical
  enableHostNetwork: false

  httpMetrics:
    enabled: true
    containerPort: 8081
    service:
      enabled: true
      servicePort: 8080
      type: ClusterIP
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "8080"
      clusterIP: ""
      externalIPs: []
      loadBalancerIP: ""
      loadBalancerSourceRanges: []

  profiling:
    enabled: false

  provisioner:
    image:
      repository: registry.k8s.io/sig-storage/csi-provisioner
      tag: v3.2.1
      pullPolicy: IfNotPresent
    resources: {}

  # 设置卷的元数据
  setmetadata: true

  resizer:
    name: resizer
    enabled: true
    image:
      repository: registry.k8s.io/sig-storage/csi-resizer
      tag: v1.5.0
      pullPolicy: IfNotPresent
    resources: {}

  snapshotter:
    image:
      repository: registry.k8s.io/sig-storage/csi-snapshotter
      tag: v6.0.1
      pullPolicy: IfNotPresent
    resources: {}

  nodeSelector: {}

  tolerations: []

  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchExpressions:
              - key: app
                operator: In
                values:
                  - csi-cephfsplugin-provisioner
          topologyKey: "kubernetes.io/hostname"

  podSecurityPolicy:
    enabled: true

# SELinux 支持
selinuxMount: true

# StorageClass 配置
storageClass:
  create: true
  name: cephfs-csi
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  
  clusterID: "6fbff83e-d0e5-11f0-a088-5254005c5c5c"
  fsName: "howlaisi_cephfs"
  pool: ""
  fuseMountOptions: ""
  kernelMountOptions: ""
  mounter: ""
  volumeNamePrefix: ""
  
  # Secret 配置
  provisionerSecret: csi-cephfs-secret
  provisionerSecretNamespace: default
  controllerExpandSecret: csi-cephfs-secret
  controllerExpandSecretNamespace: default
  nodeStageSecret: csi-cephfs-secret
  nodeStageSecretNamespace: default
  
  reclaimPolicy: Delete
  allowVolumeExpansion: true
  mountOptions:
    - discard

# Secret 配置(建议手动创建,这里设置为不自动创建)
secret:
  create: false
  name: csi-cephfs-secret
  adminID: admin
  adminKey: ""

# Ceph 配置文件
cephconf: |
  [global]
    auth_cluster_required = cephx
    auth_service_required = cephx
    auth_client_required = cephx
    
    # 连接到您的 Ceph 监视器
    mon_host = 192.168.3.41:6789,192.168.4.33:6789,192.168.4.34:6789
    
    # 解决 http://tracker.ceph.com/issues/23446
    fuse_set_user_groups = false
    
    # 增加 fuse 写入缓冲区大小
    fuse_big_writes = true

#########################################################
# 内部使用变量,请谨慎修改! #
#########################################################

# Socket 文件名称
provisionerSocketFile: csi-provisioner.sock
pluginSocketFile: csi.sock

# Kubelet 目录
kubeletDir: /var/lib/kubelet

# CSI 驱动名称
driverName: cephfs.csi.ceph.com

# ConfigMap 配置
configMapName: ceph-csi-config
# configMapKey:
externallyManagedConfigmap: false
cephConfConfigMapName: ceph-config

values.yaml 文件中,请根据实际情况进行修改。values.yaml

4.部署前的准备工作

在部署之前,需要创建文件系统,并且创建一个Ceph用户,并获取该用户的密钥。

# 创建文件系统
ceph fs volume create howlaisi_k8s_12317_cephfs

# 创建客户端用户,但权限不是很大,不满足k8s所需要的最小权限
ceph fs authorize howlaisi_k8s_12317_cephfs client.howlaisi_k8s_12317_cephfs / rw

# 赋更大的权限
ceph auth caps client.howlaisi_k8s_12317_cephfs \
    mon 'allow r' \
    mgr 'allow rw' \
    mds 'allow rwps fsname=howlaisi_k8s_12317_cephfs' \
    osd 'allow rw tag cephfs metadata=howlaisi_k8s_12317_cephfs,allow rw tag cephfs data=howlaisi_k8s_12317_cephfs'

创建 Secret:

apiVersion: v1
kind: Secret
metadata:
  name: csi-cephfs-secret
  namespace: default
type: kubernetes.io/rbd
data:
  adminID: aG93bGFpc2lfazhzXzEyMzE3X2NlcGhmcw==
  adminKey: QVFBeUprSnBJZ2l5Q3hBQVc2SUwxeGNkYjRRWGx1SmVwZzQ1VlE9PQ==

其中adminID,并不是指admin账号,而是Ceph集群中,有权限的账号。

[root@ceph1 ceph]# cat *howlaisi_k8s_12317_ceph*
[client.howlaisi_k8s_12317_cephfs]
	key = AQAyJkJpIgiyCxAAW6IL1xcdb4QXluJepg45VQ==
	caps mds = "allow rwps fsname=howlaisi_k8s_12317_cephfs"
	caps mgr = "allow rw"
	caps mon = "allow r fsname=howlaisi_k8s_12317_cephfs"
	caps osd = "allow rw tag cephfs data=howlaisi_k8s_12317_cephfs"

[root@ceph1 ceph]# echo -n "howlaisi_k8s_12317_cephfs" | base64
aG93bGFpc2lfazhzXzEyMzE3X2NlcGhmcw==

[root@ceph1 ceph]# echo -n "AQAyJkJpIgiyCxAAW6IL1xcdb4QXluJepg45VQ==" | base64
QVFBeUprSnBJZ2l5Q3hBQVc2SUwxeGNkYjRRWGx1SmVwZzQ1VlE9PQ==

5. 安装 Helm Chart

cd ceph-csi-cephfs

# 安装 
helm install ceph-csi-cephfs . -f values.yaml --namespace default

测试部署结果

创建一个 PVC 来测试部署是否成功:

# test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cephfs-test-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: cephfs-csi
  resources:
    requests:
      storage: 1Gi
# 应用测试 PVC
kubectl apply -f test-pvc.yaml

# 检查 PVC 状态
kubectl get pvc cephfs-test-pvc

cephfs-csi

常用管理命令

在日常使用和故障排查过程中,可能会用到以下命令:

# 检查所有相关资源
kubectl get all -n default | grep ceph

# 检查 StorageClass
kubectl get storageclass

# 检查创建的 PVC
kubectl get pvc cephfs-test-pvc

# 查看 PVC 详细信息
kubectl describe pvc -n default cephfs-test-pvc

# 查看所有命名空间中的 PVC
kubectl get pvc -A

# 编辑 StorageClass
kubectl edit storageclass cephfs-csi

# 卸载 Helm Release
helm uninstall ceph-csi-cephfs --namespace default

# 重新安装 Helm Release
helm install ceph-csi-cephfs . -f values.yaml --namespace default

参数说明

以下是配置文件中的关键参数说明:

参数含义可选值默认值
csiConfig.clusterIDCeph 集群唯一标识符UUID 字符串必填
csiConfig.monitorsCeph Monitor 地址列表IP:PORT 数组必填
cephFS.subvolumeGroupCephFS 子卷组名称字符串"csi"
provisioner.replicaCountProvisioner 副本数数字3
storageClass.fsNameCephFS 文件系统名称字符串必填
storageClass.reclaimPolicyPV 回收策略Delete/RetainDelete
logLevel日志级别0-55

快照功能配置

helm安装后,默认的存储类名称为 cephfs-csi,默认的快照类名称为 cephfs-csi:

apiVersion: snapshot.storage.k8s.io/v1beta1
deletionPolicy: Delete
driver: cephfs.csi.ceph.com
kind: VolumeSnapshotClass
metadata:
  creationTimestamp: '2025-12-17T06:27:08Z'
  generation: 3
  managedFields:
    - apiVersion: snapshot.storage.k8s.io/v1
      fieldsType: FieldsV1
      fieldsV1:
        'f:deletionPolicy': {}
        'f:driver': {}
      manager: controller-manager
      operation: Update
      time: '2025-12-17T06:27:08Z'
    - apiVersion: snapshot.storage.k8s.io/v1beta1
      fieldsType: FieldsV1
      fieldsV1:
        'f:parameters':
          .: {}
          'f:clusterID': {}
          'f:csi.storage.k8s.io/snapshotter-secret-name': {}
          'f:csi.storage.k8s.io/snapshotter-secret-namespace': {}
          'f:userID': {}
      manager: Mozilla
      operation: Update
      time: '2025-12-17T06:38:13Z'
  name: cephfs-csi
  resourceVersion: '184233'
  uid: f302fcb8-796a-43fb-aa48-64f207cae6b1

但目前创建快照存储类,有问题,原因是没有parameters参数,所以快照存储类创建失败,需要加上:

apiVersion: snapshot.storage.k8s.io/v1beta1
deletionPolicy: Delete
driver: cephfs.csi.ceph.com
kind: VolumeSnapshotClass
metadata:
  ...
parameters:
  clusterID: 82867a6c-d994-11f0-9c30-5254005c5c5c   # ceph集群唯一标识符
  csi.storage.k8s.io/snapshotter-secret-name: csi-cephfs-secret # 密钥名称
  csi.storage.k8s.io/snapshotter-secret-namespace: default # 密钥命名空间

cephfs-csi-snapshot

总结

通过 Helm 部署 Ceph CSI 是一种标准化且易于维护的方式。相比手动部署 YAML 文件,Helm 提供了更好的配置管理和版本控制能力。本文介绍了官方 Ceph CSI Helm Chart 的使用方法,并提供了针对 Ceph Quincy 17.2.9 和 Kubernetes 1.23.17 的具体配置示例。

参考文档

  1. Ceph CSI GitHub 仓库
  2. Ceph CSI Helm Charts
  3. Kubernetes CSI 文档
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区