宿主机:
MacBook Pro(Apple M2 Max)
VMware Fusion Player 版本 13.0.2
VM软硬件:
ubuntu 22.04.2
4核 CPU,5G 内存,40G硬盘
*每台机器分配硬件资源很重要,可以适当超过宿主机的资源量,否则会导致各种问题
IP和角色(163为master,其他为node):
192.168.19.163 k8smaster
192.168.19.161 k8sworker3
192.168.19.162 k8sworker2
192.168.19.164 k8sworker1
k8s套件:
Kubernetes v1.28.0
Docker version 24.0.5
containerd.io 1.6.22
Rook v1.12.2
1、确保各机器时间同步
配置参考:Ubuntu开启NTP时间同步_ubuntu 同步时间_现代的三流魔法使的博客-CSDN博客
2、保证每台worker节点都存在一个裸磁盘
VM关机后直接在设置中添加 “新硬盘”即可。
添加好新硬盘再启动虚拟机,执行如下 lsblk -f 即可查看到新的硬盘名称,笔者这里为 nvme0n2,注意 FSTYPE列的值为空。
保证除master外的k8sworker1、k8sworker2、k8sworker3这3台机器上都有新硬盘。
lsblk -f
3、下载Rook v1.12.2源代码
git clone --single-branch --branch v1.12.2 https://github.com/rook/rook.git
笔者这里下载后的目录是 /home/zhangzhaokun/rook,接下来的步骤都是基于这个目录来的。
4、修改Rook的CSI镜像地址
进入目录rook/deploy/examples修改Rook的CSI镜像地址,原本的地址是registry.k8s.io,由于墙的原因国内访问不了,需要统一替换为registry.lank8s.cn。
至于registry.lank8s.cn是什么可以参考文档 lank8s.cn是什么
cat operator.yaml |grep IMAGE
结果如下:
修改后的内容参考如下:
5、修改operator.yam配置
cat operator.yaml |grep DISCOVERY
ROOK_ENABLE_DISCOVERY_DAEMON: "false"
需要修改为:true
6、提前拉取rook的镜像
1)找到 operator.yaml 文件中的镜像
1.1)找"image:"格式的镜像文件:
cat operator.yaml |grep "image:"
结果如下:
1.2)找“_IMAGE"格式的镜像文件:
cat operator.yaml |grep "_IMAGE"
结果如下:
2)找到 cluster.yaml文件中的镜像
cat cluster.yaml |grep image
结果如下:
3)通过containerd提前拉取镜像
这里就要看人品了,可能有的时候速度超级慢,甚至会失败,有的时候又很快,在速度超级慢的时候切换一下网络(比如从移动切换为电信WI-FI)可能又巨快速了。
sudo ctr images pull docker.io/rook/ceph:v1.12.2
sudo ctr images pull quay.io/csiaddons/k8s-sidecar:v0.7.0
sudo ctr images pull quay.io/ceph/ceph:v17.2.6
sudo ctr images pull quay.io/cephcsi/cephcsi:v3.9.0
sudo ctr images pull registry.lank8s.cn/sig-storage/csi-node-driver-registrar:v2.8.0
sudo ctr images pull registry.lank8s.cn/sig-storage/csi-resizer:v1.8.0
sudo ctr images pull registry.lank8s.cn/sig-storage/csi-provisioner:v3.5.0
sudo ctr images pull registry.lank8s.cn/sig-storage/csi-snapshotter:v6.2.2
sudo ctr images pull registry.lank8s.cn/sig-storage/csi-attacher:v4.3.0
7、部署Rook
注意,这里是在进入目录rook/deploy/examples才执行。
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
注意,rook-ceph命名空间下的所有pod都要变为 1/1 Running才算是OK,才能进行下一步。
kubectl get pods -n rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-operator-6ff688d999-wkhcb 1/1 Running 2 (93m ago) 11h
rook-discover-86vc8 1/1 Running 1 (3h32m ago) 11h
rook-discover-b56f8 1/1 Running 1 (3h32m ago) 11h
rook-discover-djfqw 1/1 Running 2 (93m ago) 11h
8、修改cluster.yaml
第1处修改:
useAllNodes: false
useAllDevices: false
第2处修改:
指定Ceph所用到的node和磁盘名称,OSD节点就运行在这些节点上。
nodes:
- name: "k8sworker1"
devices:
- name: "nvme0n2"
- name: "k8sworker2"
devices:
- name: "nvme0n2"
- name: "k8sworker3"
devices:
- name: "nvme0n2"
9、部署Ceph集群
kubectl create -f cluster.yaml
创建完成后可以查看Pod的状态,注意osd-0/1/2,mon-a/b/c 这些POD出来的较为靠后,并且有问题的时候往往也是他们状态不正常。
查看ceph集群状态:
kubectl get cephcluster -n rook-ceph
10、安装ceph客户端工具 toolbox
kubectl apply -f toolbox.yaml
结果如下,找到rook-ceph-tools
进入命令行:
kubectl exec -it -n rook-ceph rook-ceph-tools-84f9854d5f-cr7kt -- bash
在命令行下查看ceph的状态:
ceph -s
ceph osd status
输出如下:
11、部署Dashboard
部署dashboard:
kubectl create -f dashboard-external-https.yaml
查看service:
kubectl get svc -n rook-ceph
结果如下:
可以在宿主机上访问任意一个worker即可进入dashboard:
https://192.168.19.161:31052
用户名默认是admin,密码可以通过以下代码获取:
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}"|base64 --decode && echo
结果如下:
a's?6XlvZk'75dc7*X[~