K8S挂载ceph

动态供给(StorageClass)-RBD方式

Ceph配置

1. kubelet节点安装rbd命令,将ceph的ceph.client.admin.keyring和ceph.conf文件拷贝到master的/etc/ceph目录下
yum -y install ceph-common

2. 创建 osd pool 在ceph的mon或者admin节点
ceph osd pool create kube-data 128 128
ceph osd pool application enable kube-data rbd
ceph osd pool ls

3. 创建k8s访问ceph的用户, 在ceph的mon或者admin节点
ceph auth get-or-create client.kube mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=kube-data' -o ceph.client.kube.keyring

4. 获取admin用户和kube用户的key
ceph auth get-key client.admin;echo
ceph auth get-key client.kube;echo

K8S配置

创建Secret

  • key不需要base64转码
1. 创建 admin secret, 用户kubenetes集群访问ceph
kubectl create secret generic ceph-admin-secret --type="kubernetes.io/rbd" \
--from-literal=key=AQBAeaRgpKjkABAAbQz7RV/7meaFYKO8oZydsQ== \
--namespace=kube-system
2. 在 default 命名空间创建pvc用于访问ceph的 secret
kubectl create secret generic ceph-user-secret --type="kubernetes.io/rbd" \
--from-literal=key=AQDlGKZgG2xRNxAA4DYniPBpaV5SAyU1/QH/5w== \
--namespace=default

如果其余命名空间的服务挂载ceph存储,需要按步骤2方法,创建对应的secret

例如:

kubectl create secret generic ceph-user-secret --type="kubernetes.io/rbd" \
--from-literal=key=AQDlGKZgG2xRNxAA4DYniPBpaV5SAyU1/QH/5w== \
--namespace=monitoring

创建StorageClass

cat > external-storage-ceph-rbd.yaml << 'EOF'
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: dynamic-ceph-rbd
provisioner: kubernetes.io/rbd
# 回收策略: Retain(不删除)  Delete(删除) 默认: Delete
reclaimPolicy: Retain
parameters:
  monitors: 192.168.2.101:6789,192.168.2.102:6789,192.168.2.103:6789
  adminId: admin
  adminSecretName: ceph-admin-secret
  adminSecretNamespace: kube-system
  pool: kube-data
  userId: kube
  userSecretName: ceph-user-secret
EOF

kubectl apply -f external-storage-ceph-rbd.yaml
kubectl get sc
monitors: ceph集群mon地址
adminId: ceph集群admin用户ID
adminSecretName: 在k8s中为ceph集群admin用户secret
adminSecretNamespace: 创建ceph集群admin用户secret指定的命名空间
pool: 在ceph集群中创建的pool
userId: kube用户
userSecretName: k8s集群为ceph集群kube用户创建的secret

创建PVC测试

cat > ceph-claim-rbd-test.yaml << 'EOF'
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceph-claim-rbd-test
spec:
  accessModes:     
    - ReadWriteOnce
  storageClassName: dynamic-ceph-rbd
  resources:
    requests:
      storage: 2Gi
EOF
kubectl apply -f ceph-claim-rbd-test.yaml

kubectl get pv
kubectl get pvc

挂载POD验证PVC

cat > nginx-deployment-dynamic-pvc.yaml << 'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        volumeMounts:
        - name: www-data
          mountPath: /usr/share/nginx/html

      volumes:
      - name: www-data
        persistentVolumeClaim:
          claimName: ceph-claim-nginx
---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-claim-nginx
spec:
  storageClassName: dynamic-ceph-rbd
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: default
  labels:
    app: nginx
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  type: NodePort
EOF

kubectl apply -f nginx-deployment-dynamic-pvc.yaml

在pod中创建默认页面

kubectl exec -it nginx-b89b49bf9-g6bsg -- /bin/bash
# echo "dynamic-cephfs-test" > /usr/share/nginx/html/index.html

访问测试,出现如下界面,表示成功

curl http://10.0.0.146dynamic-cephfs-test
要在Kubernetes上部署Ceph集群,可以按照以下步骤进行操作: 1. 首先,通过修改configmap文件来补全配置,以便连接到Ceph集群资源文件。configmap文件中需要包含正确的镜像地址和其他必要的配置信息。 2. 接下来,需要准备好Ceph集群的配置文件。可以根据需要选择合适的配置文件,如生产存储集群配置(cluster.yaml),测试集群配置(cluster-test.yaml)或仅包含一个ceph-mon和一个ceph-mgr的最小配置(cluster-minimal.yaml)。可以根据实际需求进行配置文件的修改和替换。 3. 使用sed命令修改集群配置文件中的镜像地址、节点选择和设备选择等参数。例如,可以使用以下命令将镜像地址替换为指定的地址: ``` sed -i 's|ceph/ceph:v14.2.9|registry.cn-hangzhou.aliyuncs.com/vinc-auto/ceph:v14.2.8|g' cluster.yaml ``` 同样地,可以使用sed命令关闭所有节点和所有设备选择,并手动指定需要的节点和设备: ``` sed -i 's|useAllNodes: true|useAllNodes: false|g' cluster.yaml sed -i 's|useAllDevices: true|useAllDevices: false|g' cluster.yaml ``` 4. 最后,使用Kubernetes的部署机制来部署Ceph集群节点。可以使用相应的命令或配置文件来执行节点部署操作。根据实际需求,选择合适的部署方式和节点数量,并确保节点配置正确。 通过以上步骤,可以在Kubernetes上成功部署Ceph集群,并开始使用Ceph的块存储系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [K8s-ceph-csi-rbd连接资源](https://download.csdn.net/download/qq_37382917/85652308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [k8s挂载使用ceph集群](https://blog.csdn.net/m0_64417032/article/details/124914570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [k8s——kubernetes使用rook部署ceph集群](https://blog.csdn.net/vic_qxz/article/details/119513151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值