k8s使用ceph存储

news2024/12/24 2:39:09

文章目录

      • 初始化操作
      • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指针和数组--指针数组及其应用

目录 一、指针数组用于表示多个字符串 二、指针数组用于表示命令行参数 一、指针数组用于表示多个字符串 一维数组可存储一个字符串,二维数组可存储多个字符串。 二维数组的元素在内存中是连续存放的,存完第一行后,再存第二行,以…

多线程之JUC

写在前面 本文一起看下jdk并发包的相关内容。 1:JUC包提供了哪些功能 先通过包结构看下JUC提供的功能: 接下来分别看下。 1.1:锁 JUC中的锁机制提供了比synchronized,wait/notify更加灵活的同步控制,在java.util.…

大数据基础平台实施及运维进阶

1、完全分布式部署介绍 完全分部式是真正利用多台Linux主机来进行部署Hadoop,对Linux机器集群进行规划,使得Hadoop各个模块分别部署在不同的多台机器上。 2、nameNode HA完全分布式部署 2.1、nameNode切换方法 分别处于Active和Standby中 hadoop可以…

操作系统复习笔记4

1、queueType队列类型 队列中的数据也呈线性排列。虽然与栈有些相似,但队列中添加和删除数据的操作分别是在两端进行的。 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式。 1.1 顺序队列 用数组存储队列…

C语言学习(二十五)---指针练习题(一)

在上一节内容中,我们学习了递归与冒泡排序法的有关内容,今天我们将继续往下学习,主要内容为指针练习题,好了,话不多说,开整!!! 在之前的第18—22的内容中,我…

lnmp框架的应用

目录 应用一 nginx访问状态统计 1.先查看http_stub_status有没有安装 2.进入nginx的配置文件改配置 3.nginx-检查配置 重启服务 最后这个20就是显示的状态统计 应用二 给网站加密 1.首先安装http-tools软软件 2.把nginx设置锁也要有执行权限 3.进入nginx配置文件 4. 检查…

【Windows个性化设置篇】StartAllBack更改win11任务栏设置

【Windows个性化设置篇】StartAllBack更改win11任务栏设置 Windows11目前不支持更改任务栏位置固定的修改,因为想把任务栏固定到旁边,从而充分利用电脑屏幕位置。之前试过TranslucentTB可以把任务栏透明化,很漂亮,但在分屏操作时…

【Vue3】Vue3+Vite+TS使用npm包引入百度地图

文章目录 Vue3ViteTS引入百度地图一、注册二、安装依赖包三、参考文档四、全局注册五、局部导入六、断网地图的使用八、项目使用成功图片九、使用卫星图 Vue3ViteTS引入高德地图npm包查找地图依赖包 Vue3ViteTS引入百度地图 一、注册 官网👉百度地图开放平台 注册…

python---案例分析(1)

标准库 python自带的 第三方库 其他人做出来的 例1: 实现一个日期计算器 EG: 计算2012年2月14日和2016年2月3日之间的差值 使用datetime 1.根据日期构造出datetime类型的变量 2.把两个变量进行相减,得到的结果即为所求 1) 2) 3) 例2: 实现单词逆序 翻转单词顺序 i am a s…

MySQL数据库表的操作

创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明: field 表示列名。 datatype 表示列的类型。 character set 字符集,如果没有指…

hutool包下的BeanUtil工具使用、SQL中的and和OR的优先级

SQL中的and和OR的优先级 首先and的优先级大于or,通俗理解其实or查询其实会把条件分为左右两边来查。 如select * from user where id 1 and status 2 or status 3,本来想查询user表中id为1的状态为2或者3的数据,其实只会这样执行,and比or…

大数据分析案例-基于LightGBM算法构建航空公司满意度预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

DOD Digital Engineering Vision 数字工程策略与实施

DOD Digital Engineering Vision DOD的数字工程策略与实施,仅供个人学习使用,不代表个人意见和观点!!! Digital Engineering Strategy and Implementation Ms. Philomena Zimmerman Office of the Under Secretary …

day1

在linux内核中,当用户打开设备文件时,内核中的VFS层会调用设备驱动中的sys_open()函数,在sys_open()函数中,内核会根据文件的inode号判断文件是否存在于文件系统中,如果存在,内核会找到这个文件的文件信息结…

Python:使用钉钉dingtalk发送通知消息

通过钉钉的开放API接口,可以很容易的将消息发送到钉钉dingtalk,比起邮件发送更稳定,及时 文档 官网:https://www.dingtalk.com/API Explorer调试 https://open-dev.dingtalk.com/apiExplorer 目录 方式一:webhook方式…

Search space set group switching(一)

欢迎关注同名微信公众号“modem协议笔记”。 根据R17 38.300的描述,UE可以通过PDCCH monitoring adaptation机制实现power saving的目的,这其中就包括PDCCH monitoring skipping和search space set group (SSSG) switching两种机制。PDCCH monitoring s…

dom4j 解析 mybatis mapper xml 文件

01: CarMapper.xml : <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"car"…

代码随想录 回溯算法 Java

文章目录 组合&#xff08;*中等&#xff09;77. 组合&#xff08;*中等&#xff09;17. 电话号码的字母组合&#xff08;中等&#xff09;39. 组合总和&#xff08;中等&#xff09;40. 组合总和II&#xff08;中等&#xff09;216. 组合总和||| 分割&#xff08;*中等&#x…

【王道操作系统】内存管理

内存管理概念 1.C 2.D 存储保护的作用&#xff1a;保证各道作业在各自的存储空间内运行&#xff0c;互不干扰 实现虚拟内存管理需要请求分页&#xff08;请求分段、请求段页&#xff09;等技术的支持&#xff0c;故需要硬件支持&#xff0c;比如页表机制、中断机构、地址变换…

【五子棋实战】第1章 项目架构与开发思路

【五子棋实战】第1章 项目总览 前言 ## 项目技术栈 ## 项目可配置性 博客目录 项目预览 项目代码获取 项目架构 ## 架构&#xff1a;前端页面 算法接口 ## 前端页面 ## 算法接口 开发思路 前言 五子棋是一种古老而受欢迎的棋类游戏&#xff0c;本博客将介绍如何使用…