k8s部署rook-ceph记录
我是cenos7.4的系统,错误安装了ceph17.2后,一切看上去均正常,但是就是无法挂载pv到容器上,经过查了无数资料, 确定centos7 系统安装ceph 15.2 是比较稳妥的做法。以下文件是修改过后的operator.yaml配置文件,用于rook-operator的自定义配置, 我个人对此文件只对cpu限制部门进行修改,缩小了默认请求配置,其他项目均为修改。由于容器镜像均无法正常访问
1. 部署前准备
== 此步非常重要,可以节约很多时间少踩很多坑 ==
1.1 环境信息
1.1.1 系统环境版本
名称 | 版本 |
---|---|
操作系统 | centos7.4 amd64 内核 3.10.0 |
kubenetes | v1.23.10 |
docker | 20.10.8 及 19.3.9 |
kubesphere | v3.3.2 |
1.1.2 rook-ceph版本
名称 | 版本 |
---|---|
rook | v1.9.12 |
ceph | v15.2.17 |
1.2 版本对照确认
以下4类服务或系统版本均互相有要求,不要搞错安装错误版本,如若错误安装, 问题将会非常难以定位
- os版本
- k8s版本
- ceph版本
- rook版本
- 挂载盘类型
1.2.1 os与ceph版本
链接地址: ceph版本要求
我是cenos7.4的系统,错误安装了ceph17.2后,一切看上去均正常,但是就是无法挂载pv到容器上,经过查了无数资料, 确定centos7 系统安装ceph 15.2 是比较稳妥的做法
1.2.2 rook与ceph版本
链接地址: rookv1.12-upgrades
rook最新版本1.12最低支持ceph16.2.7,因此centos7 不能选择最新版本rook
链接地址: rookv1.9-upgrades
切换到v1.9, 看到rook支持ceph v15.2版本,因此我选择rook v1.9版本进行部署安装
1.2.3 ceph与kubenetes版本
ceph版本 | k8s版本要求 |
---|---|
rook v1.12 | v1.22及以上 |
rook v1.9 | v1.17及以上 |
1.2.4 ceph与挂载硬盘
- 原始设备(没有分区或格式化的文件系统)
- 原始分区(没有格式化的文件系统)
- LVM逻辑卷(没有格式化的文件系统)
- 块模式存储类中可用的持久卷
2. 部署步骤
2.1 镜像代理服务
由于容器镜像均无法正常访问,因此推荐安装镜像代理服务,自动使用镜像代理服务拉取新创建的 Pod 中的外网容器镜像(仅限公有镜像)。
官方网站: ketches.cn/registry-proxy/
-
安装 cert-manager
如果集群中已经安装了 cert-manager,可以跳过这一步。这里提供快速安装的方式:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml # 代理地址 kubectl apply -f https://ghproxy.com/https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml
官方文档: Install cert-manager。
-
安装 registry-proxy
export LATEST=$(basename $(curl -s -w %{redirect_url} https://github.com/ketches/registry-proxy/releases/latest)) kubectl apply -f https://raw.githubusercontent.com/ketches/registry-proxy/$LATEST/deploy/manifests.yaml # 代理地址 kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/ketches/registry-proxy/$LATEST/deploy/manifests.yaml
2.2 安装rook-ceph
2.2.1 通过helm安装
先安装rook-operator , 运行正常后安装rook-cluster
2.2.1.1 安装rook-operator
以下文件是修改过后的operator.yaml配置文件,用于rook-operator的自定义配置, 我个人对此文件只对cpu限制部门进行修改,缩小了默认请求配置,其他项目均为修改
模板地址: operator.yaml
然后执行如下命令进行安装
helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace --namespace rook-ceph rook-ceph rook-release/rook-ceph -f operator.yaml
镜像代理会修改镜像地址自动从代理仓库拉取镜像
2.2.1.2 安装rook-cluster
以下文件需要根据自己的需求进行较多的自定义修改
在安装之前,检查这些值。以确认是否需要更新默认设置。
1. 如果操作符安装在其他命名空间,则必须在operatorNamespace变量中设置该命名空间。
2. 在cephClusterSpec中设置所需的设置。默认值只是一个示例,不太可能应用于您的集群。
3. 监控部分应该从cepclusterspec中删除,因为它是在helm设置中单独指定的。
4. cepphblockpools、cepphfilesystems和CephObjectStores的默认值将分别创建一个和它们相应的存储类。
5. 所有Ceph组件现在都有pod资源的默认值。生产集群中的资源可能需要根据负载进行调整。如果Ceph不应该被限制(例如测试集群),资源也可以被禁用。
模板地址: cluster.yaml
自定义修改部分:
- 修改ceph镜像版本
cephClusterSpec:
cephVersion:
image: quay.io/ceph/ceph:v15.2.17
- 关闭更新检查
cephClusterSpec:
skipUpgradeChecks: true
- dashboard关闭ssl
dashboard:
enabled: true
port: 8443
ssl: false
- 选择自定义挂载卷
修改useAllNodes和useAllDevices为false。
其中useAllNodes选项指示 Ceph 是否应该使用集群中的所有节点作为存储节点。
1. 当设置为 true 时,Ceph 将使用所有节点作为存储节点。这意味着每个节点都可以被用作存储设备的托管节点,并参与存储池和数据的管理。
2. 当设置为 false 时,只有在 storage 部分中显式定义的节点才会被用作存储节点;
useAllDevices选项指示 Ceph 是否应该使用节点上的所有可用设备作为存储设备。
1. 当设置为 true 时,Ceph 将使用节点上的所有可用设备作为存储设备。这包括硬盘、固态驱动器 (SSD) 等。
2. 当设置为 false 时,只有在 storage 部分中显式定义的设备才会被用作存储设备
此处选择node180,node181,node182三个节点的 /dev/sdc盘作为存储设备
tips: 使用kubectl get node --show-labels命令后,如kubernetes.io/hostname=node180后面的名称node180即为此处所需要的name
storage: # cluster level storage configuration and selection
useAllNodes: false
useAllDevices: false
nodes:
- name: "node180"
devices: # specific devices to use for storage can be specified for each node
- name: "sdc"
- name: "node181"
devices:
- name: "sdc"
- name: "node182"
devices:
- name: "sdc"
然后执行如下命令进行安装
helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace --namespace rook-ceph rook-ceph-cluster \
--set operatorNamespace=rook-ceph rook-release/rook-ceph-cluster -f cluster.yaml
2.3 安装ceph-tools
ceph-tools的作用是可以执行ceph命令行查询或管理ceph集群状态
2.3.1 通过k8s容器安装
配置模板链接: toolbox.yaml
- 启动toolbox
kubectl create -f deploy/examples/toolbox.yaml
- 等待toolbox下载并完成启动
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools
- toolbox启动可以执行如下命令进入控制台
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
- 使用用例
- ceph status
- ceph osd status
- ceph df
- rados df
2.3.2 通过kubectl插件安装
需要先安装krew
2.3.2.1 在线安装rook-ceph插件
由于网络环境的原因, 很难通过在线的方式进行插件的安装,因此推荐通过离线的方式安装
kubectl krew install rook-ceph
2.3.2.2 离线安装rook-ceph插件
准备文件:
- rook-ceph.yaml
使用如下yaml配置文件即可
apiVersion: krew.googlecontainertools.github.com/v1alpha2
kind: Plugin
metadata:
name: rook-ceph
spec:
version: v0.6.0
homepage: https://github.com/rook/kubectl-rook-ceph
shortDescription: Rook plugin for Ceph management
description: |
The kubectl-rook-ceph is a Krew plugin designed for Rook-Ceph. It simplifies the management, debugging, and
troubleshooting processes, while also offering valuable insights into the configuration of the Rook-Ceph clusters.
platforms:
- selector:
matchLabels:
os: linux
arch: amd64
uri: https://github.com/rook/kubectl-rook-ceph/releases/download/v0.6.0/kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz
sha256: c729e68d00b2d18493866c428a5201a71163e668a6b3a8b26fdd3e082b2140c1
bin: kubectl-rook-ceph
-
kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz
提前下载kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz包上传到服务器 -
进行插件安装
kubectl krew install --manifest rook-ceph.yaml --archive kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz
- 示意命令
kubectl rook-ceph ceph status
output:
cluster:
id: a1ac6554-4cc8-4c3b-a8a3-f17f5ec6f529
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c (age 11m)
mgr: a(active, since 10m)
mds: 1/1 daemons up, 1 hot standby
osd: 3 osds: 3 up (since 10m), 3 in (since 8d)
data:
volumes: 1/1 healthy
pools: 6 pools, 137 pgs
objects: 34 objects, 4.1 KiB
usage: 58 MiB used, 59 GiB / 59 GiB avail
pgs: 137 active+clean
io:
client: 1.2 KiB/s rd, 2 op/s rd, 0 op/s wr
2.4 验证安装
2.4.1 验证rook-ceph安装完成
通过rook-tools 如 kubectl rook-ceph ceph status 或 ceph status查看安装状态, 如果返回health: HEALTH_OK则表示安装成功
2.4.2 新建PVC及挂载验证
存储类选择ceph-filesystem或ceph-block 均可正常创建pvc及绑定自动分配的pv
启动容器可正常挂载pvc卷
至此基本完成rook-ceph部署
3. 踩坑记录
3.1 错误版本选择
第一次没有认证看版本要求,均安装最新版本,截止到挂载容器阶段没有任何问题。包括新建PVC及绑定PV也很正常,直到容器挂载存储卷无论如何都挂不上
很多错误响应我均没有进行记录,但是优先检查兼容情况是没有问题的。
推荐几个看了的网站
- rook-trobleshooting
这里有特别多的错误现象和解决定位步骤 - github-rook
github也有很多issue - ceph-csi
这个是连接ceph和容器的桥梁,也有很多问题会出现在这个组件
tobe continued…
更多推荐
所有评论(0)