Kubernetes1.20.6安装Rook1.6
目录一、rook简介二、rook部署集群环境磁盘规划拉取项目部署Rook Operator获取镜像配置cluster部署Toolbox测试Rook比如现在我们要查看集群的状态,需要满足下面的条件才认为是健康的:rook卸载三、存储3.1 ceph块存储创建StorageClass创建pvc3.2 文件存储四、设置dashboard一、rook简介Rook是一个开源的云原生存储编排器,它提供平台,框
目录
一、rook简介
Rook是一个开源的云原生存储编排器,它提供平台,框架和对各种存储解决方案的支持,与云原生环境进行本地集成。详细介绍参考rook官方文档
二、rook部署
集群环境
主机 | IP | 角色 | 磁盘 |
---|---|---|---|
node1 | 10.168.1.11 | etcd,master,worker | sdb |
node2 | 10.168.1.12 | etcd,lb,master,worker | sdb |
node3 | 10.168.1.13 | etcd,lb,master,worker | sdb |
node4 | 10.168.1.14 | worker | sdb |
磁盘规划
node1 | node2 | node3 | node4 | |
---|---|---|---|---|
disk | sdb | sdb | sdb | sdb |
拉取项目
git clone --single-branch --branch v1.6.2 https://github.com/rook/rook.git
部署Rook Operator
cd rook/cluster/examples/kubernetes/ceph
配置operator.yaml
由于国内环境无法Pull官方镜像,所以要修改默认镜像地址,改为阿里云镜像仓库(registry.aliyuncs.com/it00021hot是我的镜像地址,利用github action每天定时同步官方镜像,所有版本的镜像都有)
#在67行下面,修改下面几个配置,改为阿里云的地址,tag不变(默认是注释掉的,先解开注释)
ROOK_CSI_CEPH_IMAGE: "registry.aliyuncs.com/it00021hot/cephcsi:v3.3.1"
ROOK_CSI_REGISTRAR_IMAGE: "registry.aliyuncs.com/it00021hot/csi-node-driver-registrar:v2.0.1"
ROOK_CSI_RESIZER_IMAGE: "registry.aliyuncs.com/it00021hot/csi-resizer:v1.0.1"
ROOK_CSI_PROVISIONER_IMAGE: "registry.aliyuncs.com/it00021hot/csi-provisioner:v2.0.4"
ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.aliyuncs.com/it00021hot/csi-snapshotter:v4.0.0"
ROOK_CSI_ATTACHER_IMAGE: "registry.aliyuncs.com/it00021hot/csi-attacher:v3.0.2"
部署operator
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
配置cluster
vi cluster.yaml
- 修改内容如下,更多配置参考官网
spec:
dashboard:
enabled: true
ssl: false # 关闭ssl
storage: # cluster level storage configuration and selection
useAllNodes: true #如果不是使用所有节点安装ceph,请设置为false
useAllDevices: false # 修改为false,只使用sdb
deviceFilter: sdb #选择磁盘sdb
- 完整配置如下:
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook-ceph
spec:
cephVersion:
image: ceph/ceph:v15.2.5
allowUnsupported: false
dataDirHostPath: /var/lib/rook
skipUpgradeChecks: false
continueUpgradeAfterChecksEvenIfNotHealthy: false
mon:
count: 3
allowMultiplePerNode: false
mgr:
modules:
- name: pg_autoscaler
enabled: true
dashboard:
enabled: true
ssl: false # 关闭ssl
monitoring:
enabled: false
rulesNamespace: rook-ceph
network:
crashCollector:
disable: false
cleanupPolicy:
confirmation: ""
sanitizeDisks:
method: quick
dataSource: zero
iteration: 1
allowUninstallWithVolumes: false
annotations:
labels:
resources:
removeOSDsIfOutAndSafeToRemove: false
storage: # cluster level storage configuration and selection
useAllNodes: true
useAllDevices: false
deviceFilter: sdb
config:
disruptionManagement:
managePodBudgets: false
osdMaintenanceTimeout: 30
pgHealthCheckTimeout: 0
manageMachineDisruptionBudgets: false
machineDisruptionBudgetNamespace: openshift-machine-api
healthCheck:
daemonHealth:
mon:
disabled: false
interval: 45s
osd:
disabled: false
interval: 60s
status:
disabled: false
interval: 60s
# Change pod liveness probe, it works for all mon,mgr,osd daemons
livenessProbe:
mon:
disabled: false
mgr:
disabled: false
osd:
disabled: false
部署cluster
kubectl create -f cluster.yaml
部署Toolbox
Rook工具箱是一个容器,其中包含用于rook调试和测试的常用工具。 该工具箱基于CentOS,因此yum可以轻松安装您选择的更多工具。
kubectl create -f toolbox.yaml
测试Rook
一旦 toolbox 的 Pod 运行成功后,我们就可以使用下面的命令进入到工具箱内部进行操作:
kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash
比如现在我们要查看集群的状态,需要满足下面的条件才认为是健康的:
- 所有 mons 应该达到法定数量
- mgr 应该是激活状态
- 至少有一个 OSD 处于激活状态
- 如果不是 HEALTH_OK 状态,则应该查看告警或者错误信息
查看rook状态:ceph status
ceph osd status
如果群集运行不正常,可以查看 Ceph 常见问题以了解更多详细信息和可能的解决方案。
rook卸载
kubectl -n rook-ceph delete cephcluster rook-ceph
kubectl delete -f operator.yaml
kubectl delete -f common.yaml
kubectl delete -f crds.yaml
所有安装rook节点执行以下命令,清理残余文件
yum install gdisk -y
export DISK="/dev/sdb"
sgdisk --zap-all $DISK
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync
blkdiscard $DISK
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %
rm -rf /dev/ceph-*
rm -rf /var/lib/rook/* /var/lib/kubelet/plugins/* /var/lib/kubelet/plugins_registry/*
三、存储
对于 Rook 暴露的三种存储类型可以查看对应的文档:
3.1 ceph块存储
创建StorageClass
kubectl create -f csi/rbd/storageclass.yaml
kubectl get sc
[root@node1 ceph]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 16s
创建pvc
kubectl create -f csi/rbd/pvc.yaml
kubectl get pvc
[root@node1 ceph]# kubectl create -f csi/rbd/pvc.yaml
persistentvolumeclaim/rbd-pvc created
[root@node1 ceph]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
rbd-pvc Bound pvc-6257dd80-a633-4bec-8cca-961b33deb7e2 1Gi RWO rook-ceph-block 4s
[root@node1 ceph]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-6257dd80-a633-4bec-8cca-961b33deb7e2 1Gi RWO Delete Bound default/rbd-pvc rook-ceph-block 5s
3.2 文件存储
默认Ceph未部署对CephFS的支持,使用如下官方提供的默认yaml可部署文件存储的filesystem。
kubectl create -f filesystem.yaml
kubectl create -f csi/cephfs/storageclass.yaml
kubectl get cephfilesystems.ceph.rook.io -n rook-ceph
kubectl get sc
[root@node1 ceph]# kubectl get cephfilesystems.ceph.rook.io -n rook-ceph
NAME ACTIVEMDS AGE
myfs 1 10s
[root@node1 ceph]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 3m
rook-cephfs rook-ceph.cephfs.csi.ceph.com Delete Immediate true 15s
四、设置dashboard
Ceph 有一个 Dashboard 工具,我们可以在上面查看集群的状态,包括总体运行状态,mgr、osd 和其他 Ceph 进程的状态,查看池和 PG 状态,以及显示守护进程的日志等等。
我们可以在上面的 cluster CRD 对象中开启 dashboard,设置dashboard.enable=true即可,这样 Rook Operator 就会启用 ceph-mgr dashboard 模块,并将创建一个 Kubernetes Service 来暴露该服务,将启用端口 7000 进行 https 访问,如果 Ceph 集群部署成功了,我们可以使用下面的命令来查看 Dashboard 的 Service:
[root@node1 ceph]# kubectl get svc -n rook-ceph
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rook-ceph-mgr ClusterIP 10.244.122.53 <none> 9283/TCP 5m
rook-ceph-mgr-dashboard ClusterIP 10.244.76.0 <none> 7000/TCP 5m
这里的 rook-ceph-mgr 服务用于报告 Prometheus metrics 指标数据的,而后面的的 rook-ceph-mgr-dashboard 服务就是我们的 Dashboard 服务,如果在集群内部我们可以通过 DNS 名称 http://rook-ceph-mgr-dashboard.rook-ceph:7000 或者 CluterIP http://10.109.8.98:7000 来进行访问,但是如果要在集群外部进行访问的话,我们就需要通过 Ingress 或者 NodePort 类型的 Service 来暴露了,为了方便测试我们这里创建一个新的 NodePort 类型的服务来访问 Dashboard,资源清单如下所示:(dashboard-external-http.yaml)
[root@node1 ceph]# cat dashboard-external-http.yaml
apiVersion: v1
kind: Service
metadata:
name: rook-ceph-mgr-dashboard-external-http
namespace: rook-ceph
labels:
app: rook-ceph-mgr
rook_cluster: rook-ceph
spec:
ports:
- name: dashboard
port: 7000
protocol: TCP
targetPort: 7000
selector:
app: rook-ceph-mgr
rook_cluster: rook-ceph
sessionAffinity: None
type: NodePort
现在我们需要通过 http://ip:port
就可以访问到 Dashboard 了。
但是在访问的时候需要我们登录才能够访问,Rook 创建了一个默认的用户 admin,并在运行 Rook 的命名空间中生成了一个名为 rook-ceph-dashboard-admin-password 的 Secret,要获取密码,可以运行以下命令:
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
用上面获得的密码和用户名 admin 就可以登录 Dashboard 了,在 Dashboard 上面可以查看到整个集群的状态:
更多推荐
所有评论(0)