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.keyringceph 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: busyboximage: busyboximagePullPolicy: IfNotPresentcommand: ["/bin/sh", "-c", "sleep 3600"]volumeMounts:- name: data-volumemountPath: /data/volumes:- name: data-volumerbd:monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]	#指定mon节点地址pool: k8s-data	#指定poolimage: volume1	#指定要挂载的rbd imageuser: 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: nginximage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: webmountPath: /usr/share/nginx/html/volumes:- name: webrbd:monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]pool: k8s-dataimage: volume2user: k8s-usersecretRef:	#通过secret引用keyringname: k8s-user-keyringfsType: xfs

在这里插入图片描述

PV
静态pv

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

创建pv

apiVersion: v1
kind: PersistentVolume
metadata:name: rbd-pv
spec:accessModes: ["ReadWriteOnce"]capacity:storage: 2GipersistentVolumeReclaimPolicy: Retainrbd:monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]pool: k8s-dataimage: volume3user: k8s-usersecretRef:name: k8s-user-keyringfsType: xfs

在这里插入图片描述

创建pvc

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

在这里插入图片描述

pod使用pvc

apiVersion: v1
kind: Pod
metadata:name: pod-use-rbd-pvc
spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: webmountPath: /usr/share/nginx/html/volumes:- name: webpersistentVolumeClaim:claimName: rbd-pvcreadOnly: 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对应的secretadminSecretNamespace: default		#用户keyring对应的secret所在的名称空间pool: k8s-data	#存储池userId: k8s-user	#这个用户是用于挂载rbd image时使用userSecretName: k8s-user-keyringuserSecretNamespace: defaultfsType: xfsimageFormat: "2"	#创建的rbd image的格式imageFeatures: "layering"		#创建的rbd image启用的特性

在这里插入图片描述

创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: rbd-pvc-with-scnamespace: default
spec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 2GistorageClassName: rbd-storageclass

在这里插入图片描述

pod使用动态pvc

apiVersion: v1
kind: Pod
metadata:name: pod-use-rdynamic-pvc
spec:containers:- name: redisimage: redisimagePullPolicy: IfNotPresentvolumeMounts:- name: datamountPath: /data/redis/volumes:- name: datapersistentVolumeClaim:claimName: rbd-pvc-with-screadOnly: 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: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: web-datamountPath: /usr/share/nginx/htmlvolumes:- name: web-datacephfs:monitors:- 192.168.211.23:6789- 192.168.211.24:6789- 192.168.211.25:6789path: /user: k8s-cephfs-usersecretRef: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: 2GipersistentVolumeReclaimPolicy: Retaincephfs:monitors: ["192.168.211.23:6789", "192.168.211.24:6789", "192.168.211.25:6789"]path: /user: k8s-cephfs-usersecretRef:name: k8s-cephfs-user---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: cephfs-pvcnamespace: default
spec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 2Gi

在这里插入图片描述

配置pod使用cephfs-pv

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-with-pvc
spec:replicas: 2selector:matchLabels:app: nginxstrage: cephfs-pvctemplate:metadata:labels:app: nginxstrage: cephfs-pvcspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: webmountPath: /usr/share/nginx/html/volumes:- name: webpersistentVolumeClaim:claimName: cephfs-pvcreadOnly: false

在这里插入图片描述

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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部