快速搭建Kubernetes高可用集群四 Rook-Ceph

一、 写作背景

近来工作需要,预将公司现有应用服务 Docker 化,并使用 Kubernetes 进行统一资源编排,现将部署过程记录一下。

Rook 是专用于 Cloud-Native 环境的文件、块、对象存储服务。它实现了一个自动管理的、自动扩容的、自动修复的分布式存储服务。Rook 支持自动部署、启动、配置、分配、扩容/缩容、升级、迁移、灾难恢复、监控以及资源管理。为了实现所有这些功能,Rook 需要依赖底层的容器编排平台,例如 kubernetes、CoreOS 等。Rook 目前支持 Ceph、NFS、Minio Object Store、Edegefs、Cassandra、CockroachDB 存储的搭建,后期会支持更多存储方案。

Ceph 是一个开源的分布式存储系统,包括对象存储、块设备、文件系统。它具有高可靠性、安装方便、管理简便、能够轻松管理海量数据。Ceph 存储集群具备了企业级存储的能力,它通过组织大量节点,节点之间靠相互通讯来复制数据、并动态地重分布数据,从而达到高可用分布式存储功能。

OSD至少3个节点,直接使用裸盘而不使用分区或者文件系统的方式性能最好。

二、 系列文章

  1. 快速搭建Kubernetes高可用集群一 基础环境初始化
  2. 快速搭建Kubernetes高可用集群二 Kubeadm 初始化集群
  3. 快速搭建Kubernetes高可用集群三 Ingress、Dashboard、Metrics-server
  4. 快速搭建Kubernetes高可用集群四 Rook-Ceph
  5. 快速搭建Kubernetes高可用集群五 Harbor
  6. 快速搭建Kubernetes高可用集群六 Prometheus
  7. 快速搭建Kubernetes高可用集群七 ELK-stack

三、 环境准备

3.1 下载项目文件

  1. 项目地址:https://github.com/rook/rook, 版本: v1.4.2
  2. 项目网站: https://rook.io/

3.2 下载 docker image

为加快访问速度,将镜像从 dock.io 等官方网站上同步到阿里云的镜像库,并设置为公开权限。使用命令为:

docker pull rook/ceph:v1.4.2
docker tag rook/ceph:v1.4.2 registry.cn-beijing.aliyuncs.com/fcu3dx/rook-ceph:v1.4.2
docker push registry.cn-beijing.aliyuncs.com/fcu3dx/rook-ceph:v1.4.2

直接执行以下命令,下载所有镜像

docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/rook-ceph:v1.4.2
docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/ceph-ceph:v15.2.4
docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/cephcsi:v3.1.0
docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/csi-node-driver-registrar:v1.2.0
docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/csi-resizer:v0.4.0
docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/csi-provisioner:v1.6.0
docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/csi-snapshotter:v2.1.1
docker pull  registry.cn-beijing.aliyuncs.com/fcu3dx/csi-attacher:v2.1.0

docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/rook-ceph:v1.4.2 rook/ceph:v1.4.2
docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/ceph-ceph:v15.2.4 ceph/ceph:v15.2.4
docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/cephcsi:v3.1.0 quay.io/cephcsi/cephcsi:v3.1.0
docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/csi-node-driver-registrar:v1.2.0 quay.io/k8scsi/csi-node-driver-registrar:v1.2.0
docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/csi-resizer:v0.4.0 quay.io/k8scsi/csi-resizer:v0.4.0
docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/csi-provisioner:v1.6.0 quay.io/k8scsi/csi-provisioner:v1.6.0
docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/csi-snapshotter:v2.1.1 quay.io/k8scsi/csi-snapshotter:v2.1.1
docker tag registry.cn-beijing.aliyuncs.com/fcu3dx/csi-attacher:v2.1.0 quay.io/k8scsi/csi-attacher:v2.1.0

docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/rook-ceph:v1.4.2
docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/ceph-ceph:v15.2.4
docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/cephcsi:v3.1.0
docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/csi-node-driver-registrar:v1.2.0
docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/csi-resizer:v0.4.0
docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/csi-provisioner:v1.6.0
docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/csi-snapshotter:v2.1.1
docker rmi registry.cn-beijing.aliyuncs.com/fcu3dx/csi-attacher:v2.1.0

3.3 添加新硬盘并识别

在集群中至少有三个节点可用,满足ceph高可用要求,我这里是3Master+6Works节点,使用6W节点即可满足使用,在这6Workers节点上和添加一块容量相同的磁盘(我的是虚拟机,添加的是虚拟磁盘),挂载到/dev/sdb,作为 OSD 盘,提供存储空间,添加完成后扫描磁盘,确保主机能识别到。

在虚拟机中,直接添加磁盘,不重启系统,使用 lsblk 没有发现新添加的磁盘,需要重新扫描一下磁盘。

# 扫描磁盘
for host in `ls /sys/class/scsi_host/`;do echo "- - - " > /sys/class/scsi_host/$host/scan; done

# 重新扫描磁盘
for scsi_device in `ls /sys/class/scsi_device/`; do echo 1 > /sys/class/scsi_device/$scsi_device/device/rescan; done
# 查看磁盘
lsblk

挂载磁盘

3.4 修改配置文件

对 cluster.yml 文件进行修改,启用一些服务

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: ceph/ceph:v15.2.4
    allowUnsupported: false
  dataDirHostPath: /var/lib/rook
  skipUpgradeChecks: false
  continueUpgradeAfterChecksEvenIfNotHealthy: false
  mon:
    count: 6
    allowMultiplePerNode: false
  mgr:
    modules:
    - name: pg_autoscaler
      enabled: true
  dashboard:
    enabled: true
    ssl: true
  monitoring:
    enabled: true
    rulesNamespace: rook-ceph
  network:
  crashCollector:
    disable: true
  cleanupPolicy:
    confirmation: ""
    sanitizeDisks:
      method: quick
      dataSource: zero
      iteration: 1
  annotations:
  labels:
  resources:
  removeOSDsIfOutAndSafeToRemove: false
    useAllNodes: true
    useAllDevices: true
    config:
  disruptionManagement:
    managePodBudgets: false
    osdMaintenanceTimeout: 30
    manageMachineDisruptionBudgets: false
    machineDisruptionBudgetNamespace: openshift-machine-api

四、 服务部署

切换项目到指定版本(因不同版本需要的镜像不同,Master 版本使用的镜像是 ceph/ceph:master,会经常变化)

git checkout -b v1.4.2

依次执行项目部署文件

# 初始化项目
kubectl apply -f /etc/kubernetes/gitlab/rook/cluster/examples/kubernetes/ceph/crds.yaml
kubectl apply -f /etc/kubernetes/gitlab/rook/cluster/examples/kubernetes/ceph/common.yaml

# 搭建操作台
kubectl apply -f /etc/kubernetes/gitlab/rook/cluster/examples/kubernetes/ceph/operator.yaml

操作台

# 搭建集群
kubectl apply -f /etc/kubernetes/gitlab/rook/cluster/examples/kubernetes/ceph/cluster.yaml

rook-ceph集群-pod

rook-ceph集群-其它

dashboard查看状态

到 worker 节点查看磁盘状态,状态如图所示,则部署成功。

磁盘状态

五、 部署 Rook toolbox 并测试

部署工具rook-ceph-tools

kubectl apply -f /etc/kubernetes/gitlab/rook/cluster/examples/kubernetes/ceph/toolbox.yaml

部署成功后,则可以操作 rook-ceph 集群

kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash

rook-ceph-tools

六 使用 dashboard

Dashboard 已经在部署集群时部署成功了,现在需要对外暴露服务,可以使用 externalloadbalanceringress 等方式。

前面已经搭建好 Ingress 故在此使用 Ingress 方式。

6.1 创建证书及 secret

  1. 证书使用 cfssl 方式创建,详见快速搭建Kubernetes高可用集群三 Ingress、Dashboard、Metrics-server的** 4.3.2 创建证书** 小节,我在之前创建证书时使用了 *.kube.uat,所以所有以 kube.uat 为后缀的域名均可使用该证书。
  2. 使用证书创建 secret
# 进入证书文件目录
cd /etc/kubernetes/pki/
# 创建证书,指定命名空间为 rook-ceph
kubectl -n rook-ceph create secret tls ceph-kube-uat-certs --key kube-uat-key.pem --cert kube-uat.pem

6.2 修改 ingress 配置文件

将 spec 部分的 host 名更改为你的域名,将 secretName 更改为上面创建的 secret

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: rook-ceph-mgr-dashboard
  namespace: rook-ceph
  annotations:
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/server-snippet: |
      proxy_ssl_verify off;
spec:
  tls:
   - hosts:
     - ceph.kube.uat
     secretName: ceph-kube-uat-certs
  rules:
  - host: ceph.kube.uat
    http:
      paths:
      - path: /
        backend:
          serviceName: rook-ceph-mgr-dashboard
          servicePort: https-dashboard

6.3 创建 Ingress

kubectl apply -f /etc/kubernetes/gitlab/rook/cluster/examples/kubernetes/ceph/dashboard-ingress-https.yaml

ceph 登录

6.4 登录 ceph dashboard

账号为 admin,需要使用命令获取登录密码,或者在 k8s 的 dashboard 里找到 rook-ceph-dashboard-password 这个证书,并查看是明码。

kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath='{.data.password}'  |  base64 --decode

ceph 首页

七、 文章引用

  1. Rook-Ceph 官方文档v1.4
  2. kubernetes部署rook+ceph存储
  3. Kubernetes 集群基于 Rook 搭建 Ceph 分布式存储系统
  4. 在k8s中使用rook-ceph

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin

文章标题:快速搭建Kubernetes高可用集群四 Rook-Ceph

字数:1.9k

本文作者:Longger

发布时间:2020-08-18, 14:36:40

最后更新:2024-11-01, 15:02:59

原始链接:https://www.longger.xin/article/8809.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

github