k8s挂载云硬盘CBS及重启pod遇到ContainerCreating

1. 背景

云上应用需要挂载云硬盘,操作步骤记录

2. 实践

# (1)获取ceph秘钥信息
# (2)根据秘钥生成secret.yml, 并通过kubectl create -f secret.yml启动
# (3)创建pv.yaml,并通过kubectl create -f pv.yaml启动
apiVersion: v1
kind: PersistentVolume
metadata:
  name: demo-pv  ##pv名称
spec:
  capacity:
    storage: 1024Mi ## pv大小,与云硬盘大小一致即可
  accessModes:
    - ReadWriteOnce ## pv读写类型,目前支持ReadWriteOnce和ReadOnlyMany
  mountOptions:
    - rw ##挂载类型有只读(ro),读写{rw},挂载类型和accessModes要对应起来
    - discard ## discard 参数会自动回收磁盘释放的容量,如果没有该参数,会造成实际使用率与界面显示不一致
  persistentVolumeReclaimPolicy: Retain ##目前只支持Retain模式
  csi:
    driver: ckecsi ##固定不变
    volumeHandle: welkinhigh.cke-637860030208 ##与cbs实例列表接口instanceId字段对应
    ##实例列表接口:/cbs/regions/{regionId}/cbsInstances
    fsType: xfs ##挂载文件系统类型xfs,ext4等
    volumeAttributes:
      monitors: XX1:6789,XX2:6789,XX3:6789
      ##cephmonitor信息,从/cbs/regions/{regionId}/secrets获取
      pool: welkinhigh ##存储池信息,从cbs实例列表接口获取 poolName字段
      ##实例列表接口:/cbs/regions/{regionId}/cbsInstances
      imageFormat: "2" ##固定不变
      imageFeatures: "layering" ##固定不变
      adminId: admin ##固定不变
      userId: '63786111108' ##账户ID
      volName: cke-637860030208 ##云硬盘实例列表接口imageName字段
      mounter: rbd  ##
      637860030208: AYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
      ##密钥信息从接口/cbs/regions/{regionId}/secrets获取,此处无需base64转码
      admin: XXXXXXXXXXX
      ##密钥信息从接口/cbs/regions/{regionId}/secrets获取,此处无需base64转码
    controllerPublishSecretRef:
      name: cke-secret   ##秘钥名称
      namespace: default 
    nodeStageSecretRef:
      name: cke-secret
      namespace: default
    nodePublishSecretRef:
      name: cke-secret
      namespace: default

# (4) 创建pvc.yaml,并通过kubectl create -f pvc.yaml创建
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc ##pvc名称
  namespace: default
spec:                ##pv的筛选条件
  accessModes:
     - ReadWriteOnce ## pv读写模式
  volumeName: test ##指定pv名称,此为可选字段,当指定特定的pv名称时,只有对应的名称的pv能被bound
  resources:
     requests:
       storage: 30Gi  ##pv大小

# (5) 修改pod的yaml文件,重启
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      hostAliases:
      - ip: "0.0.0.0"
        hostnames:
        - "china.local"
      containers:
      - name: test
        image: /path/to/image:latest
        ports:
        - name: test-port
          containerPort: 8090
          protocol: TCP
        volumeMounts:
        - name: cbs1
          mountPath: /data/test
      volumes:
      - name: cbs1
        persistentVolumeClaim:
          claimName: demo-pvc

3. 问题

3.1 # pod重启后一直ContainerCreating

# 查看pod容器详情
kubectl describe pod pod-7558b66fdb-6sxxx

Events:
Type Reason Age From Message


Normal Scheduled default-scheduler Successfully assigned default/smart-hr-7558b66fdb-6sxxx to 192.168.0.1
Warning FailedAttachVolume 58s (x10 over 5m8s) attachdetach-controller AttachVolume.Attach failed for volume "test" : failed to load secret "default/test": secrets "test" not found
Warning FailedMount 52s (x2 over 3m5s) kubelet, 192.168.0.1 Unable to attach or mount volumes: unmounted volumes=[cbs1], unattached volumes=[cbs1 default-token-8m2vk]: timed out waiting for the condition

# 缺失secret服务,启动
kubectl create -f secret.yml

# 再次启动应用
kubectl create -f test.yaml

# 获取pod列表
kubectl get pods

# 进入pod查看挂载情况
kubectl exec -ti test-7558b66fdb-htzx8 -n default  -- /bin/sh

df -h

3.2 pod启动后查看应用的日志

kubectl logs -f smart-hr-7558b66fdb-xnrft

# 日志全部重定向到文件
kubectl logs smart-hr-7558b66fdb-xnrft > t.log

4. 引用

k8s学习之 k8s中pod的容器日志查看命令(转载)
k8s出现ContainerCreating,问题解决

5. 拓展

测试生成文件

# python2.7
>>> t = open("test.txt", "w")
>>> t.write('a'*30000000000)
>>> t.close()

还存在两个问题,1.监控页面无法实时看到存储使用情况;2.需要测试pod重启后,CBS中的数据文件不会被清空。

posted @   钱塘江畔  阅读(490)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示