目录

准备工作

一、安装kubectl

二:win10 安装Docker Desktop for Windows(非必须)

三、Harbor

知识补充:

1、Ceph mgr和mon

2:Ceph 中的CephFS、RBD、RGW各自的适用场景和优缺点

3、K8S的概念

4、rook的概念

5、LInux命令补充

部署参考


准备工作

说明:本文是在K8s上使用rook搭建Ceph集群,过程中使用到了Harbor私有仓库,原因是集群不能上外网,先把ceph镜像下载上传到内网Harbor,再从Harbor拉取镜像。

一、安装kubectl

kubectl是一个用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能。

安装步骤:

1、下载windows版本的kubectl   地址参考官网:https://kubernetes.io/docs/tasks/tools/install-kubectl/  ,嗯慢的一批,翻墙下吧~

2、配置kubectl环境变量,

3、配置Config文件  ,一定要在此目录下C:\Users\lixp\.kube  ,其中lixp为你自己的用户名

apiVersion: v1
kind: Config
preferences: {}#集群
clusters:
- cluster:certificate-authority-data: #CA证书server: #api server地址name: k8sprod#用户
users:
- name: adminuser:as-user-extra: {}client-certificate-data: #admin证书client-key-data: #私钥#上下文
contexts:
- context:cluster: k8sproduser: adminname: admin#设置默认上下文
current-context: admin

 可以看到,配置文件中主要包含三部分:

  • clusters:指定CA证书和api server地址
  • users:集群用户,可以使用证书或者用户名、密码的方式登录
  • contexts:上下文,绑定用户与集群,可以设置默认使用的context

  文件配置完成后,可以使用 kubectl cluster-info 查看是否可以正常操作集群。配置文件中可以指定多个集群、多个用户、多个上下文,方便对k8s集群的统一管理,迅速切换。

4、hosts文件配置 与K8S集群master的域名映射

 5、验证是否链接到K8S集群

常用kubectl命令:检查集群节点,及服务健康状态:

kubectl get node :
kubectl get cs

二:win10 安装Docker Desktop for Windows(非必须)

参考Windows Docker 安装

WSL2安装

问题篇:WSL 和 VMware。你怎么选择(附 wsl 安装步骤)

原因是K8S服务器下载ceph镜像太慢了,从自己本地使用docker 拉取ceph镜像,然后上传到单位的私有仓库,K8S集群再从私库拉取镜像。  本地上传镜像到私库-------》k8s再从私库拉取镜像

Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。

Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。

因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。

在 Windows 上部署 Docker 的方法都是先安装一个虚拟机,并在安装 Linux 系统的的虚拟机中运行 Docker。

  • Win10 系统下载Docker Desktop

Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。

Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-windows

注意:此方法仅适用于 Windows 10 操作系统专业版、企业版、教育版和部分家庭版!

  • 开启Hyper-V

Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。这是 Docker Desktop for Windows 所使用的虚拟机。

但是,这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V!

第二种方式:直接在Ubuntu上安装Docker,不适用Docker Desktop

参考:https://blog.csdn.net/b9567/article/details/105027440/

https://www.runoob.com/docker/ubuntu-docker-install.html

三、Harbor

harbor的安装和简单使用

Harbor使用

四、搭建教程

参考 kubernetes部署rook+ceph存储系统

一:安装过程

1、集群节点信息 10.75.254.50 k8s-master 不使用 10.75.254.58 k8s-node8 rook安装节点,命令执行节点,当作master 10.75.254.59 k8s-node9 10.75.254.60 k8s-node10

2、添加新磁盘 rook使用存储方式 rook默认使用所有节点的所有资源,rook operator自动在所有节点上启动OSD设备,Rook会用如下标准监控并发现可用设备: 设备没有分区 设备没有格式化的文件系统 3、准备工作 yum install redhat-lsb -y lsb_release -a yum -y install lvm2 modprobe rbd

4、先拉取ceph所需images,并将镜像做tag

各个节点均拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/vinc-auto/ceph:v1.2.6 docker pull registry.cn-hangzhou.aliyuncs.com/vinc-auto/ceph:v14.2.8 docker pull registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-node-driver-registrar:v1.2.0 docker pull registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-provisioner:v1.4.0 docker pull registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-attacher:v1.2.0 docker pull registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-snapshotter:v1.2.2 docker pull registry.cn-hangzhou.aliyuncs.com/vinc-auto/cephcsi:v1.2.2

需要手动将镜像做tag

docker tag registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-node-driver-registrar:v1.2.0 quay.io/k8scsi/csi-node-driver-registrar:v1.2.0 docker tag registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-provisioner:v1.4.0 quay.io/k8scsi/csi-provisioner:v1.4.0 docker tag registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-attacher:v1.2.0 quay.io/k8scsi/csi-attacher:v1.2.0 docker tag registry.cn-hangzhou.aliyuncs.com/vinc-auto/csi-snapshotter:v1.2.2 quay.io/k8scsi/csi-snapshotter:v1.2.2 docker tag registry.cn-hangzhou.aliyuncs.com/vinc-auto/cephcsi:v1.2.2 quay.io/cephcsi/cephcsi:v1.2.2

5、主节点(k8s-node8)上安装rook ,本文使用1.5版本rook。 官网下载rook,上传到node8节点

6、安装ceph集群(master上) common.yml 、operator.yml不需要修改,直接创建安装。

进入ceph配置文件目录

cd rook/cluster/examples/kubernetes/ceph/

运行commom.yml

kubectl apply -f common.yaml # 或者 kubectl create -f common.yaml

运行operator.yaml

kubectl apply -f operator.yaml # 或者 kubectl create -f operator.yaml

查看创建状态,各节点分别一个rook-discover状态running,一个rook-ceph-operator状态running

[root@k8s-master ceph]# kubectl -n rook-ceph get pod -o wide

二:补充知识

docker上传镜像到单位Harbor 打标签 docker tag c8562eaf9d81 harbor.10.75.254.49.nip.io/mirror/mysql 上传 docker push harbor.10.75.254.49.nip.io/mirror/mysql

知识补充:

1、Ceph mgr和mon

1.1 mon

mon会监控ceph集群中OSD空间使用情况

Ceph的MON的主要作用是维持集群的主副本映射图。 Ceph的MON还提供了身份验证和日志记录服务。

1.2 mgr

ceph luminous版本中新增加了一个组件: Ceph Manager Daemon,简称ceph-mgr。 该组件的主要作用是分担和扩展monitor的部分功能,减轻monitor的负担,让更好地管理ceph存储系统。

ceph-mgr 目前的主要功能是把集群的一些指标暴露给外界使用。监控是什么东西呢?举个例子,例如用户访问网站 5xx 了,那么监控就是这么一个系统:采集网站 5xx 的个数,存起来,然后在 5xx 多的时候通过报警短信报给开发,然后为开发解决该问题提供其他信息(例如日志,指标图表)。所以监控系统是一个数据系统,包含采集,存储,分析(包含报警),可视化,这几个部分。

1.3 各种概念

OSD:直接连接每一个集群节点的物理磁盘或者是目录。集群的副本数、高可用性和容错性。
MON:集群监控,所有集群的节点都会向Mon汇报,记录了集群的拓扑以及数据存储位置的信息。
MDS:元数据服务器,负责跟踪文件层次结构并存储ceph元数据。
RGW:restful API接口。
MGR:提供额外的监控和界面。

2:Ceph 中的CephFS、RBD、RGW各自的适用场景和优缺点

2.1 三种存储类型-块存储、文件存储、对象存储

三种存储类型-块存储

典型设备:磁盘阵列,硬盘

主要是将裸磁盘空间映射给主机使用的。

优点:

• 通过Raid与LVM等手段,对数据提供了保护。

• 多块廉价的硬盘组合起来,提高容量。

• 多块磁盘组合出来的逻辑盘,提升读写效率。

缺点:

• 采用SAN架构组网时,光纤交换机,造价成本高。

• 主机之间无法共享数据。

使用场景:

• docker容器、虚拟机磁盘存储分配。

• 日志存储。

• 文件存储。

• …

 三种存储类型-文件存储

典型设备:FTP、NFS服务器

为了克服块存储文件无法共享的问题,所以有了文件存储。

在服务器上架设FTP与NFS服务,就是文件存储。

优点:

• 造价低,随便一台机器就可以了。

• 方便文件共享。

缺点:

• 读写速率低。

• 传输速率慢。

使用场景:

• 日志存储。

• 有目录结构的文件存储。

• …

 三种存储类型-对象存储

典型设备:内置大容量硬盘的分布式服务器(swift, s3)

多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能。

优点:

• 具备块存储的读写高速。

• 具备文件存储的共享等特性。

使用场景:(适合更新变动较少的数据)

• 图片存储。

• 视频存储。

总结:由于rbd只能挂载在一个node上,对于k8s来说,一个服务有多个pod,任意调度,这样的话rbd似乎是不适合k8s的。

k8s对ceph rbd模式不支持ReadWriteMany(RWX),为了满足k8s的灵活性需求,采用支持多点挂载的cephfs工作模式

另一种情况:在目前我正在从事的一个产品就是这样,光有K8s还不够,考虑到”有状态服务”的需求,我们还需要给Kubernetes配一个后端存储以支持Persistent Volume机制,使得Pod在k8s的不同节点间调度迁移时,具有持久化需求的数据不会被清除,且Pod中Container无论被调度到哪个节点,始终都能挂载到同一个Volume。

个人理解:cephrbd类似一块“硬盘”,你可以挂载到你的os中,从用户程序角度和用户操作角度,它和普通硬盘无异,你既可以用程序操作它,也可以采用各种linux命令随意操作,比如cat,touch,rm, cp等;而采用cephfs(我也没有使用过),似乎你只能通过api接口来与之交互。ceph官方的这个图诠释的还不错:http://docs.ceph.com/docs/master/_images/stack.png

2.2  K8S中部署Ceph RBD还是 CephFS重点参考:

Cephfs & Ceph RBD 在k8s中的适用场景讨论及数据库性能压测

使用Ceph RBD为Kubernetes集群提供存储卷

kubernetes多节点的pod挂载同一个cephfs目录

k8s上用cephfs存储

k8s使用ceph做volume

3、K8S的概念

3.1 FlexVolume:和K8S的网络不太一样,K8S的网络只有CNI一种接口暴露方式,所有的网络实现基于第三方进行开发实现,但存储的内置实现就多达20多种,#K8S目前支持的插件类型#。但内置的往往不满足定制化的需求,所以和CNI 一样,K8S 也暴露了对外的存储接口,和CNI 一样,通过实现对应的接口方法,即可创建属于自己的存储插件,但和CNI 有点区别的是,K8S的存储插件的自定义实现方式,有FlexVolume 和 CSI 两种,两者的差别可以看做是新老功能的差异,但目前为止,FlexVolume 同样也有用武之地。

3.2 pod:是k8s的最小工作单元。每个pod包含一个或者多个容器。pod中的容器会作为一个整体被master调度到一个node上运行。

3.3 Kubernetes CRDs 自定义资源: CRDS

3.4  Volume  、PersistentVolumeClaim、PersistentVolume、StorageClass

Volume: 同docker的volume参数(-v), 在pod中, 通过spec.volumes参数指定使用哪一种存储系统(比如AzureFile, EBS, GlusterFS, CephFS等)作为backend, 然后在spec.containers.image.volumeMounts参数指定容器的挂载路径. 以ceph rbd为例, spec.volumes参数用于讲ceph rbd映射到块设备, 然后挂载在宿主机的kubelet节点的特定目录中, spec.containers.image.volumeMounts参数相当于指定了容器的-v参数.

PersistentVolumeClaim: Volume可以直接指定所挂载的存储backend, 这样会给用户暴露backend的实现细节, 比如cephfs, glusterfs的详细的挂接参数会暴露给用户.

PVC实质上在Volume和存储backend之间加入了一层抽象, PVC可以认为角色等同于存储backend的别名, spec.volumes指定PVC, 只需要给出name和readOnly选项. 而具体使用何种backend, 定制细节隐藏于PVC的资源定制中. 而且k8s可以根据PVC的参数, 自动为用户选择匹配的backend, 这里的匹配需要考虑容量, QoS和其他策略. 这种匹配的backend, 可以是预先创建好的资源(PersistentVolume); 或者是动态按需创建的资源(StorageClass). Persistent和StorageClass都封装了对底层存储backend的配备逻辑.

PersistentVolume: 静态配备的backend, 需要预先创建. 比如挂载cephfs.

StorageClass: 动态配备的backend, 按需创建. 比如ceph rbd, 根据用户需求创建新的rbd volume, 映射, 宿主机挂载, 然后容器挂载.

解释了这些概念之后, 那么k8s使用volume有那些方法呢? 至少有三种:

  1. 直接方式: Volume->backend
  2. 静态配备: Volume->PersistentVolumeClaim->PersistentVolume->Backend
  3. 动态配备: Volume->PersistentVolumeClaim->StorageClass->Backend

不管哪一种方式, 在物理上的其实是一样, 加入了抽象, 方便了管理. 以ceph为例, 提交了StorageClass和PVC后, 由kube-controller-manager调用rbd的命令完成image的创建和初始化. 而启动使用该PVC的Pod后, pod所在的主机做rbd映射, 宿主机挂载. 这些操作, 本质上, 和写脚本做, 步骤是大致类似的.

3.5 kubelet  、kubeadm、kubectl

kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。

kubeadm 用于初始化 Cluster。

kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

4、rook的概念

Rook简介
Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。目前主要专用于Cloud-Native环境的文件、块、对象存储服务。它实现了一个自我管理的、自我扩容的、自我修复的分布式存储服务。
Rook支持自动部署、启动、配置、分配(provisioning)、扩容/缩容、升级、迁移、灾难恢复、监控,以及资源管理。为了实现所有这些功能,Rook依赖底层的容器编排平台,例如 kubernetes、CoreOS 等。。
Rook 目前支持Ceph、NFS、Minio Object Store、Edegefs、Cassandra、CockroachDB 存储的搭建。
Rook机制:
Rook 提供了卷插件,来扩展了 K8S 的存储系统,使用 Kubelet 代理程序 Pod 可以挂载 Rook 管理的块设备和文件系统。
Rook Operator 负责启动并监控整个底层存储系统,例如 Ceph Pod、Ceph OSD 等,同时它还管理 CRD、对象存储、文件系统。
Rook Agent 代理部署在 K8S 每个节点上以 Pod 容器运行,每个代理 Pod 都配置一个 Flexvolume 驱动,该驱动主要用来跟 K8S 的卷控制框架集成起来,每个节点上的相关的操作,例如添加存储设备、挂载、格式化、删除存储等操作,都有该代理来完成

Rook:一个自我管理的分布式存储编排系统,它本身并不是存储系统,在存储和k8s之前搭建了一个桥梁,存储系统的搭建或者维护变得特别简单,Rook支持CSI,CSI做一些PVC的快照、PVC扩容等操作。
Operator:主要用于有状态的服务,或者用于比较复杂应用的管理。
Helm:主要用于无状态的服务,配置分离。

1)Rook Operator

Rook Operater是rook的大脑,以deployment形式存在

  • 其利用k8s的controller-runtime框架实现了CRD,并进而接受k8s创建资源的请求并创建相关资源(集群,pool,块存储服务,文件存储服务等)。
  • Rook Operate监控存储守护进程,来确保存储集群的健康。
  • 监听Rook Discovers收集到的存储磁盘设备,并创建相应服务(ceph的话就是osd了)。

可以通过修改operate.yaml中的replicas的副本数来保证Operate的高可用(默认为1)。

2)Rook Discover

Rook Discover是以daemonset形式部署在所有的存储机上的,其检测挂接到存储节点上的存储设备。把符合要求的存储设备记录下来,这样Rook Operate感知到以后就可以基于该存储设备创建相应服务了。

主要用于检测链接到存储节点上的存储设备。

3)Rook Agent

Rook Agent是以daemonset形式部署在所有的存储机上的,其处理所有的存储操作,例如挂卸载存储卷以及格式化文件系统等。

在每个存储节点上运行,用于配置一个FlexVolume插件,和k8s的存储卷进行集成。挂载网络存储、加载存储卷、格式化文件系统

 4) Ceph toolbox

默认启动的Ceph集群,是开启Ceph认证的,这样你登陆Ceph组件所在的Pod里,是没法去获取集群状态,以及执行CLI命令,这时需要部署Ceph toolbox

为ceph集群创建一个工具pod,有了该工具pod就可以在该pod里基于该ceoh集群执行ceph相关命令了

5、LInux命令补充

5.1、查看linux版本

lsb_release -a

(使用命令时提示command not found,需要安装yum install redhat-lsb -y)

5.2 日期

date

部署参考

1、kubernetes部署rook+ceph存储系统   ******

2、K8S章节2 — k8s集群中通过rook方式部署ceph

转载至https://blog.csdn.net/xuankuxiaoyao/article/details/113375696

K8s上使用rook搭建Ceph集群相关推荐

  1. k8s——kubernetes使用rook部署ceph集群

    kubernetes使用rook部署ceph集群 一:环境准备 1.安装时间服务器进行时间同步 所有的kubernetes的集群节点 [root@master ~]# yum -y install n ...

  2. K8S集群rook部署ceph集群

    前言: 之前自己用rook部署过几次ceph集群,每次部署或多或少都会遇到一些问题.有些网上还能找到解决方法,有的只能靠自己去解决,毕竟每个人部署遇到的问题不一定都相同.因为每次部署完自己也没做记录, ...

  3. CentOS 7 搭建 Ceph 集群(nautilus 版本)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  4. cephadm搭建ceph集群

    **前言:**2022年7月26日,使用cephadm进行ceph集群的搭建,使用ceph octopus版本,v15.2.16. 一.cephadm简介 Cephadm通过manager daemo ...

  5. OSX上摆脱vagrant搭建CoreOS集群

    一般我们在OSX下使用vagrant+virtualbox部署虚拟机集群做开发测试.现在我们还可以有更轻量的选择--xhyve.xhyve是FreeBSD 下的虚拟技术 bhyve (The BSD ...

  6. 在Linux上如何快速搭建MongoDB集群

    搭建MongoDB集群的一个小妙招,教你快速搭建MonggoDB集群. 一.首先确认你的集群信息 三台机器的配置服务(27018)形成复制集,分片1.2.3也在各机器都部署一个实例,它们之间形成复制集 ...

  7. 在单机上通过docker搭建redis集群试验

    一 Redis集群搭建 1.1 运行redis镜像 [root@centos-linux docker]# docker run -id --name=redis-6379 -p 6379:6379 ...

  8. 如何在两个k8s上使用kubefate部署fate集群?

    本文作者系VMware中国研发中心研发工程师 马陈龙 目标 本文将介绍如何使用kubefate在两个kubernetes集群上部署互通的两个FATE.这两个FATE可以完成各种联邦学习的任务. 完成后 ...

  9. Kubernetes 搭建 ES 集群(存储使用 local pv)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

最新文章

  1. 你连原理都还没弄明白?快来瞧瞧这份Spring面试小抄
  2. 通过自动回复机器人学Mybatis---加强版
  3. ASP编程常用的函数function集合
  4. mysql合并到区间_合并区间
  5. 快逸报表参数查询前报表不显示
  6. html游戏代码_JS实现连连看小游戏,代码很简单,思路很清晰!
  7. java 获取当前目录_java获得当前文件路径
  8. 四-1、Cadence Allegro推荐操作方式和视图命令
  9. SWT的UI线程和非UI线程
  10. Caffe训练过程:test_iter test_interval等概念
  11. drools。drools_Drools:fireAllRules,fireUntilHalt和Timers内部代码清理的详细说明
  12. Flex Failed to connect; session timed out.解决办法
  13. 【Docker】01 Docker概述
  14. 深入浅出数据分析 Head First Data Analysis Code 一书中的文档下载
  15. 树莓派做BT下载器:transmission
  16. int与byte互转
  17. Mineros 远程登录,外网登录,解决无法在家控制机器的问题
  18. Ubuntu20.04更换软件源
  19. 监督学习、无监督学习、强化学习概念
  20. DeviceIOControl详解-各个击破

热门文章

  1. 360智能摄像头 android,360智能摄像机(com.qihoo.camera) - 7.4.0.0 - 应用 - 酷安
  2. 基于MySQL协议的数据库中间层项目 Qihoo360 / Atlas
  3. GridLayout网格式布局
  4. javascript随机生成用户名的方法
  5. Linux Mint 21 Cinnamon安装RSS阅读器FluentReader(FlatPak版))
  6. libpng warning: iCCP: known incorrect sRGB profile 报错
  7. 进度网络图-单代号网络图详解
  8. BurpSuite抓https的包/BurpSuite CA证书下载
  9. 华为路由交换由浅入深系列(五):华为交换机基本操作 双工 链路聚合 STP VLAN Trunk 三层接口路由合集演示
  10. 自己攒一台SAP S4 HANA服务器硬件配置参考