用 Ansible 简化 K8S 部署
一、概述
Ceph 在 k8s 中用做共享存储还是非常方便的,Ceph 是比较老牌的分布式存储系统,非常成熟,功能也强大,支持三种模式(快存储、文件系统存储、对象存储),所以接下来就详细讲解如何在 k8s 使用 ceph,关于 ceph 的介绍可以参考以下几篇文章:
- [*分布式存储系统 Ceph 环境部署*](https://blog.kkun.site/2023/01/05/Ceph 环境部署)
- [*分布式存储系统 Ceph操作*](https://blog.kkun.site/2023/01/09/分布式存储系统 Ceph操作)
前提是需要一个 k8s 环境,
二、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)下载部署包
bash
1 | git clone --single-branch --branch v1.10.8 https://github.com/rook/rook.git |
由于镜像源在国外,国内无法下载,这里需要修改一些镜像或者提前下载 tag,操作如下:
bash
1 | cd rook/deploy/examples/ |
2)部署 Rook Operator
bash
1 | cd rook/deploy/examples |
也可以通过 helm 部署
bash
1 | helm repo add rook-release https://charts.rook.io/release |
3)创建 Rook Ceph 集群
现在 Rook Operator 处于 Running 状态,接下来我们就可以创建 Ceph 集群了。为了使集群在重启后不受影响,请确保设置的 dataDirHostPath 属性值为有效得主机路径。
bash
1 | cd rook/deploy/examples |
4)部署 Rook Ceph 工具
bash
1 | cd rook/deploy/examples |
5)部署 Ceph Dashboard
bash
1 | cd rook/deploy/examples |
通过 Ceph Dashboard 查看 Ceph 集群状态
bash
1 | # 查看对外端口 |
bash
1 | https://<nodeip>:nodePort/ |
6)检查
bash
1 | kubectl get pods,svc -n rook-ceph |
7)通过 ceph-tool 工具 pod 查看 ceph 集群状态
bash
1 | kubectl exec -it `kubectl get pods -n rook-ceph|grep rook-ceph-tools|awk '{print $1}'` -n rook-ceph -- bash |
四、 测试验证
1) 块存储(RBD)测试
1、创建 StorageClass
bash
1 | cd rook/deploy/examples |
2、部署 WordPress
bash
1 | kubectl apply -f mysql.yaml |
2)文件系统 (CephFS) 测试
1、创建 StorageClass
bash
1 | kubectl apply -f csi/cephfs/storageclass.yaml |
2、部署应用
bash
1 | kubectl apply -f filesystem.yaml |
3)对象存储 (RGW) 测试
1、创建对象存储
bash
1 | kubectl create -f object.yaml |
2、创建对象存储 user
bash
1 | kubectl create -f object-user.yaml |
3、获取 accesskey secretkey
bash
1 | # 获取AccessKey |
4、部署 rgw nodeport
bash
1 | kubectl apply -f rgw-external.yaml |
5、通过 api 接口使用 Ceph 对象存储
bash
1 | #首先,我们需要安装 python-boto 包,用于测试连接 S3。: |
具体测试过程在之前的文章中有很详细的介绍
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 流水易寒の博客!