第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;于是…

计算机视觉与深度学习实战,Python为工具,基于Simulink进行图像和视频处理

计算机视觉与深度学习是当代人工智能领域的两大热门技术,它们在图像识别、目标检测、视频分析等领域展现出巨大的潜力和应用价值。Python作为一种强大的编程语言,结合深度学习框架和Simulink等工具,为计算机视觉和深度学习的研究与实践提供了丰富的资源和平台。以下将结合Py…

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;显得很高级

Swagger2的巨坑无比

如果你遇到了一个Swagger问题&#xff0c;有的请求存在就会导致你Swagger接口扫描失败&#xff0c;并后台报NPE&#xff0c;在其它解决方案无法解决的时候&#xff0c;我建议看如下操作! 在请求参数的位置根据实际情况指定参数获取来源&#xff0c;是请求头还是请求体[RequestP…

技术先进、应用广泛、社区活跃的[项目名称]

项目介绍 ----  [项目介绍内容]&#xff0c;此项目在开源社区中备受欢迎&#xff0c;其创新性技术和广泛应用领域吸引了大量开发者关注。  代码解释 ----  [代码解释内容]&#xff0c;该项目采用[编程语言]&#xff0c;通过[技术栈]实现&#xff0c;具有[功能特点]。  …

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

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

css记录:三维变换之transition

在CSS中&#xff0c;transition属性用于在元素从一个样式状态过渡到另一个样式状态时添加动画效果。当用于三维变化&#xff08;即与transform属性结合使用时&#xff09;&#xff0c;transition可以创建平滑且吸引人的3D动画。 transition属性的基本语法 transition属性是一…

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

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

天池人脸识别项目复现

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

功能强大的开源数据中台系统 DataCap 2024.03.6 发布

推荐一套基于 SpringBoot 开发的简单、易用的开源权限管理平台&#xff0c;建议下载使用: https://github.com/devlive-community/authx 推荐一套为 Java 开发人员提供方便易用的 SDK 来与目前提供服务的的 Open AI 进行交互组件&#xff1a;https://github.com/devlive-commun…

学科竞赛的一些想法

title: 学科竞赛的一些想法 typora-root-url: 学科竞赛的一些想法 date: 2023-05-11 16:02:28 tags: 竞赛 没参加 华为的&#xff0c;错过了中兴的。看了眼赛氪的。瞅了下分享贴的 企业举办的比赛&#xff0c;大学生要不要参加&#xff1f;&#xff08;什么样的比赛值得参加&…

服务器雪崩的应对策略之----异步处理

异步处理&#xff08;Asynchronous Processing&#xff09;是提高系统并发性和性能的重要技术。在异步处理模式下&#xff0c;任务可以在等待其他操作&#xff08;如I/O操作、网络请求等&#xff09;完成时继续执行其他任务&#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…