第28讲:Ceph集群使用RBD块存储与K8S Volumes集成

文章目录

    • 1.Ceph集群使用RBD块存储与K8S集成简介
    • 2.Ceph集群RBD块存储与K8S Volume集成
      • 2.1.在Ceph集群中创建K8S集群使用的块存储
      • 2.2.创建用于K8S访问Ceph RBD块设备的认证用户
      • 2.3.将认证用户的Key存储在K8S Secret资源中
      • 2.4.在K8S集群的所有节点中安装Ceph命令
      • 2.5.创建Pod资源使用Ceph集群的RBD块存储进行数据持久化
      • 2.6.查看Pod资源挂载的RBD信息

1.Ceph集群使用RBD块存储与K8S集成简介

在K8S集群中为Pod资源提供数据持久化,大致分为三种解决方案:

  • Volume
    • Volume持久化有三种类型分别是EmptyDir、HostPath、NFS。
    • Volume是K8S集群中较为简单的数据持久化方案,无需创建其他资源,直接在Pod资源编排文件中声明Volume卷,即可挂载使用。
  • PV、PVC
    • PV和PVC是一种高级类型的持久化存储费方案,PV负责与底层存储系统进行对接,PVC从PV中分配一定的资源,最后由PVC挂载到Pod中。
  • StorageClass
    • 更加高级的一种持久化存储方案,由StorageClass提供一个数据持久化资源池,当Pod需要持久化数据时,直接从StorageClass中自动创建出PV和PVC,最后挂载到Pod资源中。

无论使用哪种持久化方案,最常用的方式是通过NFS或者NAS来实现,今天通过Ceph分布式集群中的RBD块存储来实现Pod数据的持久化。

2.Ceph集群RBD块存储与K8S Volume集成

2.1.在Ceph集群中创建K8S集群使用的块存储

1.创建一个Pool资源池
[root@ceph-node-1 ~]# ceph osd pool create kubernetes_data 16 16
pool 'kubernetes_data' created2.在资源池中创建块存储设备
[root@ceph-node-1 ~]# rbd create --image-feature layering kubernetes_data/rbd_volume_data.img --size 10G3.查看创建的块存储设备
[root@ceph-node-1 ~]# rbd -p kubernetes_data ls
rbd_volume_data.img4.查看块存储设备的信息
[root@ceph-node-1 ~]# rbd info kubernetes_data/rbd_volume_data.img
rbd image 'rbd_volume_data.img':size 10 GiB in 2560 objectsorder 22 (4 MiB objects)snapshot_count: 0id: ad8a1b33e8bblock_name_prefix: rbd_data.ad8a1b33e8bformat: 2features: layeringop_features: flags: create_timestamp: Mon Apr 11 23:00:30 2022access_timestamp: Mon Apr 11 23:00:30 2022modify_timestamp: Mon Apr 11 23:00:30 2022

2.2.创建用于K8S访问Ceph RBD块设备的认证用户

K8S想要访问Ceph中的RBD块设备,必须通过一个认证用户才可以访问,如果没有认证用户则无法访问Ceph集群中的块设备。

命令格式:ceph auth get-or-create {用户名称} mon '{访问mon的方式}' osd '{访问osd的方式}'

[root@ceph-node-1 ~]# ceph auth get-or-create client.kubernetes mon 'profile rbd' osd 'profile rbd pool=kubernetes_data'
[client.kubernetes]key = AQBlRVRibbqzJRAAD3lacYaxRloTVTio6e+10A==

命令解释:创建了一个client.kubernetes名称的Ceph认证用户,访问mon的方式是以RBD块存储形式访问,访问OSD的方式也是以块存储RBD方式访问Pool资源池。

查看创建的认证用户。

[root@ceph-node-1 ~]# ceph auth list 

可以看到Ceph的认证用户都是以client开头,每一个用户都有对mon和osd的访问方式。

image-20220411231844008

2.3.将认证用户的Key存储在K8S Secret资源中

将认证用户的key通过Base64进行加密,存储在K8S的Secret资源中。

1)将key通过Base64进行加密

[root@ceph-node-1 ~]# echo AQBlRVRibbqzJRAAD3lacYaxRloTVTio6e+10A== | base64
QVFCbFJWUmliYnF6SlJBQUQzbGFjWWF4UmxvVFZUaW82ZSsxMEE9PQo=

2)将加密后的Key存储在Secret资源中

[root@k8s-master volumes]# vim rbd-volume-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: rbd-volume-secret
type: "kubernetes.io/rbd"
data:key: QVFCbFJWUmliYnF6SlJBQUQzbGFjWWF4UmxvVFZUaW82ZSsxMEE9PQo=

3)创建Secret资源

RBD的Secret要与Pod在同一Namespace下,如果不同的Namespace的Pod都需要使用RBD进行存储,则需要在每个Namespace下都进行创建。

[root@k8s-master volumes]# kubectl apply -f rbd-volume-secret.yaml
secret/rbd-volume-secret created[root@k8s-master volumes]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
rbd-volume-secret     kubernetes.io/rbd                     1      16s
default-token-fbknq   kubernetes.io/service-account-token   3      60d

2.4.在K8S集群的所有节点中安装Ceph命令

不安装ceph命令将无法成功挂载块设备。

[root@k8s-master ~]# yum -y install ceph-common
[root@k8s-node1 ~]# yum -y install ceph-common
[root@k8s-node2 ~]# yum -y install ceph-common

2.5.创建Pod资源使用Ceph集群的RBD块存储进行数据持久化

1)编写Pod资源使用RBD块存储的资源编排文件

[root@k8s-master volumes]# vim rbd-volumes-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: rbd-volumes-pod
spec:nodeName: k8s-node1containers:- name: rbd-volumes-podimage: nginx:1.15imagePullPolicy: IfNotPresentports:- name: webcontainerPort: 80protocol: TCPvolumeMounts:- name: rbd-volumemountPath: /datavolumes:- name: rbd-volumerbd:monitors:- 192.168.20.20:6789- 192.168.20.21:6789- 192.168.20.22:6789pool: kubernetes_dataimage: rbd_volume_data.imgfsType: ext4 user: kubernetessecretRef:name: rbd-volume-secret

2)创建Pod资源

[root@k8s-master volumes]# kubectl apply -f rbd-volumes-pod.yaml
pod/rbd-volumes-pod created[root@k8s-master ~]# kubectl get pod
[root@k8s-master volumes]# kubectl get pod
NAME              READY   STATUS              RESTARTS   AGE
rbd-volumes-pod   1/1     Running			   0          3s

2.6.查看Pod资源挂载的RBD信息

1)进入Pod中查看挂载的RBD信息

可以看到Pod成功挂载上了RBD块存储,和之前做块设备映射一样,也是将块设备映射成了一块名为/dev/rbd0的裸磁盘,然后挂载到了/data目录中。

[root@k8s-master volumes]# kubectl exec -it rbd-volumes-pod bash
root@rbd-volumes-pod:/# df -hT /data
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/rbd0      ext4  9.8G   37M  9.7G   1% /data

2)在宿主机上查看挂载的RBD信息

为什么会在Pod中看到挂载的RBD块设备映射的磁盘,其实是宿主机将块设备映射的磁盘挂载到了容器的某个路径中,这才导致在Pod里显示的是一块RBD磁盘挂载。

首先查看Pod运行在了哪个Node节点上,然后查看RBD块设备的挂载信息。

[root@k8s-node1 ~]# df -HT /dev/rbd0
文件系统       类型  容量  已用  可用 已用% 挂载点
/dev/rbd0      ext4   11G   38M   11G    1% /var/lib/kubelet/plugins/kubernetes.io/rbd/mounts/kubernetes_data-image-rbd_volume_data.img

3)当Pod资源被删除后观察NOde节点挂载的RBD状态

当Pod资源被删除后,Node节点挂载的RBD块设备自动删除。

[root@k8s-master volumes]# kubectl delete -f rbd-volumes-pod.yaml
pod "rbd-volumes-pod" deleted[root@k8s-node1 ~]# df -HT /dev/rbd0
df: "/dev/rbd0": 没有那个文件或目录

4)多个Pod同时使用一个块存储设备会有什么效果

一个块设备映射的磁盘只能被一个节点进行挂载,如果多个Pod资源分布在不同Node节点上,多个Node节点都要挂载这一个块存储映射的磁盘将会报错。

  Warning  FailedMount             5s    kubelet                  MountVolume.WaitForAttach failed for volume "rbd-volume" : rbd image kubernetes_data/rbd_volume_data.img is still being used

若是多个Pod都调度在同一个Node节点上,那么可以同时使用同一块块存储设备持久化Pod中的数据,并且也Pod可以启动成功。

[root@k8s-master volumes]# kubectl get pod -o wide
NAME              	READY   STATUS    RESTARTS   AGE     IP                NODE        NOMINATED NODE   READINESS GATES
rbd-volumes-pod   	1/1     Running   0          7m12s   100.111.156.122   k8s-node1   <none>           <none>
rbd-volumes-pod-2   1/1     Running   0          8s      100.111.156.120   k8s-node1   <none>           <none>

类似于共享存储的效果,如下图所示,都是挂载的一块块设备,任何Pod在里面写数据,其他的Pod都可以读取。

image-20220412000333362

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

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

相关文章

【uni-app学习手札】

uni-app&#xff08;vue3&#xff09;编写微信小程序 编写uni-app不必拘泥于HBuilder-X编辑器&#xff0c;可用vscode进行编写&#xff0c;在《微信开发者工具》中进行热加载预览&#xff0c; 主要记录使用uni-app过程中自我备忘一些api跟语法&#xff0c;方便以后编写查找使用…

【React 】折叠面板,点击展开时再请求数据

需求背景&#xff1a;使用折叠面板的形式展示数据&#xff0c;面板内部数据需要在打开时请求接口获取。 遇到问题&#xff1a;最开始使用Antd 的折叠面板组件&#xff0c;它对于数据直接渲染是没问题的&#xff0c;但是不好满足打开面板时再动态加载数据的需求&#xff0c;于是…

JAVA中EasyPoi导出word文档附带表格数据

导入easy-poi相关依赖 <!-- word导出 方式&#xff1a;easypoi --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.4.0</version></dependency><dependency><…

VBA学习(12):制作动态模糊匹配的下拉菜单

今天就再给大家分享一下&#xff0c;如何使用VBA制作更好用的动态模糊匹配下拉菜单。 完成后的效果演示如下&#xff1a; 如上图所示&#xff0c;点击A列单元格&#xff0c;Excel会自动跳出一个文本输入框和一个列表框。当在文本框中输入数据时&#xff0c;列表框的数据会随之…

IIS代理配置-反向代理

前后端分离项目&#xff0c;前端在开发中使用proxy代理解决跨域问题&#xff0c;打包之后无效。 未配置前无法访问 部署环境为windows IIS&#xff0c;要在iis设置反向代理 安装代理模块 需要在iis中实现代理&#xff0c;需要安装Application Request Routing Cache和URL重…

思维导图之计算机网络整体框架

高清自行访问&#xff1a;计算机网络整体框架 (yuque.com)

南开大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;教育漏洞报告平台(EDUSRC) 兑换价格&#xff1a;30金币​ 获取条件&#xff1a;南开大学任意中危或以上级别漏洞 证书规格&#xff1a;证书做了木框装裱&#xff0c;显得很高级

k8s自动补全工具和UI管理界面

分享两个有利于K8S的工具 目录 分享两个有利于K8S的工具 一、部署Dashboard&#xff08;主节点&#xff09; 介绍 1.1、查看集群状态 1.2、下载yaml文件并运行Dashboard 1.3、部署服务 1.4、创建访问账户、获取token&#xff08;令牌&#xff09; 1.5、浏览器访问Dash…

EasyCVR/EasyDSS无人机直播技术助力野生动物监测

近日有新闻报道&#xff0c;一名挖掘机师傅在清理河道时&#xff0c;意外挖出一只稀有的扬子鳄&#xff0c;挖机师傅小心翼翼地将其放在一边&#xff0c;扬子鳄也顺势游回一旁的河道中。 随着人类对自然环境的不断探索和开发&#xff0c;野生动物及其栖息地的保护显得愈发重要。…

天池人脸识别项目复现

1 项目背景 #c 概述 项目的目的 图像分类是整个计算机视觉领域中最基础的任务&#xff0c;也是最重要的任务之⼀&#xff0c;最适合拿来进⾏学习实践。为了让新⼿们能够⼀次性体验⼀个⼯业级别的图像分类任务的完整流程&#xff0c;本次我们选择带领⼤家完成⼀个对图片中⼈脸进…

【Tableau系列第(6)篇】使用Tableau Prep进行数据清理、整合(一)

使用Tableau Prep的整体过程详见&#xff1a;【Tableau系列第&#xff08;5&#xff09;篇】用Tableau Prep整理数据全流程初体验 本篇一步一步跟我一起来熟悉更多的Tableau Prep数据清理、整合的操作。 示例excel数据源链接: https://pan.baidu.com/s/17nx3_LPe30oK1l1JsC6K…

04. Java 多线程的创建

1. 前言 本节内容重点需要掌握 Java 多线程的三种创建方式&#xff0c;具体内容如下&#xff1a; Java 线程类 Thread 继承结构&#xff0c;这是 JDK Thread 源码的类结构&#xff0c;是了解 Thread 类的第一步&#xff1b;掌握多线程的三种创建方式&#xff0c;这是本节的重…

记录:[android] SSLHandshakeException: Handshake failed 问题;已解决!

1、问题描述&#xff1a;在使用Retrofit2 时在安卓老设备上&#xff08;安卓6.0&#xff09;网络无法请求、安卓 10 、 11 未出现此问题&#xff1f;what? 原因&#xff1a;服务端 TLS 版本过高 2、废话不多说、解决方案A 、添加依赖&#xff1a;implementation org.conscrypt…

国产MCU芯片(3):小华半导体

前言: 微控制芯片(MCU)作为现代电子化、信息化智能控制的核心元器件之一,是将中央处理器、存储器、定时器/计时器、模拟信号采集模块以及通信接口等集成在一块芯片上的微型控制器。 家电与消费市场端仍是国内的MCU厂家下游最大的应用市场和主战场,最近两年正在发力车规级市…

ATA-4052C高压功率放大器在新能源汽车安全测试中的应用

新能源汽车的崛起已经改变了汽车行业的格局&#xff0c;为环境友好型交通方式提供了更多的选择。为了确保这些新型汽车的安全性和可靠性&#xff0c;进行全面的安全测试是至关重要的。高压功率放大器在新能源汽车的安全测试中发挥着重要的作用&#xff0c;本文将介绍其应用以及…

(2024)豆瓣电影TOP250爬虫详细讲解和代码

&#xff08;2024&#xff09;豆瓣电影TOP250爬虫详细讲解和代码 爬虫目的 获取 https://movie.douban.com/top250 电影列表的所有电影的属性。并存储起来。说起来很简单就两步。 第一步爬取数据第二步存储 爬虫思路 总体流程图 由于是分页的&#xff0c;要先观察分页的规…

力扣1901.寻找峰值II

力扣1901.寻找峰值II 二分每一行 并用函数找出每一行中最大值的下标若最大值比其下面相邻的元素大 则上方一定存在峰值若最大值比其下面相邻的元素小 则下方一定存在峰值 class Solution {int indexmax(vector<int> &a){return max_element(a.begin(),a.end()) - …

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验一 Packet Tracer的简单使用和访问Web服务器

一、实验目的 1.掌握Packet Tracer的简单使用方式&#xff1b; 2.加深对网络体系结构的理解。 二、实验要求 1.搭建Cisco Packet Tracer仿真平台使用环境&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实验内容 第一部分:Packet Tracer的…

最实战的GLM4微调入门:从文本分类开始

GLM4是清华智谱团队最近开源的大语言模型。 以GLM4作为基座大模型&#xff0c;通过指令微调的方式做高精度文本分类&#xff0c;是学习LLM微调的入门任务。 使用的9B模型&#xff0c;显存要求相对较高&#xff0c;需要40GB左右。 在本文中&#xff0c;我们会使用 GLM4-9b-Chat…

全志 Android 11:实现响应全局按键

一、篇头 最近实现热键想功能&#xff0c;简单总结了下全志平台Android 11 的响应全局热键的方法。 二、需求 实现全局热键&#xff0c;响应F-、AF、F三个按键&#xff0c;AF只用于启动调焦界面&#xff0c;F-和F除了可以启动调焦界面外&#xff0c;还用于调整镜头的焦距&…