目录
准备工作
一、安装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是一个用于操作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: admin
user:
as-user-extra: {}
client-certificate-data: #admin证书
client-key-data: #私钥
#上下文
contexts:
- context:
cluster: k8sprod
user: admin
name: admin
#设置默认上下文
current-context: admin
可以看到,配置文件中主要包含三部分:
文件配置完成后,可以使用 kubectl cluster-info
查看是否可以正常操作集群。配置文件中可以指定多个集群、多个用户、多个上下文,方便对k8s集群的统一管理,迅速切换。
4、hosts文件配置 与K8S集群master的域名映射
5、验证是否链接到K8S集群
常用kubectl命令:检查集群节点,及服务健康状态:
kubectl get node :
kubectl get cs
参考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。
Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。
Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-windows
注意:此方法仅适用于 Windows 10 操作系统专业版、企业版、教育版和部分家庭版!
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使用
参考 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.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.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.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有那些方法呢? 至少有三种:
不管哪一种方式, 在物理上的其实是一样, 加入了抽象, 方便了管理. 以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 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
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形式存在
可以通过修改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.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