storageclass动态创建persistentvolume

来源:互联网 发布:Linux 线程 sched_fifo 编辑:程序博客网 时间:2024/05/16 17:40

storageclass动态创建persistentvolume

遇到的问题即原因

  • 之前在开发过程中用storageclass结合pvc实现动态的创建pv,storageclass用的是ceph的rbd,创建ceph-rbd的需要创建对应的ceph-admin和ceph-user的cecret,其中用到ceph认证用的keystring,这里重点说下这个secret中keystring在k8s中是做啦base64编码处理了(sercet中的所有的data中的key所对应的值都必须是base64 encode后的串,在用的时候base64 decode),所以如果你直接在secret中吧keystring复制进来的话,会导致在创建pv的时候,ceph验证会失败,从而导致pv创建失败。
  • 在通过storageclass去创建ceph-rbd的时候,创建ceph-rbd存储块失败,看日志发现缺少ceph rbd的命令,原因是因为我的kube-controller-manager是以容器的方式部署的,容器中并没有安装ceph rbd命令,最后通过看pv的controller源码,发现在创建ceph-rbd存储块的时候,是通过拼装ceph-rbd的创建存储块的命令来实现:rbd create rbdname -adminid=xxx………这样的格式,所以如果kube-controller-manager如果以容器的方式运行的话,必须得在容器的基础镜像中安装ceph rbd的命令,执行:yum install -y ceph-common即可。

yaml如下

ceph-secret.yaml

apiVersion: v1kind: Secretmetadata:  name: ceph-secret  namespace: kube-systemdata:  key: AQCnIiVZm/CCOxAAWfYdUhJUr1OemUMaWAEVpw== type:  kubernetes.io/rbd 

ceph-user-secret.yaml

apiVersion: v1kind: Secretmetadata:  name: ceph-secret-user  namespace: defaultdata:  key: AQCnIiVZm/CCOxAAWfYdUhJUr1OemUMaWAEVpw== type:  kubernetes.io/rbd

ceph-rbd-storageclass.yaml

apiVersion: storage.k8s.io/v1beta1kind: StorageClassmetadata:  name: minipaas  annotations:     storageclass.beta.kubernetes.io/is-default-class: "true"provisioner: kubernetes.io/rbdparameters:  monitors: 192.168.1.1:6789,192.168.1.1:6789,192.168.1.1:6789    adminId: admin    adminSecretName: ceph-secret    adminSecretNamespace: kube-system    pool: test-pool    userId: admin    userSecretName: ceph-secret-user

pvc-demo.yaml

kind: PersistentVolumeClaimapiVersion: v1metadata:   name: demospec:   accessModes:    - ReadWriteOnce  resources:     requests:       storage: 1Gi  storageClassName: minipaas

说明
一定要记住secret中的key必须先经过base64 encode之后的ceph的keystring串,ceph-user-secret的namespace一定要和你对应的pvc的namespace一致。

原创粉丝点击