k8s使用ceph存储

文章目录

      • 初始化操作
      • k8s使用ceph rbd
        • volume
        • PV
          • 静态pv
          • 动态pv
      • k8s使用cephfs
        • volume
        • 静态pv

初始化操作

ceph创建rbd存储池

ceph osd pool create k8s-data 32 32 replicated
ceph osd pool application enable k8s-data rbd
rbd pool init -p k8s-data

在这里插入图片描述

ceph添加授权,需要创建两个用户,一个挂载rbd时使用,另一个挂载cephfs时使用

ceph auth get-or-create client.k8s-user mon 'allow r' mds 'allow' osd 'allow * pool=k8s-data' -o /etc/ceph/ceph.client.k8s-user.keyring

ceph auth get-or-create client.k8s-cephfs-user mon 'allow r' mds 'allow' osd 'allow * pool=cephfs_data' -o /etc/ceph/ceph.client.k8s-cephfs-user.keyring

在这里插入图片描述
在这里插入图片描述

k8s集群中所有节点安装ceph-common

apt -y install ceph-common

在这里插入图片描述

将ceph配置文件和keyring文件拷贝至所有k8s集群中节点

scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.k8s-user.keyring /etc/ceph/ceph.client.k8s-cephfs-user.keyring root@xxx:/etc/ceph/

在这里插入图片描述

k8s使用ceph rbd

k8s集群中的pod使用rbd时可以直接通过pod的volume进行挂载,也可以以pv形式挂载使用

volume

提前在存储池中创建image

rbd create volume1 -s 2G -p k8s-data

在这里插入图片描述

配置pod通过volume挂载volume1

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-rbd-volume
spec:
  containers:
  - name: busybox
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: data-volume
      mountPath: /data/
  volumes:
  - name: data-volume
    rbd:
      monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]	#指定mon节点地址
      pool: k8s-data	#指定pool
      image: volume1	#指定要挂载的rbd image
      user: k8s-user	#指定挂载rbd image时使用的用户,默认admin用户
      keyring: /etc/ceph/ceph.client.k8s-user.keyring	#用户的keyring文件路径
      fsType: xfs	#指定挂载的rbd image格式化的文件系统类型,默认ext4

创建pod到集群中,等待pod就绪后可以进入pod验证
在这里插入图片描述
由于pod使用的的是宿主机内核,所以rbd image实际是在宿主机挂载的
在这里插入图片描述

另外keyring文件也可以保存在secret中,在pod中通过secret来引用keyring文件。

例如将k8s-user的keyring保存到secret中(注意,需要对用户的key先进行base64编码):

apiVersion: v1
kind: Secret
metadata:
  name: k8s-user-keyring
type: "kubernetes.io/rbd"	#类型必须是这个
data:
  key: "QVFCSWlvVmszNVh5RXhBQWhkK1lwb3k3VHhvQkswQ2VkRE1zcWc9PQo="

将pod创建到集群中,等待pod就绪后进入pod验证

在这里插入图片描述

配置pod通过secret引用keyring文件

apiVersion: v1
kind: Pod
metadata:
  name: pod-use-scret-keyring
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: web
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: web
    rbd:
      monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]
      pool: k8s-data
      image: volume2
      user: k8s-user
      secretRef:	#通过secret引用keyring
        name: k8s-user-keyring
      fsType: xfs

在这里插入图片描述

PV

静态pv

静态pv的方式也需要提前在存储池中创建好image
在这里插入图片描述

创建pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: rbd-pv
spec:
  accessModes: ["ReadWriteOnce"]
  capacity:
    storage: 2Gi
  persistentVolumeReclaimPolicy: Retain
  rbd:
    monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]
    pool: k8s-data
    image: volume3
    user: k8s-user
    secretRef:
      name: k8s-user-keyring
    fsType: xfs

在这里插入图片描述

创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc
  namespace: default
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 2Gi

在这里插入图片描述

pod使用pvc

apiVersion: v1
kind: Pod
metadata:
  name: pod-use-rbd-pvc
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: web
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: web
    persistentVolumeClaim:
      claimName: rbd-pvc
      readOnly: false

将pod创建到集群中,等待pod就绪后进入pod验证
在这里插入图片描述

动态pv

创建存储类

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: rbd-storageclass
provisioner: kubernetes.io/rbd
reclaimPolicy: Retain
parameters:
  monitors: 192.168.211.23:6789,192.168.211.24:6789,192.168.211.25:6789	#mon节点地址
  adminId: k8s-user		#用户名称,这个用户是用于在pool中创建image时使用
  adminSecretName: k8s-user-keyring	#用户keyring对应的secret
  adminSecretNamespace: default		#用户keyring对应的secret所在的名称空间
  pool: k8s-data	#存储池
  userId: k8s-user	#这个用户是用于挂载rbd image时使用
  userSecretName: k8s-user-keyring
  userSecretNamespace: default
  fsType: xfs
  imageFormat: "2"	#创建的rbd image的格式
  imageFeatures: "layering"		#创建的rbd image启用的特性

在这里插入图片描述

创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc-with-sc
  namespace: default
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 2Gi
  storageClassName: rbd-storageclass

在这里插入图片描述

pod使用动态pvc

apiVersion: v1
kind: Pod
metadata:
  name: pod-use-rdynamic-pvc
spec:
  containers:
  - name: redis
    image: redis
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: data
      mountPath: /data/redis/
  volumes:
  - name: data
    persistentVolumeClaim:
      claimName: rbd-pvc-with-sc
      readOnly: false

将pod创建到集群中,等待pod就绪后进入pod验证

在这里插入图片描述

k8s使用cephfs

cephfs可以同时挂载给多个pod使用,实现数据共享

volume

先将前面创建的ceph用户client.k8s-cephfs-user的keyring保存到secret中

key=$(cat /etc/ceph/ceph.client.k8s-cephfs-user.keyring |grep key|awk '{print $3}')
kubectl create secret generic k8s-cephfs-user-keyring --type=kubernetes.io/rbd --from-literal=key=$key

在这里插入图片描述

配置pod挂载cephfs

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: web-data
          mountPath: /usr/share/nginx/html
      volumes:
      - name: web-data
        cephfs:
          monitors:
          - 192.168.211.23:6789
          - 192.168.211.24:6789
          - 192.168.211.25:6789
          path: /
          user: k8s-cephfs-user
          secretRef:
            name: k8s-cephfs-user-keyring

在这里插入图片描述

在pod中验证挂载
在这里插入图片描述

在其中一个pod写入测试页面,从其他的pod访问测试页面验证数据共享
在这里插入图片描述
在这里插入图片描述

静态pv

创建cephfs pv和pvc

apiVersion: v1
kind: PersistentVolume
metadata:
  name: cephfs-pv
spec:
  accessModes: ["ReadWriteOnce"]
  capacity:
    storage: 2Gi
  persistentVolumeReclaimPolicy: Retain
  cephfs:
    monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]
    path: /
    user: k8s-cephfs-user
    secretRef:
      name: k8s-cephfs-user
    
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cephfs-pvc
  namespace: default
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 2Gi

在这里插入图片描述

配置pod使用cephfs-pv

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-with-pvc
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
      strage: cephfs-pvc
  template:
    metadata:
      labels:
        app: nginx
        strage: cephfs-pvc
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: web
          mountPath: /usr/share/nginx/html/
      volumes:
      - name: web
        persistentVolumeClaim:
          claimName: cephfs-pvc
          readOnly: false

在这里插入图片描述

进入pod验证
在这里插入图片描述

目前k8s内置的cephfs存储插件还不能实现动态pv,可以通过ceph官方的ceph-csi插件来实现cephfs的动态pv功能:https://github.com/ceph/ceph-csi

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

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

相关文章

吴恩达ChatGPT《Building Systems with the ChatGPT API》笔记

1. 课程介绍 使用ChatGPT搭建端到端的LLM系统 本课程将演示使用ChatGPT API搭建一个端到端的客户服务辅助系统,其将多个调用链接到语言模型,根据前一个调用的输出来决定使用不同的指令,有时也可以从外部来源查找信息。 课程链接&#xff1a…

client-go的Indexer三部曲之三:源码阅读

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《client-go的Indexer三部曲》全部链接 基本功能性能测试源码阅读 本篇概览 本文是《client-go的Indexer三部曲》系列的终篇,主要任务是阅读和…

VR全景智慧园区,沉浸式数字化体验,720度全视角展示

导语: 随着科技的迅猛发展,虚拟现实(Virtual Reality,简称VR)全景技术已经成为了人们趋之若鹜的新兴领域。 而城市园区作为现代社会的重要组成部分,也正在积极寻求创新的方式来吸引更多的人流和投资。 一&…

C++基础

C基础入门 1 C初识 1.1 第一个C程序 编写一个C程序总共分为4个步骤 创建项目创建文件编写代码运行程序 1.1.1 创建项目 ​ Visual Studio是我们用来编写C程序的主要工具,我们先将它打开 1.1.2 创建文件 右键源文件,选择添加->新建项 1.1.3 编…

SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础》提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/signalr/overview/getting-started…

【面试】标准库相关题型(二)

文章目录 1. deque底层实现原理1.1 概述1.2 原理图1.3 类结构1.4 操作函数 2. 什么时候使用vector、list、deque2.1 vector2.2 list2.3 deque 3. priority_queue的底层实现原理3.1 一句话概括:用堆来实现优先级队列3.2 堆结构3.3 底层容器3.4 STL对堆结构提供的接口…

Java-API简析_java.lang.SecurityManager类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131346082 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

Python入门(二十七)测试(二)

测试(二) 1.测试类2.各种断言方法3.一个要测试的类4.测试AnonymousSurvey类5.方法setUp() 1.测试类 前面我们编写了针对单个函数的测试,下面来编写针对类的测试。很多程序中都会用到类,因此证明我们的类能够正确工作大有裨益。如…

学了那么长时间的编程,C语言的各种操作符都搞不懂?点开这里有详细的介绍—>

目录 前言 一、原码、反码、补码的基础概念 1.原码 2.反码 3.补码 二、原码、反码、补码的计算方法 1.原码 2.反码 3.补码 三、算术操作符 四、移位操作符 1. 左移操作符 移位规则: 2. 右移操作符 移位规则: (1) …

电脑怎么录屏?推荐2款录制电脑屏幕的软件!

案例:我经常需要把电脑上的内容分享给别人,一般通过手机拍摄的方式。这就导致视频十分模糊,给人的观感不太好,有没有什么方法可以实现在电脑上直接录屏? 【我想录制我的电脑屏幕上的内容分享给别人,但是我…

几个SQL的高级写法

一、ORDER BY FLELD() 自定义排序逻辑 MySql 中的排序 ORDER BY 除了可以用 ASC 和 DESC,还可以通过 ORDER BY FIELD(str,str1,...) 自定义字符串/数字来实现排序。这里用 order_diy 表举例,结构以及表数据展示: ORDER BY FIELD(str,str1,..…

【Neo4j教程之CQL函数基本使用】

🚀 Neo4j 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,C…

3d重建+神经渲染

3d重建 基于深度相机(结构光、TOF、双目摄像头)的三维重建基于图像的三维重建:深度学习基于视觉几何的传统三维重建:这种三维重建方法研究时间比较久远,技术相对成熟。主要通过多视角图像对采集数据的相机位置进行估计,再通过图像…

一种对不同类型齐格勒-尼科尔斯 P-I-D 控制器调谐算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

常用工具类之AJ-Captcha入门

1.引入MAVEN依赖 若依官方引入的是1.2.7版本。我选择了目前最常用的1.3.0版本。 在项目中给的 ruoyi-framework\pom.xml 添加依赖 <!-- anji滑块验证码 --><dependency><groupId>com.anji-plus</groupId><artifactId>spring-boot-starter-captc…

通过调整图像hue值并结合ImageEnhance库以实现色调增强

前言 PIL库中的ImageEnhance类可用于图像增强&#xff0c;可以调节图像的亮度、对比度、色度和锐度。 通过RGB到HSV的变换加调整可以对图像的色调进行调整。 两种方法结合可以达到更大程度的图像色调增强。 调整hue值 __author__ TracelessLe __website__ https://blog…

vue2中引入天地图及相关配置

前言 项目中需要引入特殊用途的地图&#xff0c;发现天地图比高德地图、百度地图要更符合需求&#xff0c;于是看了看天地图。 正文 vue2项目中如何引入天地图并对相关的配置进行修改使用呢&#xff1f;官方给的4.0版本的使用说明。 引入&#xff1a; 进入到public/index.html中…

Cocos Creator3D:制作可任意拉伸的 UI 图像

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 制作可任意拉伸的 UI 图像 UI 系统核心的设计原则是能够自动适应各种不同的设备屏幕尺寸&#xff0c;因此我们在制作 UI 时需要正确设置每个控件元素的尺寸&#xff08;size&#…

TypeScript ~ TS 掌握自动编译命令 ③

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

【CV 向】OpenCV 图形绘制指南

文章目录 引言1. 创建画布2. 绘制线段3. 绘制矩形4. 绘制圆5. 绘制椭圆6. 绘制多边形7. 绘制字体结论 引言 Python OpenCV 是一个功能强大的计算机视觉库&#xff0c;除了图像处理和计算机视觉任务外&#xff0c;它还提供了丰富的功能来绘制各种图形。无论是在计算机视觉应用中…