首页 > 其他分享 >k8s 对接 cephfs 文件系统

k8s 对接 cephfs 文件系统

时间:2024-01-08 17:22:05浏览次数:30  
标签:kind cephfs name 文件系统 ceph provisioner k8s metadata

创建资源池

ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128

文件系统需要两个资源池,一个用于存储数据体,一个用于存放索引信息及其他数据相关信息。
创建文件系统

ceph fs new cephfs cephfs_metadata cephfs_data

获取 admin 秘钥

ceph auth get-key client.admin | base64

这里输出的结果是直接进行 base64 加密的,方便后面直接使用。请记下这串字符。
K8s 操作部分
安装依赖组件
此操作需要在所有的【K8s 节点】中进行,包括【K8s 控制节点】。

yum install ceph-common
创建 ceph secret
apiVersion: v1
kind: Secret
metadata:
  name: storage-secret
  namespace: default
type: "rbac.authorization.k8s.io"
data:
  key: QVFDYStFcGRWT05OSkJBQWw5NTZwWHI5U3gwM0ZJQWdFR2hDTHc9PQ==

这里的 Key 部分填写上面【获取 admin 秘钥】部分输出的字符串,带引号。
这里的代码是 YAML,你可以直接把它复制到 Dashboard 的【创建】中执行。你也可以将代码保存成 xxx.yaml 文件,然后在控制节点上执行命令 kubectl create -f xxx.yaml。往下的内容也是如此。

部署 cephfs-provisoner
创建命名空间

apiVersion: v1
kind: Namespace
metadata:
   name: cephfs
   labels:
     name: cephfs

创建服务账户

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

创建角色

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

创建集群角色

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: ["create", "update", "patch"]
  - apiGroups: [""]
    resources: ["services"]
    resourceNames: ["kube-dns","coredns"]
    verbs: ["list", "get"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get", "create", "delete"]
  - apiGroups: ["policy"]
    resourceNames: ["cephfs-provisioner"]
    resources: ["podsecuritypolicies"]
    verbs: ["use"]

绑定角色

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

绑定集群角色

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

部署 cephfs-provisioner

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: cephfs-provisioner
  namespace: cephfs
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: cephfs-provisioner
    spec:
      containers:
      - name: cephfs-provisioner
        image: "quay.io/external_storage/cephfs-provisioner:latest"
        env:
        - name: PROVISIONER_NAME
          value: ceph.com/cephfs
        command:
        - "/usr/local/bin/cephfs-provisioner"
        args:
        - "-id=cephfs-provisioner-1"
        - "-disable-ceph-namespace-isolation=true"
      serviceAccount: cephfs-provisioner

创建存储类

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: cephfs
provisioner: ceph.com/cephfs
parameters:
    monitors: 192.168.10.101:6789,192.168.10.102:6789,192.168.10.103:6789
    adminId: admin
    adminSecretName: ceph-admin-secret
    adminSecretNamespace: "kube-system"
    claimRoot: /volumes/kubernetes

创建pv

cat cephfs-pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: cephfs-pv
  labels:
    pv: cephfs-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteMany
  cephfs:
    monitors:
      - 10.121.116.20:6789
      - 10.121.116.21:6789
      - 10.121.116.22:6789
    user: admin
    secretRef:
      name: ceph-secret
    readOnly: false
  persistentVolumeReclaimPolicy: Delete

创建pvc

cat cephfs-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cephfs-pvc
spec:
accessModes:
  - ReadWriteMany
resources:
  requests:
    storage: 10Gi
selector:
  matchLabels:
    pv: cephfs-pv

查看状态

[root@controller ceph]# kubectl get pv,pvc
NAME                         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
persistentvolume/cephfs-pv   20Gi       RWX            Delete           Bound    default/cephfs-pvc                           56m

NAME                               STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/cephfs-pvc   Bound    cephfs-pv   20Gi       RWX                           56m

测试创建mysql 挂在cephfs

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: mysql
    protocol: TCP
  selector:
    app: mysql
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: cephfs-testpod1
          mountPath: /var/lib/mysql/
      volumes:
      - name: cephfs-testpod1
        persistentVolumeClaim:
          claimName: cephfs-pvc

linux 挂载cephfs 需要安装ceph-fuse

ceph-fuse /test 
后边test是挂载到哪里
强制删除pvc 
kubectl patch pvc/mosquitto-config2  -p '{"metadata":{"finalizers":null}}'

标签:kind,cephfs,name,文件系统,ceph,provisioner,k8s,metadata
From: https://www.cnblogs.com/zhanghn8/p/17952875

相关文章

  • BI迁移K8S
    下載檔案將charts目錄放置path如/opt/yaml/finebi-dev/之中注意namespacenodeport設定一、測試區安裝mysqlpath:/opt/yaml/finebi-dev/charts/mysql先建pvckubectlapply-fmysql_pvc.yamlapiVersion:v1kind:PersistentVolumeClaimmetadata:name:data-mysql-0namesp......
  • rhel配置ACFS集群文件系统时,asm cluster file systems和volume选项卡为灰色
    问题描述:rhel配置ACFS集群文件系统时,asmclusterfilesystems和volume选项卡为灰色.OS:rhel7.964位数据库:oracle11.2.0.4节点1192.168.133.191rac1节点2192.168.133.192rac21、异常重现在rhel7.964位系统上安装oracle11.2.0.4rac后,发现acfs和advm无法使用,如下ASMC......
  • k8s 安全
    认证k8s的请求有两种模式:非安全模式(insecure-port)该模式下所有请求都不会经过认证,不建议开启。安全模式(secure-port)该模式下开启TLS时,所有请求都需要经过认证。k8s支持多种认证机制,并支持同时开启多个认证插件(只要有一个认证通过即可)。如果认证成功,则用户的username会传入授......
  • k8s_Helm组件以及其他功能
    helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理Helm本质就是让K8s的应用管理(Deployment,Service等)可配置,能动态生成。通过动态生成K8s资源清单文件(deployment.yaml,service.yaml)。然后调用Kubectl自动执行K8s资源部署Helm......
  • k8s_高可用
    一、高可用原理配置一台新的master节点,然后在每台node节点上安装nginx,nginx通过内部的负载均衡将node节点上需要通过访问master,kube-apiserver组件的请求,反代到两台k8s-master节点上,这样就可以实现master节点的高可用,当任意一台master节点宕机后,也可以通过nginx负载均衡放文档另一......
  • k8s 调度
    k8s调度Scheduler是kubernetes的调度器,主要的任务是把定义的pod分配到集群的节点上。听起来非常简单,但有很多要考虑的问题:公平:如何保证每个节点都能被分配资源资源高效利用:集群所有资源最大化被使用效率:调度的性能要好,能够尽快地对大批量的pod完成调度工作灵活:允许用户根据......
  • K8s 学习_组件说明
    1.k8s的组件分类主要分为mater组件,(apiserver,etcd,ControllerManager,schedule)2.Node组件Node主要负责容器的各种依赖环境,并接受Master管理,每个Node的构成:Kubelete,ContainerRuntime,Kube-pxoxy.3.核心组件k8s还依赖于一组的附件组件,通常是由第三方的提供的特定的应用程序。......
  • K8s_pod
    Pod:Pod是K8S的最小资源单位,经过yaml语法来来将docker镜像转化为Poddocker生命周期:1.启动initC 2.启动前执行Start3.同时启动readliness(就绪检测)和liveness(存活检测)4.关闭前执行Stop参考资料:http://www.noobyard.com/article/p-nqajybzb-da.html......
  • k8s_资源清单
    在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单。2.资源清单格式:apiVersion:group/apiversion#如果没有给定group名称,那么默认为core,可以使用kubectlapi-versions#获取当前k8s版本上所有的apiVersion版本信息(每个......
  • FAQ-k8s-harbor拉取镜像权限问题-imagePullSecrets
    一、配置1、dockervim/etc/docker/daemon.json{"insecure-registries":["192.168.10.122"]}systemctldaemon-reloadsystemctlrestartdocker二、方式一1、登录dockerlogin192.168.10.122-uadmin-pHarbor123452、查看config.json文件cat~/.docker/co......