API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph

本文主要是介绍API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph

API资源对象StorageClass

SC的主要作用在于,自动创建PV,从而实现PVC按需自动绑定PV。

下面我们通过创建一个基于NFS的SC来演示SC的作用。

要想使用NFS的SC,还需要安装一个NFS provisioner,provisioner里会定义NFS相关的信息(服务器IP、共享目录等)

github地址: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

将源码下载下来:

git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
cd nfs-subdir-external-provisioner/deploy
sed -i 's/namespace: default/namespace: kube-system/' rbac.yaml  ##修改命名空间为kube-system
kubectl apply -f rbac.yaml  ##创建rbac授权

修改deployment.yaml

sed -i 's/namespace: default/namespace: kube-system/' deployment.yaml ##修改命名空间为kube-system##你需要修改标红的部分 spec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: chronolaw/nfs-subdir-external-provisioner:v4.0.2  ##改为dockerhub地址volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner- name: NFS_SERVERvalue: 192.168.222.99  ##nfs服务器地址- name: NFS_PATHvalue: /data/nfs  ##nfs共享目录volumes:- name: nfs-client-rootnfs:server: 192.168.222.99  ##nfs服务器地址path: /data/nfs  ##nfs共享目录

应用yaml

kubectl apply -f deployment.yaml 
kubectl apply -f class.yaml ##创建storageclass

SC YAML示例

cat class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:archiveOnDelete: "false"  ##自动回收存储空间

有了SC,还需要一个PVC

vi nfsPvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: nfspvcspec:storageClassName: nfs-clientaccessModes:- ReadWriteManyresources:requests:storage: 500Mi

下面创建一个Pod,来使用PVC

vi nfsPod.yaml

apiVersion: v1
kind: Pod
metadata:name: nfspod
spec:containers:- name: nfspodimage: nginx:1.23.2volumeMounts:- name: nfspvmountPath: "/usr/share/nginx/html"volumes:- name: nfspvpersistentVolumeClaim:claimName: nfspvc

Ceph存储

说明:Kubernetes使用Ceph作为存储,有两种方式,一种是将Ceph部署在Kubernetes里,需要借助一个工具rook;另外一种就是使用外部的Ceph集群,也就是说需要单独部署Ceph集群。

下面,我们使用的就是第二种。

搭建Ceph集群

1)准备工作

机器编号主机名IP
1ceph1192.168.222.111
2ceph2192.168.222.112
3ceph3192.168.222.113

关闭selinux、firewalld,配置hostname以及/etc/hosts

为每一台机器都准备至少一块单独的磁盘(vmware下很方便增加虚拟磁盘),不需要格式化。

所有机器安装时间同步服务chrony

yum install -y chrony
systemctl start chronyd 
systemctl enable chronyd

设置yum源(ceph1上)

vi /etc/yum.repos.d/ceph.repo #内容如下

cat /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-pacific/el8/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-pacific/el8/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-pacific/el8/SRPMS
gpgcheck=0
priority=1

所有机器安装docker-ce(ceph使用docker形式部署)

先安装yum-utils工具

yum install -y yum-utils 

配置Docker官方的yum仓库,如果做过,可以跳过

yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce

yum install -y docker-ce

启动服务

systemctl start docker
systemctl enable docker

所有机器安装python3、lvm2(三台都做)

yum install -y python3 lvm2

2)安装cephadm(ceph1上执行)

yum install -y cephadm

3)使用cephadm部署ceph(ceph1上)

cephadm bootstrap --mon-ip 192.168.222.111

注意看用户名、密码
在这里插入图片描述

4)访问dashboard

https://192.168.222.111:8443

更改密码后,用新密码登录控制台

5)增加host

首先进入ceph shell(ceph1上)

cephadm  shell  ##会进入ceph的shell界面下

在这里插入图片描述

生成ssh密钥对儿

[ceph: root@ceph1 /]# ceph cephadm get-pub-key > ~/ceph.pub

配置到另外两台机器免密登录

[ceph: root@ceph1 /]# ssh-copy-id -f -i ~/ceph.pub root@ceph2
[ceph: root@ceph1 /]# ssh-copy-id -f -i ~/ceph.pub root@ceph3

到浏览器里,增加主机

在这里插入图片描述

在这里插入图片描述

6)创建OSD(ceph shell模式下,在ceph上操作)

假设三台机器上新增的新磁盘为/dev/sdb

ceph orch daemon add osd ceph1:/dev/sdb
ceph orch daemon add osd ceph2:/dev/sdb
ceph orch daemon add osd ceph3:/dev/sdb

查看磁盘列表:

ceph orch device ls

此时dashboard上也可以看到
在这里插入图片描述

7)创建pool

image-20231219170056730

8)查看集群状态

ceph -s

9)针对tang-1 pool启用rbd application

ceph osd pool application enable tang-1 rbd

image-20231219170135923

10)初始化pool

rbd pool init tang-1
k8s使用ceph

1)获取ceph集群信息和admin用户的key(ceph那边)

#获取集群信息
[ceph: root@ceph1 /]# ceph mon dump
epoch 3
fsid 2f8f283c-f84a-11ed-983f-000c29dd2163   ##这一串一会儿用
last_changed 2023-05-22T04:08:00.684893+0000
created 2023-05-22T02:44:15.871443+0000
min_mon_release 16 (pacific)
election_strategy: 1
0: [v2:192.168.222.111:3300/0,v1:192.168.222.111:6789/0] mon.ceph1
1: [v2:192.168.222.112:3300/0,v1:192.168.222.112:6789/0] mon.ceph2
2: [v2:192.168.222.113:3300/0,v1:192.168.222.113:6789/0] mon.ceph3
dumped monmap epoch 3#获取admin用户key
[ceph: root@ceph1 /]# ceph auth get-key client.admin ; echo
AQD/1mpkHaTTCxAAqETAy48Z/aChnMso92d+ug==   #这串一会用

2)下载并导入镜像

将用到的镜像先下载下来,避免启动容器时,镜像下载太慢或者无法下载

可以下载到其中某一个节点上,然后将镜像拷贝到其它节点

#下载镜像(其中一个节点)
wget -P /tmp/ https://d.frps.cn/file/tools/ceph-csi/k8s_1.24_ceph-csi.tar#拷贝
scp /tmp/k8s_1.24_ceph-csi.tar  tanglinux02:/tmp/
scp /tmp/k8s_1.24_ceph-csi.tar  tanglinux03:/tmp/#导入镜像(所有k8s节点)
ctr -n k8s.io i import k8s_1.24_ceph-csi.tar

3)建ceph的 provisioner

创建ceph目录,后续将所有yaml文件放到该目录下

mkdir ceph
cd ceph

创建secret.yaml

cat > secret.yaml <<EOF
apiVersion: v1
kind: Secret
metadata:name: csi-rbd-secretnamespace: default
stringData:userID: adminuserKey: AQBnanBkRTh0DhAAJVBdxOySVUasyOJiMAibYQ==  #这串上面已经获取 
EOF

创建config-map.yaml

cat >  csi-config-map.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:name: "ceph-csi-config"
data:config.json: |-[{"clusterID": "0fd45688-fb9d-11ed-b585-000c29dd2163", "monitors": ["192.168.222.111:6789","192.168.222.112:6789","192.168.222.113:6789"]}]
EOF

创建ceph-conf.yaml

cat > ceph-conf.yaml <<EOF
apiVersion: v1
kind: ConfigMap
data:ceph.conf: |[global]auth_cluster_required = cephxauth_service_required = cephxauth_client_required = cephx# keyring is a required key and its value should be emptykeyring: |
metadata:name: ceph-config
EOF

创建csi-kms-config-map.yaml(该config内容为空)

cat > csi-kms-config-map.yaml <<EOF
---
apiVersion: v1
kind: ConfigMap
data:config.json: |-{}
metadata:name: ceph-csi-encryption-kms-config
EOF

下载其余rbac以及provisioner相关yaml

wget  https://d.frps.cn/file/tools/ceph-csi/csi-provisioner-rbac.yaml
wget  https://d.frps.cn/file/tools/ceph-csi/csi-nodeplugin-rbac.yamlwget https://d.frps.cn/file/tools/ceph-csi/csi-rbdplugin.yaml
wget https://d.frps.cn/file/tools/ceph-csi/csi-rbdplugin-provisioner.yaml

应用所有yaml(注意,当前目录是在ceph目录下)

for f in `ls *.yaml`; do echo $f; kubectl apply -f $f; done

检查provisioner的pod,状态为running才对

kubectl get po

在这里插入图片描述

4)创建storageclass

在k8s上创建ceph-sc.yaml

cat > ceph-sc.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: csi-rbd-sc     #storageclass名称
provisioner: rbd.csi.ceph.com   #驱动器
parameters:clusterID: 0fd45688-fb9d-11ed-b585-000c29dd2163    #ceph集群idpool: tang-1      #pool空间imageFeatures: layering   #rbd特性csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secretcsi.storage.k8s.io/provisioner-secret-namespace: defaultcsi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secretcsi.storage.k8s.io/controller-expand-secret-namespace: defaultcsi.storage.k8s.io/node-stage-secret-name: csi-rbd-secretcsi.storage.k8s.io/node-stage-secret-namespace: default
reclaimPolicy: Delete   #pvc回收机制
allowVolumeExpansion: true   #对扩展卷进行扩展
mountOptions:           #StorageClass 动态创建的 PersistentVolume 将使用类中 mountOptions 字段指定的挂载选项- discard
EOF##应用yaml
kubectl apply -f ceph-sc.yaml 

5)创建pvc

在k8s上创建ceph-pvc.yaml

cat > ceph-pvc.yaml <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: ceph-pvc     #pvc名称
spec:accessModes:- ReadWriteOnce     #访问模式resources:requests:storage: 1Gi      #存储空间storageClassName: csi-rbd-sc
EOF#应用yaml
kubectl apply -f ceph-pvc.yaml

查看pvc状态,STATUS必须为Bound

kubectl get pvc

在这里插入图片描述

6)创建pod使用ceph存储

cat > ceph-pod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:name: ceph-pod
spec:containers:- name: ceph-ngimage: nginx:1.23.2volumeMounts:- name: ceph-mntmountPath: /mntreadOnly: falsevolumes:- name: ceph-mntpersistentVolumeClaim:claimName: ceph-pvc
EOFkubectl apply -f ceph-pod.yaml

查看pv

kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS   REASON   AGE
pvc-a952fbf2-0f3f-4d69-b7bd-afc58f2e0402   1Gi        RWO            Delete           Bound    default/ceph-pvc   csi-rbd-sc              1h

在ceph这边查看rbd

[ceph: root@ceph1 /]# rbd ls tang-1
tang-img1
csi-vol-ca03a97d-f985-11ed-ab20-9e95af1f105a

在pod里查看挂载情况

kubectl exec -it ceph-pod -- df
Filesystem     1K-blocks     Used Available Use% Mounted on
overlay         18375680 11418696   6956984  63% /
tmpfs              65536        0     65536   0% /dev
tmpfs             914088        0    914088   0% /sys/fs/cgroup
/dev/rbd0         996780       24    980372   1% /mnt
/dev/sda3       18375680 1141866   6956984  63% /etc/hosts
shm                65536        0     65536   0% /dev/shm
tmpfs            1725780       12   1725768   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs             914088        0    914088   0% /proc/acpi
tmpfs             914088        0    914088   0% /proc/scsi
tmpfs             914088        0    914088   0% /sys/firmware

这篇关于API资源对象StorageClass;Ceph存储;搭建Ceph集群;k8s使用ceph的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/515305

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画