k8s学习笔记——cephfs

cephfs安装

参考://创建 Ceph 文件系统 — Ceph Documentation

//CephFs的操作方法 - 系统运维 - 亿速云 

//k8s使用cephfs动态存储 - 流年晕开时光 - 博客园

关于动态创建cephfs和动态创建ceph-rbd还不大一样,首先也是需要安装cephfs provisioner

GitHub - rootfs/cephfs-provisioner: Kubernetes CephFS PV Provisionerc

参考github上的地址,安装go的编译环境,先运行运行

go build cephfs-provisioner.go 将go代码编译为可执行文件,然后用
docker build -t cephfs-provisioner . 将代码打包成docker镜像

我这里是将打包后的镜像上传到了私有的harbor仓库里,在安装时通过仓库下载镜像。

github上没有安装的yaml,自己参考ceph-rbd的写了一个cephfs-provisioner.yaml

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cephfs-provisioner
  namespace: cephfs
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["get", "list", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["services"]
    resourceNames: ["kube-dns", "coredns"]
    verbs: ["list", "get"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]

---

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cephfs-provisioner
  namespace: cephfs
subjects:
  - kind: ServiceAccount
    name: cephfs-provisioner
    namespace: cephfs
roleRef:
  kind: ClusterRole
  name: cephfs-provisioner
  apiGroup: rbac.authorization.k8s.io

---

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: cephfs-provisioner
  namespace: cephfs
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "create"]
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get", "list", "watch", "create", "update", "patch"]

---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cephfs-provisioner
  namespace: cephfs
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cephfs-provisioner
subjects:
- kind: ServiceAccount
  name: cephfs-provisioner
  namespace: cephfs

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cephfs-provisioner
  namespace: cephfs
  labels: 
    app: cephfs-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cephfs-provisioner
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: cephfs-provisioner
    spec:
      nodeSelector:
        app: rbd-provisioner
      containers:
      - name: cephfs-provisioner
        image: "core.harbor.shell.com:32042/library/cephfs-provisioner:v1"
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8080
        volumeMounts:
        - name: ceph-conf
          mountPath: /etc/ceph
        volumeMounts:
        - name: kube-conf
          mountPath: /kube/config
        env:
        - name: PROVISIONER_NAME
          value: ceph.com/cephfs
        command:
        - "/bin/sh"
        - "-c"
        - "/usr/local/bin/cephfs-provisioner"
      serviceAccount: cephfs-provisioner
      volumes:
      - name: ceph-conf
        hostPath:
          path: /etc/ceph
      volumes:
      - name: kube-conf
        hostPath:
          path: /root/.kube/config
      tolerations:
      - key: "node-role.kubernetes.io/master"
        operator: "Exists"
        effect: "NoSchedule"

---

apiVersion: v1
kind: ServiceAccount
metadata:
  name: cephfs-provisioner
  namespace: cephfs

 这里与前面的创建rbd-provisioner在权限设置上略有不同,cephfs动态建立pv时需要动态创建secret,event事件需要list权限,所以在ClusterRole中event中增加了list权限,在Role中secrets中增加了create权限。否则动态创建时会报权限不足。

另外,好像这里创建pvc只能在cephfs的名称空间里创建,具体什么原因我还没弄明白,好像要想在其他名称空间创建pvc应在别的名称空间部署cephfs-provisioner,需要更改cephfs-provisioner.yaml文件中的配置。

创建cephfs-secret.yaml文件与github中的ceph-secret-admin.yaml内容相同,key的值要用过

ceph auth get client.admin 2>&1 |grep "key = " |awk '{print  $3'} |base64获取

创建class.yaml文件

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: cephfs
allowVolumeExpansion: true
provisioner: ceph.com/cephfs
parameters:
  monitors: 10.12.70.201:6789,10.12.70.202:6789,10.12.70.203:6789  //使用cephfs创建的地址
  adminId: admin
  adminSecretName: cephfs-secret-admin //这里的需要和创建的secret名称一致
  adminSecretNamespace: cephfs

然后部署claim.yaml文件创建的空间大小自己定义

创建成功后就会如下显示

NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
cephfs-pvc-geoserver   Bound    pvc-7dc33ba0-b043-476b-9594-d118d3acc9ba   100Gi      RWO,ROX,RWX    cephfs         44m

status显示Bound状态

使用kubectl get pv查看,可以看到

pvc-7dc33ba0-b043-476b-9594-d118d3acc9ba   100Gi      RWO,ROX,RWX    Delete           Bound    cephfs/cephfs-pvc-geoserver              cephfs 

pv已动态创建

在看通过kubectl get secret -n cephfs

NAME                                                                       TYPE                                  DATA   AGE
ceph-kubernetes-dynamic-user-562ae916-3fb6-11ec-a6e9-6a9df5d0a806-secret   Opaque                                1      47m

这里创建也动态创建了secret

之前在//CephFs的操作方法 - 系统运维 - 亿速云 中手动挂载的cephfs是创建的整个pool空间可以看到磁盘中的所有内容,也包括k8s动态创建的pv如下

//在挂载的目录下面会多一个volumes目录
//目录下有一个kubernetes目录,目录下就有pvc动态绑定的pv目录
kubernetes  _kubernetes:kubernetes-dynamic-pvc-562ae89f-3fb6-11ec-a6e9-6a9df5d0a806.meta

通过test-pod.yaml 可以使用cephfs了,登录pod上后,在挂载的目录下创建文件,就可以在其他挂载cephfs的目录后/volumes/kubernetes/kubernetes-dynamic-pvc-562ae89f-3fb6-11ec-a6e9-6a9df5d0a806/目录下就有刚才pod中创建的文件,文件内容相同。

在cephfs中删除pvc动态创建的pv也就动态删除,但是动态创建的secret还在,并且/volumes/kubernetes/kubernetes-dynamic-pvc-562ae89f-3fb6-11ec-a6e9-6a9df5d0a806目录及创建的文件都会继续存在,不会删除。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值