侧边栏壁纸
博主头像
爱运维 博主等级

行动起来,活在当下

  • 累计撰写 197 篇文章
  • 累计创建 143 个标签
  • 累计收到 21 条评论

目 录CONTENT

文章目录
K8S

在Kubernetes环境中使用StorageClass(动态存储)挂载ceph的RBD

Administrator
2019-09-03 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

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
0

评论区