首页 > 其他分享 >【云原生】Ceph 在 k8s中应用

【云原生】Ceph 在 k8s中应用

时间:2023-01-07 17:12:16浏览次数:67  
标签:原生 ceph rook csi kubectl Ceph registry k8s

目录

一、概述

Ceph在k8s中用做共享存储还是非常方便的,Ceph是比较老牌的分布式存储系统,非常成熟,功能也强大,支持三种模式(快存储、文件系统存储、对象存储),所以接下来就详细讲解如何在k8s使用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。

在这里插入图片描述
官网: 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

在这里插入图片描述

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

在这里插入图片描述

四、 测试验证

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

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

标签:原生,ceph,rook,csi,kubectl,Ceph,registry,k8s
From: https://www.cnblogs.com/liugp/p/17033006.html

相关文章

  • K8s 为什么会抛弃 docker
    为什么K8s会抛弃docker前言CRIcontainerd参考为什么K8s会抛弃docker前言在这之前先来了解下,k8s是如何和docker进行交互的。CRIkubelet调用下层容......
  • 云原生 微服务架构
    微服务架构 云原生架构 ......
  • PHP 原生EXCEL传入数据库
    1.下载PHPExcel-1.8下载地址:https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8   2.前端页面-通过form表单提交必须设置enctype="multipart/form-data"......
  • k8s 1.22.10 Ingress-nginx 的部署
    1.创建ingressingress-nginx/index.mdatcontroller-v1.1.3·kubernetes/ingress-nginx(github.com)源文件地址:ingress-nginx/index.mdatcontroller-v1.1.3·ku......
  • K8S如何强制删除namespace
    我们有时候会遇到namespace无法删除的情况是因为 finalizers属性的原因1.将cert-mamaner导出为json文件kubectlgetnscert-manager-ojson>cert.json2.编辑cert.js......
  • Kubernetes(k8s) kubectl api-versions常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • js原生xhr请求XMLHttpRequest
    创建一个请求实例,发送请求varxhr=newXMLHttpRequest();xhr.open('GET','test.php');xhr.send();监控XMLHttpRequest对象的状态变化xhr.onreadystatechange=......
  • 原生js常用操作
    元素#创建一个元素document.createElement("a")#附加到父元素的最后pararentEle.appendChild(childEle);#查找document.getElementById("aa")document.querySel......
  • 【微信小程序】小程序原生代码生成海报[转]
    官方文档https://github.com/Kujiale-Mobile/Painter  目录结构(亲测有效) 海报【微信小程序】小程序原生代码生成海报==>https://blog.csdn.net/weixin_422321......
  • Windows11下安装k8s
    一、Docker下载1、基于DockerDesktop安装即可下载地址 2、开启①、开启Hyper-V(Windows10比较容易,本文基于Windows11)  ②、安装WSL2内核(Windows上运行Linux,......