一、概述

Ceph在k8s中用做共享存储还是十分便利的,Ceph是比较老牌的分布式存储体系,十分成熟,功用也强壮,支撑三种模式(快存储、文件体系存储、目标存储),所以接下来就具体讲解如何在k8s运用ceph,关于ceph的介绍能够参考我以下几篇文章:

  • 分布式存储体系 Ceph 介绍与环境布置
  • 分布式存储体系 Ceph 实战操作

前提是需要一个k8s环境,k8s环境的布置能够参考我这篇文章:Kubernetes(k8s)最新版最完整版环境布置+master高可用实现(k8sV1.24.1+dashboard+harbor)

二、Ceph Rook 介绍

Rook是一个开源的云原生存储编排工具,供给渠道、结构和对各种存储解决方案的支撑,以和云原生环境进行本地集成。

  • Rook 将存储软件转变成自我办理、自我扩展和自我修复的存储服务,经过自动化布置、启动、配置、供应、扩展、晋级、迁移、灾祸恢复、监控和资源办理来实现。Rook 底层运用云原生容器办理、调度和编排渠道供给的才能来供给这些功用。

  • Rook 运用扩展功用将其深度地集成到云原生环境中,并为调度、生命周期办理、资源办理、安全性、监控等供给了无缝的体验。有关 Rook 当前支撑的存储解决方案的状况相关的更多具体信息,能够参考 Rook 仓库 的项目介绍。Rook 目前支撑Ceph、NFS、Minio Object Store和CockroachDB。

【云原生】Ceph 在 k8s中应用
官网: rook.io 项目地址: github.com/rook

三、经过Rook在k8s中布置Ceph

官方文档: rook.io/docs/rook/v…

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

1)下载布置包

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

布置所用到的镜像如下:

【云原生】Ceph 在 k8s中应用
因为镜像源在国外,国内无法下载,这儿需要修改一些镜像或者提前下载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

【云原生】Ceph 在 k8s中应用

https://<nodeip>:nodePort/

【云原生】Ceph 在 k8s中应用

6)查看

kubectl get pods,svc -n rook-ceph

【云原生】Ceph 在 k8s中应用

6)经过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

【云原生】Ceph 在 k8s中应用

四、 测验验证

1) 块存储(RBD)测验

1、创立 StorageClass

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

【云原生】Ceph 在 k8s中应用

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 实战操作

Ceph 在 k8s中运用介绍就先到这儿了,有任何疑问欢迎给我留言,后续会持续更新【大数据+云原生】相关的文章,请小伙伴耐性等候!!!

【云原生】Ceph 在 k8s中应用