测试环境
- Ubuntu 21.10 (kernel 5.13.0-37-generic)
- Docker 20.10.14
- kubectl 1.23.5
- minikube 1.25.2
- Rook 1.8.7
准备工作
下载系统镜像
本次安装采用Ubuntu-server版本。下载镜像可以直接去国内镜像站获取,例如Ubuntu 21.10版本代码为impish,则可以去 mirrors.tuna.tsinghua.edu.cn/ubuntu-cdim… 找到对应版本,选择iso文件下载。
准备良好的网络环境
由于Kubernetes需要去k8s.gcr.io仓库拉取镜像,采用标签替换的方式目前没有找到良好的自动化方案,因此准备一个网络代理更加方便省事。
虚拟机软件
Rook官方建议在虚拟机环境下进行搭建测试。实测操作不当可能导致设备的文件系统被覆写!
安装系统
Ubuntu配置如下:
- CPU: 2 cores (minikube最低要求2核心)
- 内存: 4G (minikube最低要求2G内存)
- 硬盘: 50G (用于安装系统,可自定义)
- 新增加三块虚拟硬盘,用于创建osd,方便起见都设置为10G
虚拟机网络将采用NAT模式,安装时选择安装Openssh server,不在此时安装Docker(否则会使用snap安装docker,下一步配置时与教程不一致)
安装Docker
安装完毕系统,可以选择先执行 sudo apt update && sudo apt upgrade
更新系统及软件。
根据docker官方的教程,执行命令安装需要的部件,不过Ubuntu21.10已经安装完毕所以不需要执行这一步。
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
复制代码
下载Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
复制代码
添加至本地配置文件中
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
复制代码
安装Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
复制代码
将本机用户添加至docker
组方便使用docker命令,并在设置好后登出一次shell
sudo usermod -aG docker $USER && newgrp docker
复制代码
配置网络
首先配置Docker的网络设置
sudo mkdir -p /etc/systemd/system/docker.service.d
复制代码
创建 /etc/systemd/system/docker.service.d/http-proxy.conf
并写入如下内容
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.49.0/24,<虚拟机NAT IP段>/24"
复制代码
比如虚拟机的IP为192.168.104.x
则输入192.168.104.0/24
并且保存一份shell的设置供Kubernetes使用
export HTTP_PROXY=http://proxy.example.com:80
export HTTPS_PROXY=https://proxy.example.com:443
export NO_PROXY=localhost,127.0.0.1,192.168.49.0/24,<虚拟机NAT IP段>/24
复制代码
由于拉取镜像通常是基于HTTPS传输的,所以网络有建议去掉HTTP_PROXY的说法
安装kubectl
这步操作无需代理
在 Linux 系统中安装并设置 kubectl | Kubernetes
建议安装补全插件提高效率
安装minikube
需要注意的是在minikube start
之后就需要配置好代理
安装Rook
先配置好代理,然后执行minikube start
打开kubernetes。
克隆rook仓库
git clone --single-branch --branch v1.8.7 https://github.com/rook/rook.git
复制代码
创建rook-ceph-operator
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# 确保rook-ceph-operator在`Running`状态下再创建集群
kubectl -n rook-ceph get pod
复制代码
由于使用了Minikube,所以选择rook/deploy/examples/cluster-test.yaml
文件进行集群创建
将cluster-test.yaml
中的deviceFilter
一项注释去掉
虚拟机的硬盘分别为/dev/sda
,/dev/sdb
,/dev/sdc
,/dev/sdd
, 其中sda
为系统的文件系统, 所以需要在deviceFilter
处填上sd[^a], 以忽略创建位于sda上的osd。
运行
kubectl create -f cluster-test.yaml
复制代码
创建集群后,保证pods包含rook-ceph-mon
, rook-ceph-mgr
, 三个rook-ceph-osd
后,创建rook-ceph-toolbox检测ceph状态。
此时ceph的状态应该为HEALTH_OK。
部署对象存储
由于erasureCoded chunk需要至少三个osd,所以需要3块硬盘或者3个未格式化的分区,考虑到集群只有一个节点,所以需要把failureDomain
设置为osd
而不是host
。
运行
kubectl create -f object.yaml
复制代码
创建rgw此时部署也就完成了。