1.创建secret
mkdir -pv /ceph/k8s cd /ceph/k8s ceph auth get-key client.admin | base64 QVFDK2FqVmRQeW1sQlJBQVBTdkcvMGdDTFM2L2hUZDhnYjR2Ync9PQ== vim ceph-secret.yaml apiVersion: v1 kind: Secret metadata: name: ceph-secret type: "kubernetes.io/rbd" data: key: QVFDK2FqVmRQeW1sQlJBQVBTdkcvMGdDTFM2L2hUZDhnYjR2Ync9PQ== kubectl create -f ceph-secret.yaml
2. 创建storageclass
vim storage-class.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: rbd provisioner: ceph.com/rbd parameters: monitors: 192.168.3.18:6789 adminId: admin adminSecretName: ceph-secret adminSecretNamespace: default pool: test userId: admin userSecretName: ceph-secret fsType: ext4 imageFormat: "2" imageFeatures: "layering"
pool:对应ceph的连接池名称
provisioner: 就是客户端,官方文档中使用的 provisioner 是默认的 kubernetes.io/rbd,注意要改成 ceph.com/rbd,kubernetes.io/rbd 是无法正常使用的,原因是 kubernetes.io/rbd 会在 kube-controller-manager 镜像中查找 RBD 可执行文件,但默认的 kube-controller-manager 镜像是没有的,需要自己来定制镜像,具体细节可参考该链接:Error creating rbd image: executable file not found in $PATH。改为 "ceph.com/rbd" 后,使用的是外部的 RBD 可执行文件,具体的做法会在下一节中介绍。
adminId | userId:连接 ceph 的权限,admin 已存在,如果有需要创建其他用户,可以在 Ceph 集群中创建,并赋予对应的权限,简单使用的话,admin 也足够了。
adminSecretName:Ceph admin 所使用的密钥,复用之前创建的即可。
adminSecretNamespace:密钥所在的命名空间,默认是 default,如果修改为其他的话,需要修改 ceph-secret.yaml,增加 namespace字段:namespace-name。
kubectl create -f storage-class.yaml kubectl get storageclass
这里我们创建的storageclass的name是rbd
创建完之后需要对pool进行标记否则会报HEALTH_WARN application not enabled on 1 pool(s)
ceph osd pool application enable test rbd
3.创建rbac
git clone https://github.com/kubernetes-incubator/external-storage.git
分为RBAC和无RBAC两种部署方式,kubeadm搭建的Kubernetes集群默认开启了RBAC,本集群开起了RBAC选用RBAC方式。external-storage中提供的方式是部署在default namespace中的,如果要部署在其他namespace中,需要做对应的修改。
tree external-storage/ceph/rbd/deploy/ external-storage/ceph/rbd/deploy/ ├── non-rbac │ └── deployment.yaml ├── rbac │ ├── clusterrolebinding.yaml │ ├── clusterrole.yaml │ ├── deployment.yaml │ ├── rolebinding.yaml │ ├── role.yaml │ └── serviceaccount.yaml └── README.md
kubectl create -f external-storage/ceph/rbd/deploy/rbac/ kubectl get pod --selector app=rbd-provisioner
4.创建pvc
vim test-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce storageClassName: rbd resources: requests: storage: 33Gi
kubectl create -f test-pvc.yaml
评论区