K8s 使用 CephFS 作为后端存储(静态供给、动态供给)

一、K8s 使用 CephFS

CephFSCeph 中基于RADOS(可扩展分布式对象存储)构建,通过将文件数据划分为对象并分布到集群中的多个存储节点上来实现高可用性和可扩展性。

首先所有 k8s 节点都需要安装 ceph-common 工具:

yum -y install epel-release ceph-common

二、静态供给方式

静态供给方式需要提前创建好 CephFS 给到 K8s 使用。

2.1 在 Ceph 中创建 FS 和 授权用户

创建存储池:

# 数据存储池
ceph osd pool create cephfs_data_pool 16

# 元数据存储池
ceph osd pool create ceph_metadata_pool 8

创建 FS

ceph fs new k8s-cephfs cephfs_data_pool ceph_metadata_pool

创建用户 fs-user 并授权存储池 cephfs_data_pool

查看 admin 用户秘钥:

ceph auth get-key client.admin

在这里插入图片描述

2.2 在 k8s 中创建 secret

export ADMIN_USER_SECRET='AQDdUB9mcTI3LRAAOBpt3e7AH5v9fiMtHKQpqA=='

kubectl create secret generic ceph-admin-default-secret --type="kubernetes.io/rbd" \
--from-literal=key=$ADMIN_USER_SECRET \
--namespace=default

在这里插入图片描述

2.3 pod 直接使用 CephFS 存储

vi cephfs-test-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: cephfs-test-pod
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: data-volume
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: data-volume
    cephfs:
      monitors: ["11.0.1.140:6789"]
      path: /
      user: admin
      secretRef:
        name: ceph-admin-default-secret
kubectl apply -f cephfs-test-pod.yml

查看 pod

kubectl get pods

在这里插入图片描述

可以进到 pod 中查看分区情况:

kubectl exec -it cephfs-test-pod -- /bin/bash

df -hl

在这里插入图片描述

2.4 创建 PV 使用 CephFS 存储

vi cephfs-test-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: cephfs-test-pv
spec:
  accessModes: ["ReadWriteOnce"]
  capacity:
    storage: 2Gi
  persistentVolumeReclaimPolicy: Retain
  cephfs:
    monitors: ["11.0.1.140:6789"]
    path: /
    user: admin
    secretRef:
      name: ceph-admin-default-secret
kubectl apply -f cephfs-test-pv.yml

在这里插入图片描述

创建 PVC 绑定 PV

vi cephfs-test-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cephfs-test-pvc
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 2Gi
kubectl apply -f cephfs-test-pvc.yml

查看 pvcpv

kubectl get pvc

kubectl get pv

在这里插入图片描述

测试 pod 挂载 pvc

vi cephfs-test-pod1.yml
apiVersion: v1
kind: Pod
metadata:
  name: cephfs-test-pod1
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: data-volume
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: data-volume
    persistentVolumeClaim:
      claimName: cephfs-test-pvc
      readOnly: false
kubectl apply -f cephfs-test-pod1.yml

查看 pod

kubectl get pods

在这里插入图片描述

三、动态供给方式

由于官方没有提供cephfs动态卷支持,这里使用社区提供的cephfs-provisioner 插件实现动态供给:

vi external-storage-cephfs-provisioner.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cephfs-provisioner
  namespace: kube-system
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cephfs-provisioner
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: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["create", "get", "delete"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cephfs-provisioner
subjects:
  - kind: ServiceAccount
    name: cephfs-provisioner
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cephfs-provisioner
  apiGroup: rbac.authorization.k8s.io

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: cephfs-provisioner
  namespace: kube-system
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["create", "get", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: cephfs-provisioner
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cephfs-provisioner
subjects:
- kind: ServiceAccount
  name: cephfs-provisioner
  namespace: kube-system

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cephfs-provisioner
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: cephfs-provisioner
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: cephfs-provisioner
    spec:
      containers:
      - name: cephfs-provisioner
        image: "registry.cn-chengdu.aliyuncs.com/ives/cephfs-provisioner:latest"
        env:
        - name: PROVISIONER_NAME
          value: ceph.com/cephfs
        command:
        - "/usr/local/bin/cephfs-provisioner"
        args:
        - "-id=cephfs-provisioner-1"
      serviceAccount: cephfs-provisioner
kubectl apply -f external-storage-cephfs-provisioner.yml

查看 pod

kubectl get pods -n kube-system

在这里插入图片描述

3.1 创建 StorageClass

vi cephfs-sc.yml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: dynamic-cephfs
provisioner: ceph.com/cephfs
parameters:
  monitors: 11.0.1.140:6789
  adminId: admin
  adminSecretName: ceph-admin-default-secret
  adminSecretNamespace: default
  claimRoot: /volumes/kubernetes
kubectl apply -f cephfs-sc.yml

查看 SC

kubectl get sc

在这里插入图片描述

3.4 测试创建 PVC

vi cephfs-pvc1.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cephfs-pvc1
spec:
  accessModes:     
    - ReadWriteOnce
  storageClassName: dynamic-cephfs
  resources:
    requests:
      storage: 2Gi
kubectl apply -f cephfs-pvc1.yml

查看 pvc

kubectl get pvc

在这里插入图片描述

创建 pod 使用上面 pvc

vi cephfs-test-pod2.yml
apiVersion: v1
kind: Pod
metadata:
  name: cephfs-test-pod2
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: data-volume
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: data-volume
    persistentVolumeClaim:
      claimName: cephfs-pvc1
      readOnly: false
kubectl apply -f cephfs-test-pod2.yml

查看 pod

kubectl get pods

在这里插入图片描述

3.5 测试使用 volumeClaimTemplates 动态创建 pv 和 pvc

vi mysql.yml
# headless service 
apiVersion: v1
kind: Service
metadata:
  name: mysql-hl
  namespace: mysql
  labels:
    app: mysql-hl
spec:
  clusterIP: None
  ports:
  - name: mysql-port
    port: 3306
  selector:
    app: mysql

---
# NodePort service 
apiVersion: v1
kind: Service
metadata:
  name: mysql-np
  namespace: mysql
  labels:
    app: mysql-np
spec:
  clusterIP: 
  ports:
  - name: master-port
    port: 3306
    nodePort: 31306
    targetPort: 3306
  selector:
    app: mysql
  type: NodePort
  target-port:
  externalTrafficPolicy: Cluster 
  
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql-hl"
  replicas: 1
  selector: 
    matchLabels: 
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0.20
        ports:
        - containerPort: 3306
          name: master-port
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "root"
        - name: TZ
          value: "Asia/Shanghai"
        volumeMounts:                           
        - name: mysql-data
          mountPath: /var/lib/mysql 
  volumeClaimTemplates:
    - metadata:
        name: mysql-data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: dynamic-cephfs
        resources:
          requests:
            storage: 2Gi
kubectl apply -f mysql.yml

查看 pod

在这里插入图片描述

查看 pvc

在这里插入图片描述

查看 pv

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579943.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目进度规划全攻略,助你成为项目管理高手

项目进度管理作为项目管理中的核心环节,对于确保项目按时交付、控制成本和提高质量至关重要。本文将详细介绍项目进度管理的基本步骤,帮助项目经理和团队成员更好地理解和执行进度管理工作。 项目进度管理的基本步骤主要包括以下几个方面: …

236基于matlab的三维比例导引法仿真

基于matlab的三维比例导引法仿真,可以攻击静止/机动目标。1.三维空间内的比例导引程序,采用龙哥库塔积分法;2.文件名为bili3dnew的.m文件是主函数,执行时需调用目标机动子函数、导引律子函数、数值积分法子函数;3.文件…

微服务之并行与分布式计算

一、概述 1.1集中式系统vs分布式系统 集中式系统 集中式系统完全依赖于一台大型的中心计算机的处理能力,这台中心计算机称为主机(Host 或 mainframe ),与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终…

《ESP8266通信指南》8-连接WIFI(Arduino开发)(非常简单)

往期 《ESP8266通信指南》7-Arduino 开发8266的环境配置与示例代码烧录-CSDN博客 《ESP8266通信指南》6-创建TCP服务器(AT指令)-CSDN博客 《ESP8266通信指南》5-TCP通信透传模式(AT指令)-CSDN博客 《ESP8266通信指南》4-以Client进行TCP通信&#xf…

弹性盒之主轴侧轴对齐方式

弹性盒设置主侧轴对齐方式 1.默认 justify-content: flex-start 2.justify-content: flex-end 3.justify-content: center 4.justify-content: space-between; 两端对齐 5.justify-content: space-around; 距离环绕 调整侧轴上中下 1.默认align-items: flex-start; …

论机器学习(ML)在网络安全中的重要性

机器学习是什么? 机器学习(ML)是人工智能的一个分支,它使用算法来使计算机系统能够自动地从数据和经验中进行学习,并改进其性能,而无需进行明确的编程。机器学习涉及对大量数据的分析,通过识别数据中的模式来做出预测…

在MySQL中isnull()函数不能作为替代null值!

在MySQL中isnull()函数不能作为替代null值! 如下: 首先有个名字为business的表: SELECT ISNULL(business_name,no business_name) AS bus_isnull FROM business WHERE id2 直接运行就会报错: 错误代码: 1582 Incor…

5本On Hold,6本预警被踢,学术诚信高风险期刊被踢9本,还剩1本你还敢投吗?

本周投稿推荐 SSCI • 2/4区经管类,2.5-3.0(录用率99%) SCIE(CCF推荐) • 计算机类,2.0-3.0(最快18天录用) SCIE(CCF-C类) • IEEE旗下,1/2…

禅道项目管理系统身份认证绕过漏洞

禅道项目管理系统身份认证绕过漏洞 1.漏洞描述 禅道项目管理软件是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,完整覆盖了研发项目管理的核心流程。 禅道项目管理系统…

如何使用 Internet Download Manager (IDM) 来加速和优化你的下载体验 IDM 6.41下载神器

在当今信息爆炸的时代,下载文件和媒体内容已成为我们日常生活的一部分。无论是工作学习还是娱乐休闲,我们都需要从互联网上下载各种资源。为了提高下载效率和确保文件完整性,选择一款优秀的下载管理软件至关重要。Internet Download Manager …

PotatoPie 4.0 实验教程(21) —— FPGA实现摄像头图像二值化(RGB2Gray2Bin)

PotatoPie 4.0开发板教程目录(2024/04/21) 为什么要进行图像的二值化? 当我们处理图像时,常常需要将其转换为二值图像。这是因为在很多应用中,我们只对图像中的某些特定部分感兴趣,而不需要考虑所有像素的…

JavaScript 中的IF判断竟然可以这样写,效率更高

当然,它们是创建控制流的一种简单而方便的方式,但你可以写下数十亿行条件性的 JavaScript 代码,而不需要一个 if 语句。 而且有很多情况下,使用不同的结构会更清晰地展示你想要做的事情 —— 只要我们还在为人类编写代码&#xf…

深度学习系列65:数字人openHeygen详解

1. 主流程分析 从inference.py函数进入,主要流程包括: 1) 使用cv2获取视频中所有帧的列表,如下: 2)定义Croper。核心代码为69行:full_frames_RGB, crop, quad croper.crop(full_frames_RGB)。…

基于springboot+vue+Mysql的乐校园二手书交易管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

OPPO手机支持深度测试+免深度测试解锁BL+ROOT权限机型整理-2024年3月更新

绿厂OPPO手机线上线下卖的都很不错,目前市场份额十分巨大,用户自然也非常多,而近期ROM乐园后台受到很多关于OPPO手机的私信,咨询哪些机型支持解锁BL,ROOT刷机,今天ROM乐园正式盘点当前市场上可以解BL刷root…

Android图片压缩、Drawable和Bitmap转换、bitmap和base64转换

1. Android图片压缩、Drawable和Bitmap转换、bitmap和base64转换 1.1. Drawable和Bitmap之间的转化 1.1.1. bitmap和Drawable间的区别 Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888。作为一种逐像素的显示对象执…

【YesPMP】众包平台,最新项目

YesPMP平台专注于软件开发领域,是专业的一站式互联网众包平台,目前平台汇聚了上万个解决方案,覆盖全国,拥有众多专业优质的H5开发服务商,专为企业提供软件H5开发解决方案,提高企业的知名度。优秀的H5能为用…

云仓酒庄北京发布会与《综合品酒师》培训的延伸层次分享

原标题:云仓酒庄北京发布会与《综合品酒师》培训近日,云仓酒庄在北京举办了一场盛大的发布会,并近期举行了首届《综合品酒师》培训活动。这一事件不仅引起了业内的广泛关注,更成为了酒类行业专业化、规范化发展的重要里程碑。大世…

[移动端] “viewport“ content=“width=device-width, initial-scale=1.0“ 什么意思

布局视口, 代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>body,html {margin: 0;padding: 0;}.box {width: 200px;height: 200px;background-color: pi…

“无媒体,不活动”,这句话怎么理解?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 “无媒体&#xff0c;不活动”通常指的是在现代社会中&#xff0c;媒体对于各种活动&#xff0c;尤其是公共活动和事件的推广、宣传和影响力是至关重要的。它强调了媒体在塑造公众意识、…