查看原文
其他

10 张图详解 K8S 中部署 Ceph 与功能测试实战

liugp 进击云原生 2024-02-25

关注公众号并添加到“星标⭐”,防止错过消息

后台回复【资料包】获取学习资料

作者:liugp

出处:https://goo.gs/0g8fe

一、概述

Ceph 在 k8s 中用做共享存储还是非常方便的,Ceph 是比较老牌的分布式存储系统,非常成熟,功能也强大,支持三种模式(快存储、文件系统存储、对象存储),所以接下来就详细讲解如何在 k8s 使用 ceph,关于 ceph 的介绍可以参考以下几篇文章:

前提是需要一个 k8s 环境,k8s 环境的部署可以参考这篇文章:32 张配图详解 K8S 1.24 高可用部署,保姆级详细版!

二、Ceph Rook 介绍

Rook是一个开源的云原生存储编排工具提供平台、框架和对各种存储解决方案的支持,以和云原生环境进行本地集成。

  • Rook 将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 底层使用云原生容器管理、调度和编排平台提供的能力来提供这些功能。
  • Rook 利用扩展功能将其深度地集成到云原生环境中,并为调度、生命周期管理、资源管理、安全性、监控等提供了无缝的体验。有关 Rook 当前支持的存储解决方案的状态相关的更多详细信息,可以参考 Rook 仓库 的项目介绍。Rook 目前支持 Ceph、NFS、Minio Object Store 和 CockroachDB。

官网: https://rook.io/
项目地址: https://github.com/rook

三、通过 Rook 在 k8s 中部署 Ceph

官方文档: https://rook.io/docs/rook/v1.10/Getting-Started/quickstart/

【温馨提示】k8s 节点各挂载一块(或者多块)20GB 的未使用的磁盘。

1)下载部署包

git clone --single-branch --branch v1.10.8 https://github.com/rook/rook.git

部署所用到的镜像如下:

由于镜像源在国外,国内无法下载,这里需要修改一些镜像或者提前下载 tag,操作如下:

cd rook/deploy/examples/

#(registry.aliyuncs.com/google_containers/<image>:<tag>),后四个镜像我FQ下
docker pull registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.5.1

docker tag registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.5.1 registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.5.1

docker pull registry.aliyuncs.com/google_containers/csi-snapshotter:v6.1.0
docker tag registry.aliyuncs.com/google_containers/csi-snapshotter:v6.1.0 registry.k8s.io/sig-storage/csi-snapshotter:v6.1.0

docker pull registry.aliyuncs.com/google_containers/csi-attacher:v4.0.0
docker tag registry.aliyuncs.com/google_containers/csi-attacher:v4.0.0 registry.k8s.io/sig-storage/csi-attacher:v4.0.0

docker pull registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0
docker tag registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0 registry.k8s.io/sig-storage/csi-resizer:v1.6.0

docker pull registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0
docker tag registry.aliyuncs.com/google_containers/csi-resizer:v1.6.0 registry.k8s.io/sig-storage/csi-resizer:v1.6.0

docker pull registry.aliyuncs.com/google_containers/csi-provisioner:v3.3.0
docker tag registry.aliyuncs.com/google_containers/csi-provisioner:v3.3.0 registry.k8s.io/sig-storage/csi-provisioner:v3.3.0

2)部署 Rook Operator

cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# 检查
kubectl -n rook-ceph get pod

也可以通过 helm 部署

helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace --namespace rook-ceph rook-ceph rook-release/rook-ceph -f values.yaml

3)创建 Rook Ceph 集群

现在 Rook Operator 处于 Running 状态,接下来我们就可以创建 Ceph 集群了。为了使集群在重启后不受影响,请确保设置的 dataDirHostPath 属性值为有效得主机路径。

cd rook/deploy/examples
kubectl apply -f cluster.yaml

4)部署 Rook Ceph 工具

cd rook/deploy/examples
kubectl create -f toolbox.yaml

5)部署 Ceph Dashboard

cd rook/deploy/examples
kubectl apply -f dashboard-external-https.yaml

# 获取 dashboard admin密码
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 -d

通过 Ceph Dashboard 查看 Ceph 集群状态

# 查看对外端口
kubectl get svc -n rook-ceph

https://<nodeip>:nodePort/

6)检查

kubectl get pods,svc -n rook-ceph

7)通过 ceph-tool 工具 pod 查看 ceph 集群状态

kubectl exec -it `kubectl get pods -n rook-ceph|grep rook-ceph-tools|awk '{print $1}'` -n rook-ceph -- bash

ceph -s

四、 测试验证

1) 块存储(RBD)测试

1、创建 StorageClass

cd rook/deploy/examples
# 创建一个名为replicapool的rbd pool
kubectl apply -f csi/rbd/storageclass.yaml

2、部署 WordPress

kubectl apply -f mysql.yaml
kubectl apply -f wordpress.yaml

2)文件系统 (CephFS) 测试

1、创建 StorageClass

kubectl apply -f csi/cephfs/storageclass.yaml

2、部署应用

kubectl apply -f filesystem.yaml

3)对象存储 (RGW) 测试

1、创建对象存储

kubectl create -f object.yaml

# 验证rgw pod正常运行
kubectl -n rook-ceph get pod -l app=rook-ceph-rgw

2、创建对象存储 user

kubectl create -f object-user.yaml

3、获取 accesskey secretkey

# 获取AccessKey
kubectl -n rook-ceph get secret rook-ceph-object-user-my-store-my-user -o yaml | grep AccessKey | awk '{print $2}' | base64 --decode

# 获取 SecretKey
kubectl -n rook-ceph get secret rook-ceph-object-user-my-store-my-user -o yaml | grep SecretKey | awk '{print $2}' | base64 --decode

4、部署 rgw nodeport

kubectl apply -f rgw-external.yaml

kubectl -n rook-ceph get service rook-ceph-rgw-my-store rook-ceph-rgw-my-store-external

5、通过 api 接口使用 Ceph 对象存储

#首先,我们需要安装 python-boto 包,用于测试连接 S3。:
yum install python-boto -y

# 然后,编写 python 测试脚本。
# cat s3.py
#!/usr/bin/python

import boto
import boto.s3.connection
access_key = 'C7492VVSL8O11NZBK3GT'
secret_key = 'lo8IIwMfmow4fjkSOMbjebmgjzTRBQSO7w83SvBd'
conn = boto.connect_s3(
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    host = '192.168.182.110', port=30369,
    is_secure=False,
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('my-first-s3-bucket')
for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
)

具体测试过程在之前的文章中有很详细的介绍,可以参考:万字长文细讲分布式存储系统 Ceph 实战操作

- END -




后台回复“
加群”,带你进入高手交流群
推荐阅读
Kubernetes 1.26 正式发布,所有变化都在这儿了!
使用 Vagrant + Kubespray 快速初始化 K8S 集群
万字长文细讲分布式存储系统 Ceph 实战操作
19 张图详细介绍分布式存储系统 Ceph 环境部署
K8S 1.26 这个新特性,支持大规模并行批处理工作负载
Docker Desktop 4.15 正式发布,这些新功能值得看
图解 K8S 1.26 新功能 Pod 调度就绪特性解析保姆级 Prometheus PromQL 讲解与实战操作
38 张图硬核高性能服务器架构设计与调优6 张配图通俗易懂说透 K8S 请求和限制18 张图 Java 容器化最佳实践总结17 张图实战 + 理清 K8S 网络排错思路,硬核!16 张图硬核讲解 Kubernetes 网络模型
全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料,回复【加群】进入高手如云技术交流群
继续滑动看下一个

10 张图详解 K8S 中部署 Ceph 与功能测试实战

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存