k8s使用ceph存储

这篇具有很好参考价值的文章主要介绍了k8s使用ceph存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初始化操作

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

k8s使用ceph,ceph,kubernetes,ceph

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,ceph,kubernetes,ceph
k8s使用ceph,ceph,kubernetes,ceph

k8s集群中所有节点安装ceph-common

apt -y install ceph-common

k8s使用ceph,ceph,kubernetes,ceph

将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,ceph,kubernetes,ceph

k8s使用ceph rbd

k8s集群中的pod使用rbd时可以直接通过pod的volume进行挂载,也可以以pv形式挂载使用

volume

提前在存储池中创建image

rbd create volume1 -s 2G -p k8s-data

k8s使用ceph,ceph,kubernetes,ceph

配置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验证
k8s使用ceph,ceph,kubernetes,ceph
由于pod使用的的是宿主机内核,所以rbd image实际是在宿主机挂载的
k8s使用ceph,ceph,kubernetes,ceph

另外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验证

k8s使用ceph,ceph,kubernetes,ceph

配置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

k8s使用ceph,ceph,kubernetes,ceph

PV
静态pv

静态pv的方式也需要提前在存储池中创建好image
k8s使用ceph,ceph,kubernetes,ceph

创建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

k8s使用ceph,ceph,kubernetes,ceph

创建pvc

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

k8s使用ceph,ceph,kubernetes,ceph

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验证
k8s使用ceph,ceph,kubernetes,ceph

动态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启用的特性

k8s使用ceph,ceph,kubernetes,ceph

创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-pvc-with-sc
  namespace: default
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 2Gi
  storageClassName: rbd-storageclass

k8s使用ceph,ceph,kubernetes,ceph

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使用ceph,ceph,kubernetes,ceph

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

k8s使用ceph,ceph,kubernetes,ceph

配置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

k8s使用ceph,ceph,kubernetes,ceph

在pod中验证挂载
k8s使用ceph,ceph,kubernetes,ceph

在其中一个pod写入测试页面,从其他的pod访问测试页面验证数据共享
k8s使用ceph,ceph,kubernetes,ceph
k8s使用ceph,ceph,kubernetes,ceph

静态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

k8s使用ceph,ceph,kubernetes,ceph

配置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

k8s使用ceph,ceph,kubernetes,ceph

进入pod验证
k8s使用ceph,ceph,kubernetes,ceph

目前k8s内置的cephfs存储插件还不能实现动态pv,可以通过ceph官方的ceph-csi插件来实现cephfs的动态pv功能:https://github.com/ceph/ceph-csi文章来源地址https://www.toymoban.com/news/detail-601123.html

到了这里,关于k8s使用ceph存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 9.云原生存储之ceph在k8s中应用及问题处理

    云原生专栏大纲 官网文档:Ceph Docs 对象存储(Ceph Object Storage): 对象存储适用于需要存储和访问大量非结构化数据的场景,例如图像、视频、日志文件等。在 Kubernetes 中,可以使用 Ceph Rados Gateway 提供的对象存储接口,将应用程序的对象数据存储在 Ceph 集群中。对象存储提

    2024年01月23日
    浏览(36)
  • Kubernetes(K8S之存储)

    configMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件,命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制。ConfigMap可以被用来保存单个属性。 也可以用来保存整个配置文件或者JSON二进制大对象。 1,使用目录创建 $ls d

    2024年03月08日
    浏览(59)
  • Kubernetes(k8s)实战:深入详解Volume,详解k8s文件同步存储

    Volume官网:https://kubernetes.io/docs/concepts/storage/volumes/ On-disk files in a Container are ephemeral, which presents some problems for non-trivial applications when running in Containers. First, when a Container crashes, kubelet will restart it, but the files will be lost - the Container starts with a clean state. Second, when running Containers to

    2024年02月13日
    浏览(51)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(74)
  • Kubernetes/k8s的存储卷/数据卷

    k8s的存储卷/数据卷 容器内的目录和宿主机的目录挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消失 容器和节点之间创建一个可以持久化保存容器内文件

    2024年01月24日
    浏览(44)
  • Kubernetes基础(二十三)-k8s持久化存储详解

    1.1 介绍 在容器中的磁盘文件是短暂的,当容器崩溃时,Kubelet会重新启动容器,但容器运行时产生的数据文件都将会丢失,之后容器会以最干净的状态启动。另外,当一个Pod运行多个容器时,各个容器可能需要共享一些文件,诸如此类的需求都可以使用Volume解决。Pod只需要通

    2024年03月17日
    浏览(51)
  • Kubernetes基础(二十)-k8s存储对象Storage Classes

    在Kubernetes中,Storage Classes是用于定义不同存储配置的资源。它们允许开发者抽象存储的物理细节,使其更易于管理和使用。通过Storage Classes,可以定义存储的类型、性能、卷大小等参数,使得应用程序能够根据需求选择合适的存储。 Storage Classes工作的基本原理是通过定义标

    2024年02月19日
    浏览(43)
  • Kubernetes基础(十八)-k8s存储对象Persistent Volume

    在容器化应用中,Pod的生命周期是短暂的,当Pod终止时,其中的数据通常也会被销毁。为了解决这个问题,Kubernetes引入了Persistent Volume(PV)的概念。PV是集群中的一块持久化存储,它独立于Pod存在,可以被多个Pod共享,并且在Pod终止后仍然保留数据。 PV允许开发者将数据存储

    2024年02月20日
    浏览(40)
  • Kubernetes基础(十九)-k8s存储对象Persistent Volume Claim

    在容器编排中,Pod的生命周期是短暂的,当Pod终止时,其中的数据通常也会被销毁。为了解决这个问题,Kubernetes引入了Persistent Volume(PV)和Persistent Volume Claim(PVC)的概念。 PVC是对PV的一种声明,它定义了Pod对存储资源的需求。Pod通过PVC来请求PV,而PV则提供了实际的存储资

    2024年02月20日
    浏览(38)
  • Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

    它是一款全栈的 Kubernetes 容器云 PaaS 解决方案(来源于官网),而我觉得它是一款强大的Kubernetes图形界面,它继承了如下组件 (下面这段内容来自官网): Kubernetes DevOps 系统 基于 Jenkins 为引擎打造的 CI/CD,内置 Source-to-Image 和 Binary-to-Image 自动化打包部署工具 基于 Istio 的微

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包