论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
第28讲:Ceph集群使用RBD块存储与K8S Volumes集成 ...
第28讲:Ceph集群使用RBD块存储与K8S Volumes集成
莫张周刘王
金牌会员
|
2024-7-12 00:38:31
|
显示全部楼层
|
阅读模式
楼主
主题
839
|
帖子
839
|
积分
2517
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' created
2.在资源池中创建块存储设备
[root@ceph-node-1 ~]# rbd create --image-feature layering kubernetes_data/rbd_volume_data.img --size 10G
3.查看创建的块存储设备
[root@ceph-node-1 ~]# rbd -p kubernetes_data ls
rbd_volume_data.img
4.查看块存储设备的信息
[root@ceph-node-1 ~]# rbd info kubernetes_data/rbd_volume_data.img
rbd image 'rbd_volume_data.img':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: ad8a1b33e8b
block_name_prefix: rbd_data.ad8a1b33e8b
format: 2
features: layering
op_features:
flags:
create_timestamp: Mon Apr 11 23:00:30 2022
access_timestamp: Mon Apr 11 23:00:30 2022
modify_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的访问方式。
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-node1
containers:
- name: rbd-volumes-pod
image: nginx:1.15
imagePullPolicy: IfNotPresent
ports:
- name: web
containerPort: 80
protocol: TCP
volumeMounts:
- name: rbd-volume
mountPath: /data
volumes:
- name: rbd-volume
rbd:
monitors:
- 192.168.20.20:6789
- 192.168.20.21:6789
- 192.168.20.22:6789
pool: kubernetes_data
image: rbd_volume_data.img
fsType: ext4
user: kubernetes
secretRef:
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都可以读取。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
莫张周刘王
金牌会员
这个人很懒什么都没写!
楼主热帖
06、etcd 写请求执行流程
软件测试项目实战经验附视频以及源码【 ...
四、WinUI3下TitleBar的自定义
【云原生】三、详细易懂的Docker 容器 ...
c# sqlsugar,hisql,freesql orm框架全 ...
物联网5种无线传输协议特点大汇总 ...
网上书店管理系统项目【Java数据库编程 ...
MySQL用户和权限管理
如何用同一套账号接入整个研发过程? ...
不同于Oracle:MySQL的insert会阻塞upd ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表