K8s

k8s分布式存储-Ceph

2022-01-10  本文已影响0人  小李飞刀_lql

Ceph架构介绍

1641438794173.png
RBD ( RADOs Block Device ):块存储接口
RGW ( RADOs Gateway )):对象存储网关,接口与S3和 Swift 兼容
LIBRADOs CephFS ( Ceph File System ):文件级存储接口
RADOS RADOs ( Reliable Autonomic Distributed Object Store ):抽象的对象存储集群, Ceph 核心,实现用户数据分配、故障转移等集群操作
MON :集群状态维护,例如 osD 是否健康、 PG 状态等
MDS ( Metadata Server ): CephFS 服务依赖的元数据服务
OSD ( Object Storage Daemon ):对象存储设备,主要存储数据

Ceph核心概念

RADOS

01 全称Reliable Autonomic Distributed Object Store,即可靠的、自动化的、分布式对象存储系统。
02 RADOS是Ceph集群的精华,用户实现数据分配、Failover等集群操作。

Librados

01 Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的
02 目前提供PHP、Ruby、Java、Python、C和C++支持。

Crush

01 通过Crush算法的寻址操作,Ceph得以摒弃了传统的集中式存储元数据寻址方案
02 Crush算法在一致性哈希基础上很好的考虑了容灾域的隔离,使得Ceph能够实现各类负载的副本放置规则,例如跨机房、机架感知等
03 Crush算法有相当强大的扩展性,理论上可以支持数千个存储节点,这为Ceph在大规模云环境中的应用提供了先天的便利

Pool

01 Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略
02 副本(replicated)和 纠删码( Erasure Code)

PG

01 PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略
02 简单点说就是相同PG内的对象都会放到相同的硬盘上
03 PG是 ceph的逻辑概念,服务端数据均衡和恢复的最小粒度就是PG,一个PG包含多个OSD。
04 引入PG这一层其实是为了更好的分配数据和定位数据;

Object

01 简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储
02 最底层的存储单元,包含元数据和原始数据

Pool、PG和OSD的关系

01 一个Pool里有很多PG;  
02 一个PG里包含一堆对象,一个对象只能属于一个PG;  
03 PG有主从之分,一个PG分布在不同的OSD上;  

OSD

001 OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。
002 主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等;

Ceph三种存储类型

块存储( RBD )

优点:存储速度较快
缺点:不支持共享存储
应用场景:虚拟机硬盘
典型设备:硬盘、 Raid 

文件存储( CephFS )

优点:支持共享存储
缺点:读写速度较慢(需要经过操作系统处理再转为块存储)
应用场景:文件共享,多台服务器共享使用同一个存储
典型设备: FTP 、 NFs 

对象存储( Object )

优点:具备块存储的读写性能和文件存储的共享特性
缺点:操作系统不能直接访问,只能通过应用程序级别的 API 访问
应用场景:图片存储,视频存储
典型设备:阿里云 OSs ,腾讯云 Cos

部署Ceph集群

初始化工作

关闭防火墙

systemcti stop firewald
systemctl disable firewalld

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久,重启生效
setenforce 0   #临时

关闭 swap

swapof - a #临时 
#永久
[root@k8s-m1 ~]# vi /etc/fstab 
#UUID=ff5b128d-f66c-40a5-86d7-ce69d2c0da61 swap  ...

根据规划设置主机名

hostnamectl set - hostname < hostname > 

添加 hosts

cat >>/etc/hosts << EOF  
192.168.31.71 ceph-node01  
192.168.31.72 ceph-node02
192.168.31.73 ceph-node03 
EOF

设置文件描述符

#临时生效
ulimit -SHn 102400   

#重启生效
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF

时间同步

yum instal ntpdate - y 
ntpdate time.windows.com 

配置 SSH 免交互认证

ssh-keygen 
ssh-copy-id root@ceph-node01
ssh-copy-id root@ceph-node02
ssh-copy-id root@ceph-node03

集群规划

1641449306492.png
ceph - deploy : ceph 集群部署节点,负责集群整体部署,这里复用node1节点,也可以单独找一台服务器作为部署节点
monitor : Ceph 监视管理节点,负责集群状态维护,例如存储池副本数、 PG 状态、 OSD 数量等,至少部署1个,一般需要3或5个节点组建高可用
osd : Ceph 存储节点,实际负责数据存储的节点,集群中至少有3个 OSD ,不少于默认副本数,每个 OSD 对应一快硬盘。

Ceph 集群部署方式

yum :常规的部署方式
ceph - ansible :官方基于 ansible 写的自动化部署工具
https://docs.ceph.com/projects/ceph-ansible/en/latest/
ceph - deploy : ceph 提供的简易部署工具,可以非常方便部署 ceph 集群。(推荐)https://docs.ceph.com/projects/ceph-deploy/en/latest/

Ceph 版本选择

1641450946948.png

Ceph 集群部署步骤

1、配置阿里云 yum 仓库
2、安装 ceph-deploy 工具
3、创建集群
4、安装 Ceph 
5、部署 Monitor 服务 
6、部署 OSD 服务并添加硬盘
7、部署 MGR 服务

配置阿里云 yum 仓库

#所有机器都要配置
#rpm-octopus是对应版本的
#el7 对应centos版本
cat >/etc/yum.repos.d/ceph.repo<<EOF
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/\$basearch
gpgcheck=0


[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch
gpgcheck=0


[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/SRPMS
gpgcheck=0
EOF

安装 ceph - deploy 工具

yum -y install ceph-deploy

创建集群

创建一个my-cluster 目录,所有命令在此目录下进行: 
mkdir my-cluster 
cd my-cluster 

创建一个 Ceph 集群:
yum install  epel-release -y #所有节点都安装
yum install python2-pip -y 
ceph-deploy new ceph-node01 ceph-node02 ceph-node03

安装 Ceph

安装 Ceph 包到指定节点:
ceph-deploy install --no-adjust-repos ceph-node01 ceph-node02 ceph-node03
注:-no-adjust-repos参数是直接使用本地源,不使用官方默认源

部署 Monitor 服务

初始化并部署 monitor ,收集所有密钥: 
ceph-deploy mon create-initial 
使用ceph-deploy命令将配置文件和admin key复制到管理节点和Ceph节点,以便毎次执行ceph CL命令无需指定 monitor 地址和 ceph.client.admin.keyring 
ceph-deploy admin ceph-node01 ceph-node02 ceph-node03

部署 OSD 服务并添加硬盘

创建6个 OSD ,分别对应每个节点未使用的硬盘:
fdisk -l #查看每个节点
ceph-deploy osd create --data /dev/sdb ceph-node01
ceph-deploy osd create --data /dev/sdc ceph-node01
ceph-deploy osd create --data /dev/sdb ceph-node02
ceph-deploy osd create --data /dev/sdc ceph-node02
ceph-deploy osd create --data /dev/sdb ceph-node03
ceph-deploy osd create --data /dev/sdc ceph-node03

部署 MGR 服务

ceph-deploy mgr create ceph-node01 ceph-node02 ceph-node03
01 MGR 是 Ceph L版本新增加的组件
02 主要用是分担和扩展 monitor 的部分功能,减轻 monitor 的负担
03 建议每台 monitor 节点都部署一个 mgr ,以实现相同级别的高可用。
pip3 install pecan werkzeug #所有节点都安装
ceph config set mon auth_allow_insecure_global_id_reclaim false #所有节点都执行
查看 Ceph 集群状态: 
ceph -s 
查看 Ceph 版本: 
ceph -v 
-------------------------------------------------------------------------------------
[root@k8s-m1 ~]# ps -ef|grep ceph
root       10228       1  0 17:51 ?        00:00:00 /usr/bin/python3.6 /usr/bin/ceph-crash
ceph       68360       1  1 18:45 ?        00:00:05 /usr/bin/ceph-mgr -f --cluster ceph --id k8s-m1 --setuser ceph --setgroup ceph
ceph       68372       1  0 18:45 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph       68415       1  3 18:45 ?        00:00:16 /usr/bin/ceph-mon -f --cluster ceph --id k8s-m1 --setuser ceph --setgroup ceph

Ceph 集群服务管理

1、启动所有守护进程
# systemctl restart ceph.target 
2、按类型启动守护进程
# systemctl restart ceph-osd@id  (ps -ef|grep ceph)
# systemctl restart ceph-mon.target 
# systemctl restart ceph-mds.target 
# systemctl restart ceph-mgr.target 

Ceph 集群常用管理命令

主机名 命令
PG 状态 ceph pg stat
Pool状态 ceph osd pool Is #查看存储池<br />ceph osd pool Is detail
OSD 状态 ceph osd stat<br />ceph osd dump # OSD 详情
ceph osd tree # OSD 分布
ceph osd df # OSD 使用
Monitor 状态 ceph mon stat
ceph quorum status #仲裁状态
集群空间用量 ceph df

RDB块存储

工作流程

1641467877051.png
(1)客户端创建一个pool,需要为这个pool指定pg的数量;  
(2)创建pool/image rbd设备进行挂载;  
(3)用户写入的数据进行切块,每个块的大小默认为4M,并且每个块都有一个名字,名字就是object+序号;  
(4)将每个object通过pg进行副本位置的分配;  
(5)pg根据cursh算法会寻找3个osd,把这个object分别保存在这三个osd上;  
(6)osd上实际是把底层的disk进行了格式化操作,一般部署工具会将它格式化为xfs文件系统;  
(7)object的存储就变成了存储一个文rbd0.object1.file

RBD常用命令

命令 功能
rbd create 创建块设备映像
rbd ls 列出 rbd 存储池中的块设备
rbd info 查看块设备信息
rbd diff 可以统计 rbd 使用量
rbd map 映射块设备
rbd showmapped 查看已映射块设备
rbd remove 删除块设备
rbd resize 更改块设备的大小

RBD的创建并使用

1、创建rbd使用的pool

ceph osd pool create rbd-pool  128 # ceph osd pool create <pool-name> <pg-num>
ceph osd pool ls 

pg数量设置建议:
pg数量=(osd数量*100)/副本数
副本数默认为3
例如 3*100/3 =100 向上取2的n次方 128

2、指定存储池使用存储类型

ceph osd pool application enable rbd-pool rbd 

3、创建一个块设备

# rbd create --size 10240 rbd-pool/image01 

3、查看块设备

# rbd ls rbd-pool
# rbd info rbd-pool/image01

本地挂载使用块设备

1、禁用当前系统内核不支持的feature

# rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten

2、映射(任意节点操作)

# rbd map rbd-pool/image01 
--/dev/rbd0

3、格式化块设备

# mkfs.xfs /dev/rbd0

4、mount到本地

# mount /dev/rbd0 /mnt
# umount /mnt

5、取消块设备和内核映射

# rbd unmap rbd-pool/image01 

6、删除RBD块设备

# rbd rm rbd-pool/image01

远程挂载使用块设备

1、拷贝配置文件和秘钥

cd my-cluster /
scp ceph.conf root@192.168.153.17:/etc/ceph 
scp ceph.client.admin.keyring root@192.168.153.17:/etc/ceph
scp /etc/yum.repos.d/ceph.repo  root@192.168.153.17:/etc/yum.repos.d

2、安装 Ceph 客户端

 yum install epel-release - y 
 yum install -y ceph-common

3、剩余操作就与本地挂载操作一样了

快照配置

1、创建快照

rbd snap create rbd-pool/image01@snap01

2、列出创建的快照

rbd snap list rbd-pool/image01
 

3、还原快照

rbd snap rollback rbd-pool/image01@snap01

注:还原快照前需要先取消挂载和内核映射,否则会出错
umount /dev/rdb0 /mnt
rbd unmap rbd-pool/image01 

4、重新映射并挂载验证

rbd map rbd-pool/image01
mount /dev/rbd0 /mnt

5、删除快照

rbd snap rm rbd-pool/image01@snap01

克隆配置

1、创建一个块设备

# rbd create --size 10240 rbd-pool/image02 

2、创建快照

rbd snap create rbd-pool/image02@snap01

3、设置快照处于被保护状态

# rbd snap protect rbd-pool/image02@snap01

4、通过快照克隆一个新块设备

# rbd clone rbd-pool/image02@snap01  rbd-pool/image02_clone
# rdb info rbd-pool/image02_clone

5、将克隆的快照独立于父设备

# rbd flatten rbd-pool/image02_clone


CephFS文件系统

概述

01 CephFS 是一个基于 ceph 集群且兼容 POSIX 标准的文件系统。
02 创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由 ceph 集群中的 OSD 处理。
03 cephfs 支持以内核模块方式加载也支持 fuse 方式加载。
04 无论是内核模式还是 fuse 模式,都是通过调用 libcephfs 库来实现 cephfs 文件系统的加载,而 libcephfs 库又调用 librados 库与 ceph 集群进行通信,从而实现 cephfs 的加载。


1641521621653.png

部署MDS服务

ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03


创建文件系统

#创建存储池
ceph osd pool create cephfs-data  <pg_num>
ceph osd pool create cephfs-metadata  <pg_num>
ceph fs ls
#创建文件系统
#格式:ceph fs new <fs_name> <metadata> <data>
ceph fs new cephfs cephfs-metadata cephfs-data 
ceph fs ls #查看创建后的cephfs


挂载并使用

挂载本地目录

#安装 Ceph 客户端
yum install epel-release - y 
yum install -y ceph-common

#获取账号与密钥
ceph auth list |grep admin -A1

mkdir -p /opt/cephfs/local
 

#挂载本地目录
mount -t ceph 192.168.0.201:6789,192.168.0.202:6789,192.168.0.203:6789:/ /opt/cephfs/local/ -o name=admin,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==
或者
mount -t ceph 192.168.153.25:6789,192.168.153.27:6789,192.168.153.28:6789:/ /opt/cephfs/local/ -o name=admin,secretfile=/opt/cephfs/admin.secret


#取消挂载
umount /opt/cephfs/local

fuse方式挂载

#安装fuse
yum install -y ceph-fuse

cd my-cluster /
scp ceph.conf root@192.168.153.17:/etc/ceph 
scp ceph.client.admin.keyring root@192.168.153.17:/etc/ceph

mkdir -p /opt/cephfs/fuse
#挂载到本地目录
ceph-fuse -m 192.168.153.25:6789,192.168.153.27:6789,192.168.153.28:6789  /opt/cephfs/fuse/

#取消挂载
fusermount -u /opt/cephfs/fuse/

k8s使用ceph作为pod存储

pv动态供给工作流程

1641526606246.png

ceph-csi供给程序

ceph-csi是ceph官方维护的PV供给程序,专门用于在Kubernetes中使用 RBD 、CephFS 为 Pod 提供存储
项目地址:https://github.com/ceph/ceph-csi

1641527748959.png

RBD

关于部署,RBD YAML文件在deploy/rbd/kubernetes目录,YAML改动如下:
01 全部统一命名空间到 ceph-csi 
02 csi-config-map.yaml修改连接ceph集群信息
03 增加storageclass.yaml,修改集群ID和存储池
04 增加secret.yaml,修改秘钥
05 将csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中关于kms配置注释


**全部统一命名空间到 ceph-csi **

 kubectl create ns ceph-csi 

k8s节点安装 Ceph 客户端

 yum install epel-release - y 
 yum install -y ceph-common

csi-config-map.yaml

[root@k8s-m1 rbd]# vi csi-config-map.yaml 
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "6800e723-090a-4329-9fc4-bfa299110977",
        "monitors": [
          "192.168.153.25:6789",
          "192.168.153.27:6789",
          "192.168.153.28:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-config
  namespace: ceph-csi
  
---------------------------------------------------------------------------------
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977
或者:    
[root@k8s-m1 rbd]# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 6800e723-090a-4329-9fc4-bfa299110977


storageclass

[root@k8s-m1 rbd]# vi storageclass.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: 6800e723-090a-4329-9fc4-bfa299110977 
   pool: rbd-pool
   imageFeatures: layering
   csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
   csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi
   csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi
   csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
   csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi
   csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard
---------------------------------------------------------------------------------
clusterID:
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977


pool:
[root@k8s-m1 rbd]# ceph osd pool ls
rbd-pool
......

secret

[root@k8s-m1 rbd]# vi secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: ceph-csi
stringData:
  userID: admin
  userKey: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
  
---------------------------------------------------------------------------------
userKey:
ceph auth list |grep admin -A1
client.admin
        key: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
        


        


启动验证

[root@k8s-m1 rbd]# ls
csi-config-map.yaml      csi-nodeplugin-rbac.yaml  csi-provisioner-rbac.yaml      
csi-rbdplugin.yaml  secret.yaml csi-nodeplugin-psp.yaml  csi-provisioner-psp.yaml  
csi-rbdplugin-provisioner.yaml     storageclass.yaml

[root@k8s-m1 rbd]# kubectl apply -f .

[root@k8s-m1 rbd]# kubectl get sc
NAME       PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   
csi-rbd-sc rbd.csi.ceph.com   Delete          Immediate           true  


[root@k8s-m1 rbd]# kubectl get pod -n ceph-csi -o wide                                     
NAME                                      READY   STATUS   IP               NODE       
csi-rbdplugin-245vq                       3/3    Running   192.168.153.28   k8s-node2 
csi-rbdplugin-mhg8g                       3/3    Running   192.168.153.25   k8s-m1  
csi-rbdplugin-w6trw                       3/3    Running   192.168.153.27   k8s-node1 
csi-rbdplugin-provisioner-fc66bb6-2b8tz   7/7    Running   10.244.36.131    k8s-node1   
csi-rbdplugin-provisioner-fc66bb6-7p72t   7/7    Running   10.244.169.129   k8s-node2   
csi-rbdplugin-provisioner-fc66bb6-kwd8k   0/7    Pending             
  



rbd-pod-test.yaml

apiVersion: v1
kind: Pod
metadata:
  name: ceph-rbd-test
spec:
  containers:
  - name: nginx
    image: nginx:latest
    volumeMounts:
      - name: www 
        mountPath: /usr/share/nginx/html 
  volumes:
  - name: www 
    persistentVolumeClaim:
      claimName: ceph-rbd-test
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-rbd-test
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: csi-rbd-sc  
  resources:
    requests:
      storage: 10Gi


测试

[root@k8s-m1 rbd]# rbd ls rbd-pool  
csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed
image01
image02

#动态供给程序创建的
[root@k8s-m1 rbd]# rbd info rbd-pool/csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed
rbd image 'csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 2a853bb0bca9d
        block_name_prefix: rbd_data.2a853bb0bca9d
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Fri Jan  7 20:36:20 2022
        access_timestamp: Fri Jan  7 20:36:20 2022
        modify_timestamp: Fri Jan  7 20:36:20 2022
        
        
[root@k8s-m1 rbd]# kubectl exec -it ceph-rbd-test -- bash 
root@ceph-rbd-test:/# cd /usr/share/nginx/html/

root@ceph-rbd-test:/usr/share/nginx/html# touch aaa

#删除pod
[root@k8s-m1 rbd]# kubectl delete pod ceph-rbd-test


[root@k8s-m1 rbd]# kubectl apply -f  rbd-pod-test.yaml 
pod/ceph-rbd-test created
persistentvolumeclaim/ceph-rbd-test unchanged
 
 
[root@k8s-m1 rbd]# kubectl exec -it ceph-rbd-test -- bash                      
root@ceph-rbd-test:/# cd /usr/share/nginx/html/
root@ceph-rbd-test:/usr/share/nginx/html# ls
aaa  

cephfs

关于部署,cephfs YAML文件在deploy/cephfs/kubernetes目录,YAML改动如下:
01 全部统一命名空间到 ceph-csi-cephfs 
02 csi-config-map.yaml修改连接ceph集群信息
03 增加storageclass.yaml,修改集群ID、文件存储池、文件系统名称

增加 secret.yaml和storageclass.yaml文件
将 csi-rbdplugin-provisioner.yaml 和 csi-rbdplugin.yaml 中关于 kms 配置注释
在使用中,还需要根据自己集群环境修改:
 
 secret.yaml 修改秘钥
 storageclass.yaml修改集群ID和文件系统名称
 
 关于部署,RBD YAML文件在deploy/rbd/kubernetes目录,YAML改动如下:
01 全部统一命名空间到 ceph-csi 
02 csi-config-map.yaml修改连接ceph集群信息
03 增加storageclass.yaml,修改集群ID和存储池
04 增加secret.yaml,修改秘钥
05 将csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中关于kms配置注释

**全部统一命名空间到 ceph-csi **

 kubectl create ns ceph-csi-cephfs

k8s节点安装 Ceph 客户端

 yum install epel-release - y 
 yum install -y ceph-common


csi-config-map

[root@k8s-m1 rbd]# vi csi-config-map.yaml 
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "6800e723-090a-4329-9fc4-bfa299110977",
        "monitors": [
          "192.168.153.25:6789",
          "192.168.153.27:6789",
          "192.168.153.28:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-config
  namespace: ceph-csi-cephfs
  
---------------------------------------------------------------------------------
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977
    
[root@k8s-m1 rbd]# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 6800e723-090a-4329-9fc4-bfa299110977


storageclass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
   clusterID: 6800e723-090a-4329-9fc4-bfa299110977 
   pool: cephfs-data 
   fsName: cephfs
   csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-cephfs
   csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-cephfs
   csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-cephfs
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard   
---------------------------------------------------------------------------------
clusterID:
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977


pool:
[root@k8s-node2 ~]# ceph osd pool ls
cephfs-data
...

[root@k8s-m1 ~]# ceph fs ls 
name: cephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]

secret

[root@k8s-m1 rbd]# vi secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: ceph-csi-cephfs
stringData:
  userID: admin
  userKey: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
  
---------------------------------------------------------------------------------
userKey:
ceph auth list |grep admin -A1
client.admin
        key: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==

启动验证

[root@k8s-m1 cephfs]# ls
csi-cephfsplugin-provisioner.yaml  csi-config-map.yaml      csi-nodeplugin-rbac.yaml  csi-provisioner-rbac.yaml          storageclass.yaml        csi-cephfsplugin.yaml        csi-nodeplugin-psp.yaml            csi-provisioner-psp.yaml secret.yaml


[root@k8s-m1 cephfs]# kubectl get pod -n ceph-csi-cephfs
NAME                                            READY   STATUS    RESTARTS   AGE
csi-cephfsplugin-8knvq                          3/3     Running   0          26s
csi-cephfsplugin-dvfhf                          3/3     Running   0          26s
csi-cephfsplugin-provisioner-7c454885fc-cnb2v   0/6     Pending   0          26s
csi-cephfsplugin-provisioner-7c454885fc-t5mtd   6/6     Running   0          26s
csi-cephfsplugin-provisioner-7c454885fc-xtwqb   6/6     Running   0          26s
csi-cephfsplugin-xcr5g                          3/3     Running   0          26s

[root@k8s-m1 cephfs]# kubectl get sc
NAME            PROVISIONER           RECLAIMPOLICY   VOLUMEBINDINGMODE   
csi-cephfs-sc   cephfs.csi.ceph.com   Delete          Immediate           


ceph-cephfs-test

[root@k8s-m1 ~]# vi cephfs-deployment-test.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cephfs-pod-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
          - name: www
            mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: ceph-cephfs-test
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-cephfs-test
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: csi-cephfs-sc
  resources:
    requests:
      storage: 10Gi

测试

[root@k8s-m1 ~]# kubectl get pod 
NAME                               READY   STATUS    RESTARTS   AGE
cephfs-pod-test-5d95fd8858-2v9cr   1/1     Running   0          8m40s
cephfs-pod-test-5d95fd8858-dsp7h   1/1     Running   0          8m40s
cephfs-pod-test-5d95fd8858-n2j87   1/1     Running   0          8m40s


[root@k8s-m1 ~]# kubectl exec -it cephfs-pod-test-5d95fd8858-2v9cr -- bash
root@cephfs-pod-test-5d95fd8858-2v9cr:/# cd  /usr/share/nginx/html 
root@cephfs-pod-test-5d95fd8858-2v9cr:/usr/share/nginx/html# touch test.txt

[root@k8s-m1 ~]# kubectl exec -it cephfs-pod-test-5d95fd8858-dsp7h -- bash
root@cephfs-pod-test-5d95fd8858-dsp7h:/# cd  /usr/share/nginx/html
root@cephfs-pod-test-5d95fd8858-dsp7h:/usr/share/nginx/html# ls
test.txt

总结

1641608575044.png
上一篇下一篇

猜你喜欢

热点阅读