首页 > 其他分享 >k8s v1.24.1 配置 cephfs

k8s v1.24.1 配置 cephfs

时间:2023-01-29 14:33:47浏览次数:56  
标签:cephfs csi ceph yaml v1.24 k8s data

本地环境情况

角色 IP 版本
k8s-master-1 172.16.16.108 K8S v1.24.1, containerd://1.6.8
k8s-node-1 172.16.16.109 K8S v1.24.1, containerd://1.6.8
k8s-node-2 172.16.16.110 K8S v1.24.1, containerd://1.6.8
ceph1 172.16.16.190 ceph version 14.2.22
ceph2 172.16.16.191 ceph version 14.2.22
ceph3 172.16.16.192 ceph version 14.2.22

Ceph-CSI版本: v3.7.2
官方文档:https://github.com/ceph/ceph-csi/blob/devel/docs/deploy-cephfs.md

部署 ceph-csi

在 k8s-master-1 上进行操作

mkdir -p /data/yaml/default/cephfs-csi && cd /data/yaml/default/cephfs-csi

# github 上的资源可能会拉取失败
wget https://github.com/ceph/ceph-csi/archive/refs/tags/v3.7.2.zip

unzip ceph-csi-3.7.2.zip
cd ceph-csi-3.7.2/deploy/cephfs/kubernetes

# 创建 CSIDriver 对象:
kubectl create -f csidriver.yaml

# 为sidecar容器和节点插件部署RBAC:
kubectl create -f csi-provisioner-rbac.yaml
kubectl create -f csi-nodeplugin-rbac.yaml

# 为 CSI 插件配置 ConfigMap 
# 通过在 ceph1 上执行 ceph -s|grep id: 获取ceph 集群id :eda101d5-385e-4160-bac6-fa3aaffc73d8

cat > csi-config-map.yaml << EOF
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
        {
        "clusterID": "eda101d5-385e-4160-bac6-fa3aaffc73d8",  # 替换自己的集群ID
        "monitors": [
          "172.16.16.190:6789",   # 替换成对应的 ceph 集群的IP
          "172.16.16.191:6789",   # 替换成对应的 ceph 集群的IP
          "172.16.16.192:6789"    # 替换成对应的 ceph 集群的IP
         ]
       }
    ]
metadata:
  name: ceph-csi-config
EOF

kubectl create -f csi-config-map.yaml

# 为 CSI pods 部署 Ceph 所需的 ConfigMap
kubectl create -f ../../../examples/ceph-conf.yaml

# cephfs 使用到的下面这5个镜像需要自己处理,国内可能无法进行拉取
registry.k8s.io/sig-storage/csi-provisioner:v3.2.1
registry.k8s.io/sig-storage/csi-resizer:v1.5.0
registry.k8s.io/sig-storage/csi-snapshotter:v6.0.1
registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.5.1
quay.io/cephcsi/cephcsi:v3.7.2

# 部署 CSI Sidecar 容器:
kubectl create -f csi-cephfsplugin-provisioner.yaml

# 部署 CSI CephFS 驱动程序:
kubectl create -f csi-cephfsplugin.yaml

# 验证是否部署成功
kubectl get pod

Ceph 创建 cephfs

在管理节点上(ceph1)执行

# 因为 Ceph文件系统需要启动 ceph-mds,ceph-mds 用来管理文件系统的元数据,只有文件系统才需要,对象储存和块储存都不需要。
cd /data/ceph-deploy/
ceph-deploy mds create ceph1

# CephFS 需要两个Pools, data 和 metadata, 分别存储文件数据和文件元数据
ceph osd pool create cephfs_data 16 16
ceph osd pool create cephfs_metadata 16 16
ceph fs new cephfs cephfs_metadata cephfs_data

# 获取 ceph admin key 后面创建 k8s Storageclass 资源时有用
ceph auth get-key client.admin
AQD/9Fljn5t/AhAA/8WoMpdDKoqM1WVbJ3KEXA==

创建Storageclass

在 k8s-master-1 上进行操作

# 需要创建一个secret,csi会通过pod访问ceph集群,密码使用上面 ceph admin 的密码
cd /data/yaml/default/cephfs-csi

cat >> secret.yaml << EOF 
apiVersion: v1
kind: Secret
metadata:
  name: csi-cephfs-secret
stringData:
  userID: admin
  userKey: AQD/9Fljn5t/AhAA/8WoMpdDKoqM1WVbJ3KEXA==
  adminID: admin
  adminKey: AQD/9Fljn5t/AhAA/8WoMpdDKoqM1WVbJ3KEXA==
EOF

kubectl apply -f secret.yaml

# 创建 storageclass
cat >> storageclass.yaml << EOF 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
  clusterID: eda101d5-385e-4160-bac6-fa3aaffc73d8 # ceph cluster ID
  fsName: cephfs          # cephfs 名称,上面创建
  pool: cephfs_data           # cephfs pool 名称
  csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: default
  csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/controller-expand-secret-namespace: default
  csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/node-stage-secret-namespace: default
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
  - discard
EOF

kubectl apply -f storageclass.yaml

# 检查
kubectl get sc

测试

# 创建 pvc
mkdir -p /data/yaml/default/nginx && cd /data/yaml/default/nginx

cat >> pvc.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-data
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: csi-cephfs-sc
EOF

kubectl apply -f pvc.yaml

# 创建好pvc后会自动将我们pvc绑定到pv节点上
[root@k8s-master-1 nginx]# kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
nginx-data   Bound    pvc-4a0b02da-a8d2-425d-99d0-4571c54ebbdc   1Gi        RWX            csi-cephfs-sc   20h

# 挂载Pod测试
cat >> deployment.yaml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default 
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22.1-alpine
        imagePullPolicy: IfNotPresent
        volumeMounts: 
        - name: time-data
          mountPath: /etc/localtime
          readOnly: false 
        - name: www
          mountPath: /usr/share/nginx/html
          subPath: html
      volumes: 
      - name: time-data 
        hostPath: 
          path: /usr/share/zoneinfo/Asia/Shanghai
      - name: www
        persistentVolumeClaim:
          claimName: nginx-data
EOF

kubectl apply -f deployment.yaml


测试在 pod 中添加数据检查另外一个 pod 是否可以看到

遇到的问题一

# 创建cephfs的时候出现 storageclass 创建 pvc pending 的状态。并且错误日志会提示 persistentvolume-controller waiting for a volume to be created, either by external provisioner “cephfs.csi.ceph.com” or manually created by system administrator。

# 解决办法:
# 进去 csi-cephfsplugin 容器内执行 ceph status 命令具体分析
kubectl exec -it csi-cephfsplugin-provisioner-8558c757c5-9kjkz -c csi-cephfsplugin -- bash
ceph status
unable to get monitor info from DNS SRV with service name: ceph-mon
[errno 2] RADOS object not found (error connecting to the cluster)
# 是因为 ceph 集群没有启用 ceph-mds 导致,执行 ceph-deploy mds create ceph1 后正常

标签:cephfs,csi,ceph,yaml,v1.24,k8s,data
From: https://www.cnblogs.com/klvchen/p/17072231.html

相关文章

  • Prometheus监控K8S各项指标
    一、Node监控1、内存指标#Node总内存大小:node_memory_MemTotal_bytes{instance="ec2-13-213-40-179.ap-southeast-1.compute.amazonaws.com:9100",job="node"}#Node......
  • 【Rancher】- 代理K8s部署记录
    1、在任意节点中,安装Rancherdockerrun-d--restart=unless-stopped-p8080:80-p8443:443--privilegedrancher/rancher:v2.5.9其中"v2.5.9”可以替换为“lates......
  • k8s 的污点与容忍度
    污点和容忍度是相互匹配的关系,在node上定义一个污点,pod上定义容忍度,如果pod能容忍这个污点,就会被调度到拥有这个污点的节点上,不能容忍这个污点就不会调度到拥有这个污点的......
  • k8s~fluentd从kafka到elk
    有时为了日志解耦,通常不把日志打到文件,而是直接打到kafka,而为了分析日志,我们可以通过sidecar的方式,把日志从kafka写入到es里,而通过kibana对日志进行分析。我的k8s-fluentd......
  • 2、使用腾讯云k8s
    1、先购买集群,后创建命名空间test_app_namespace2、后创建镜像仓库my_repo3、本地登录腾讯云容器镜像服务DockerRegistrydockerloginccr.ccs.tencentyun.com--us......
  • velero备份恢复k8s集群
    参考文档:https://blog.51cto.com/kaliarch/4919159https://blog.csdn.net/john1337/article/details/123335046一、什么是velero?Velero是一个云原生的灾难恢复和迁移......
  • 将Portiner部署到MicroK8s集群
    在MicroK8s的帮助下,你可以部署Portiner,从而使Kubernetes的管理变得容易多了。Portainer是一个强大的容器管理平台,不仅可以在Docker部署中使用,还可以在Kubernetes环境中使用......
  • k8s 单节点部署
    k8s单节点部署参考kubeasz:https://github.com/easzlab/kubeasz/blob/master/docs/setup/quickStart.mddashboard:https://github.com/easzlab/kubeasz/blob/master......
  • 不背锅运维:一文搞清楚应用发布到k8s集群的基本流程
    1.使用yaml文件创建资源对象❝每种资源的apiVersion和kind可通过kubectlapi-resources命令进行查看❞tantianran@test-b-k8s-master:~$ kubectl api-resources......
  • 【云原生kubernetes】k8s中pod使用详解
    一、前言在之前k8s组件一篇中,我们谈到了pod这个组件,了解到pod是k8s中资源管理的最小单位,可以说Pod是整个k8s对外提供服务的最基础的个体,有必要对Pod做深入的学习和探究。二......