您的位置:首页 > 其它

storageclass动态创建persistentvolume

2017-11-16 23:30 134 查看

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: v1
kind: Secret
metadata:
name: ceph-secret
namespace: kube-system
data:
key: AQCnIiVZm/CCOxAAWfYdUhJUr1OemUMaWAEVpw==
type:
kubernetes.io/rbd


ceph-user-secret.yaml

apiVersion: v1
kind: Secret
metadata:
name: ceph-secret-user
namespace: default
data:
key: AQCnIiVZm/CCOxAAWfYdUhJUr1OemUMaWAEVpw==
type:
kubernetes.io/rbd


ceph-rbd-storageclass.yaml

apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
name: minipaas
annotations:
storageclass.beta.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/rbd
parameters:
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: PersistentVolumeClaim
apiVersion: v1
metadata:
name: demo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: minipaas


说明

一定要记住secret中的key必须先经过base64 encode之后的ceph的keystring串,ceph-user-secret的namespace一定要和你对应的pvc的namespace一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息