微信公众号:运维开发故事,作者:wanger

制作离线安装包

首先我们需要在有网的环境下缓存需要用到的deb包和docker镜像

安装docker-ce

curl -sSL https://get.daocloud.io/docker | sh
systemctl daemon-reload
systemctl restart docker
systemctl enable docker

安装cephadm

使用curl获取独立脚本的最新版本。网络不好的话可直接去GitHub复制

编辑/etc/resolv.conf文件修改nameserver为114,.114.114.114

curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
chmod +x cephadm

安装cephadm

./cephadm add-repo --release octopus
./cephadm install

引导新群集

集要引导群集,需要先创建一个目录:/etc/ceph

mkdir -p /etc/ceph

以下操作只在一台节点执行就可以,然运行该命令:ceph bootstrap

./cephadm bootstrap --mon-ip 192.168.10.2

启用ceph cli

cephadm add-repo --release octopus
cephadm install ceph-common

部署OSD

如果满足以下所有_条件_,则存储设备被视为可用:

  • 设备必须没有分区。
  • 设备不得具有任何 LVM 状态。
  • 不得安装设备。
  • 设备不能包含文件系统。
  • 设备不得包含 Ceph BlueStore OSD。
  • 设备必须大于 5 GB。

Ceph 拒绝在不可用的设备上预配 OSD。
为保证能成功添加osd,我刚才在每个node上新加了一块磁盘

从特定主机上的特定设备创建 OSD

ceph orch daemon add osd node1:/dev/sdb

安装完成后我们可以看一下它用到了哪些docker镜像
![image.png](https://img-blog.csdnimg.cn/img_convert/7e2dcdb0472ce351dbcc4d6b6bcf8f57.png#clientId=uc06053cd-1a56-4&from=paste&height=132&id=uf743179e&margin=[object Object]&name=image.png&originHeight=132&originWidth=632&originalType=binary&ratio=1&size=15111&status=done&style=none&taskId=ubef720d5-7a17-43a3-afb8-c54cbfb9528&width=632)

导出docker镜像

需要把这些镜像导出来,做成离线包

root@node1:~# docker save -o ceph.tar quay.io/ceph/ceph:v15
root@node1:~# docker save -o prometheus.tar quay.io/prometheus/prometheus:v2.18.1
root@node1:~# docker save -o grafana.tar quay.io/ceph/ceph-grafana:6.7.4
root@node1:~# docker save -o alertmanager.tar quay.io/prometheus/alertmanager:v0.20.0
root@node1:~# docker save -o node-exporter.tar quay.io/prometheus/node-exporter:v0.18.1

导出deb包

刚才我们装了docker和chrony还有cephadm,deb包会默认存放在 /var/cache/apt/archives目录下,可以把这个目录下的deb包缓存下来,新建一个文件夹,将下载的deb包拷贝到上述新建的文件夹下,并建立deb包的依赖关系

apt-get install dpkg-dev -ymkdir /offlinePackage
cp -r /var/cache/apt/archives  /offlinePackage
chmod 777 -R /offlinePackage/
dpkg-scanpackages /offlinePackage/ /dev/null |gzip >/offlinePackage/Packages.gz
tar zcvf offlinePackage.tar.gz /offlinePackage/

修改cephadm脚本

最后需要修改的是cephadm安装脚本,默认安装的时候cephadm是去网上pull镜像,但是实际生产环境是没有外网的,需要修改成直接用本地的镜像,修改_pull_image函数的cmd列表中的pull,将其修改为images。(我用的是octopus版本,其他版本基本不变)
![image.png](https://img-blog.csdnimg.cn/img_convert/f2d01e21b935caef4fd1e4ae8da4c479.png#clientId=u1111054f-123f-4&from=paste&height=393&id=ufe79f996&margin=[object Object]&name=image.png&originHeight=785&originWidth=930&originalType=binary&ratio=1&size=59628&status=done&style=none&taskId=u66255037-411b-4029-853a-7b636922be0&width=465)

开始离线部署

前提条件

Cephadm使用容器和systemd安装和管理Ceph集群,并与CLI和仪表板GUI紧密集成。

  • cephadm仅支持octopus  v15.2.0和更高版本。
  • cephadm与新的业务流程API完全集成,并完全支持新的CLI和仪表板功能来管理集群部署。
  • cephadm需要容器支持(podman或docker)和Python 3。
  • 时间同步

基础配置

这里我使用的ubuntu20.04来安装的ceph,已经内置了python3,不再单独安装,不做特殊说明三台服务器都要执行下面的步骤

配置hosts解析

cat >> /etc/hosts <<EOF
192.168.10.2 node1
192.168.10.3 node2
192.168.10.4 node3
EOF

分别在三个节点设置主机名

hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3

配置本地源

注意:offlinedeb前面有一个空格

tar zxvf offlinePackage.tar.gz -C /
mv /etc/apt/sources.list /etc/apt/sources.list.bak
vi /etc/apt/sources.list
deb file:/// offlinePackage/
apt update

安装docker

cd /offlinedeb/archives
dpkg -i containerd.io_1.4.11-1_amd64.deb
dpkg -i docker-ce-cli_5%3a20.10.10~3-0~ubuntu-focal_amd64.deb
dpkg -i docker-ce-rootless-extras_5%3a20.10.10~3-0~ubuntu-focal_amd64.deb
dpkg -i docker-ce_5%3a20.10.10~3-0~ubuntu-focal_amd64.deb
systemctl start docker
systemctl enable docker

导入docker镜像

docker load -i node-exporter.tar docker load -i alertmanager.tar
docker load -i prometheus.tar
docker load -i ceph.tar
docker load -i grafana.tar

安装cephadm

chmod +x cephadm
cp cephadm /usr/bin/
apt install cephadm --allow-unauthenticated
#如果有报错,先执行 apt --fix-broken install

引导新群集

以下操作只在一台节点执行就可以,然运行该命令:ceph bootstrap

cephadm bootstrap --mon-ip 192.168.174.128

此命令将会进行以下操作:

  • 为本地主机上的新群集创建monitor和manager守护程序。
  • 为 Ceph 群集生成新的 SSH 密钥,并将其添加到root用户的文件/root/.ssh/authorized_keys
  • 将与新群集通信所需的最小配置文件保存到 /etc/ceph/ceph.conf
  • client.admin管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring
  • 将公钥的副本写入/etc/ceph/ceph.pub

安装完成后会有一个dashboard界面
![image.png](https://img-blog.csdnimg.cn/img_convert/817f3c536220d197a09dc471082383eb.png#clientId=u1c363056-86e1-4&from=paste&height=304&id=u2eef5cc1&margin=[object Object]&name=image.png&originHeight=607&originWidth=1069&originalType=binary&ratio=1&size=47995&status=done&style=none&taskId=u870b2371-e174-4415-a3de-a2f0fdaa098&width=534.5)

![image.png](https://img-blog.csdnimg.cn/img_convert/ede1dc4d34cd3aa2735738f6adb6b970.png#clientId=u1c363056-86e1-4&from=paste&height=416&id=ud324b377&margin=[object Object]&name=image.png&originHeight=832&originWidth=1868&originalType=binary&ratio=1&size=143045&status=done&style=none&taskId=u1b76b088-0d14-4cef-88c5-c3b4979b5c0&width=934)
执行完成后我们可以查看ceph.conf已经写入了

![image.png](https://img-blog.csdnimg.cn/img_convert/1a14120d7e32110491d9237dd3fb7881.png#clientId=u1c363056-86e1-4&from=paste&height=81&id=u10975894&margin=[object Object]&name=image.png&originHeight=161&originWidth=593&originalType=binary&ratio=1&size=15766&status=done&style=none&taskId=u44296649-a98a-46c6-82bd-7e659f8543e&width=296.5)

安装ceph

cd /offlinePackage/archives
dpkg -i *.deb #执行此命令会将我们之前缓存的包都安装完

添加主机到集群

将公钥添加到新主机

ssh-copy-id -f -i /etc/ceph/ceph.pub node2
ssh-copy-id -f -i /etc/ceph/ceph.pub node3

告诉Ceph,新节点是集群的一部分

[root@localhost ~]# ceph orch host add node2
Added host 'node2'
[root@localhost ~]# ceph orch host add node3
Added host 'node3'

添加主机会自动扩展mon和mgr节点

![image.png](https://img-blog.csdnimg.cn/img_convert/9da20a408d5dccf514a0553991aae6f8.png#height=180&id=qmx4w&margin=[object Object]&name=image.png&originHeight=360&originWidth=535&originalType=binary&ratio=1&size=21711&status=done&style=none&width=267.5)

部署OSD

可以用以下命令显示集群中的存储设备清单

ceph orch device ls

如果满足以下所有_条件_,则存储设备被视为可用:

  • 设备必须没有分区。
  • 设备不得具有任何 LVM 状态。
  • 不得安装设备。
  • 设备不能包含文件系统。
  • 设备不得包含 Ceph BlueStore OSD。
  • 设备必须大于 5 GB。

Ceph 拒绝在不可用的设备上预配 OSD。

从特定主机上的特定设备创建 OSD

ceph orch daemon add osd node1:/dev/sdb
ceph orch daemon add osd node1:/dev/sdc
ceph orch daemon add osd node1:/dev/sdd
ceph orch daemon add osd node1:/dev/sde
ceph orch daemon add osd node2:/dev/sdd
ceph orch daemon add osd node2:/dev/sdb
ceph orch daemon add osd node2:/dev/sdc
ceph orch daemon add osd node2:/dev/sde
ceph orch daemon add osd node3:/dev/sdb
ceph orch daemon add osd node3:/dev/sdc
ceph orch daemon add osd node3:/dev/sdd
ceph orch daemon add osd node3:/dev/sde

其他节点的ceph配置

libvirt的rbd存储需要在其他ceph节点上能执行ceph的命令,需要将node1的配置拷贝到node2和node3上

root@node2:~# mkdir /etc/ceph
root@node3:~# mkdir /etc/ceph
root@node1:~# cd /etc/ceph
root@node1:~# scp ceph* node2:/etc/ceph
root@node1:~# scp ceph* node3:/etc/ceph

部署MDS

使用 CephFS 文件系统需要一个或多个 MDS 守护程序。如果使用新的ceph fs卷接口来创建新文件系统,则会自动创建这些文件
部署元数据服务器:

ceph orch apply mds *<fs-name>* --placement="*<num-daemons>* [*<host1>* ...]"

CephFS 需要两个 Pools,cephfs-data 和 cephfs-metadata,分别存储文件数据和文件元数据

[root@node1 ~]# ceph osd pool create cephfs_data 64 64
[root@node1 ~]# ceph osd pool create cephfs_metadata 64 64
创建一个 CephFS, 名字为 cephfs
[root@node1 ~]# ceph fs new cephfs cephfs_metadata cephfs_data
[root@node1 ~]# ceph orch apply mds cephfs --placement="3 node1 node2 node3"
Scheduled mds.cephfs update...

![image.png](https://img-blog.csdnimg.cn/img_convert/3379838376aedf6d0bd285825828592d.png#height=239&id=DnqGk&margin=[object Object]&name=image.png&originHeight=477&originWidth=525&originalType=binary&ratio=1&size=27785&status=done&style=none&width=262.5)
验证至少有一个MDS已经进入active状态,默认情况下,ceph只支持一个活跃的MDS,其他的作为备用MDS

ceph fs status cephfs

![image.png](https://img-blog.csdnimg.cn/img_convert/eded42bc93fdfa0fc47e6025d266b3e3.png#height=119&id=MCIC9&margin=[object Object]&name=image.png&originHeight=237&originWidth=767&originalType=binary&ratio=1&size=20237&status=done&style=none&width=383.5)

部署RGW

Cephadm将radosgw部署为管理特定领域和区域的守护程序的集合,RGW是Ceph对象存储网关服务RADOS Gateway的简称,是一套基于LIBRADOS接口封装而实现的FastCGI服务,对外提供RESTful风格的对象存储数据访问和管理接口。
![image.png](https://img-blog.csdnimg.cn/img_convert/d85e9c84cf1c075913f14faaea714774.png#height=263&id=tLfeX&margin=[object Object]&name=image.png&originHeight=525&originWidth=876&originalType=binary&ratio=1&size=179010&status=done&style=none&width=438)
使用 cephadm 时,radosgw 守护程序是通过mon配置数据库而不是通过ceph.conf 或命令行配置的。如果该配置尚未就绪,则 radosgw 守护进程将使用默认设置启动(默认绑定到端口 80)。
要在node1、node2和node3上部署3个服务于myorg领域和us-east-1区域的rgw守护进程,在部署 rgw 守护进程之前,如果它们不存在,则自动创建提供的域和区域:

ceph orch apply rgw myorg cn-east-1 --placement="3 node1 node2 node3"

或者可以使用radosgw-admin命令手动创建区域、区域组和区域:

radosgw-admin realm create --rgw-realm=myorg --default
radosgw-admin zonegroup create --rgw-zonegroup=default --master --default
radosgw-admin zone create --rgw-zonegroup=default --rgw-zone=cn-east-1 --master --default
radosgw-admin period update --rgw-realm=myorg --commit

可以看到已经创建完成
![image.png](https://img-blog.csdnimg.cn/img_convert/140584cadfcceacd0a75733a7301ac10.png#height=136&id=oIrAu&margin=[object Object]&name=image.png&originHeight=272&originWidth=1096&originalType=binary&ratio=1&size=44438&status=done&style=none&width=548)

CEPH离线部署(纯内网)相关推荐

  1. 运维之-如何在纯内网,无网络的环境中代理网络到外网!超全!手把手教!!

    前言 在外出实施和部署公司的软件和系统时,有的甲方要求时纯内网环境!不给开公网,但 是自己处理软件包之间的依赖又太麻烦(一个软件包有可能会有6,7个依赖.亲身经 验).所以找到了一套可以强制代理固定软 ...

  2. Mac 系统部署Frp内网穿透服务 实现frpc shell启动脚本启动、停止

    Mac 系统部署Frp内网穿透服务 实现frpc shell启动脚本启动.停止 前言 最近疫情导致居家办公,而工作中需要用到公网地址便于调试,于是就在本机(Mac系统)配置了Frpc内网穿透. 本来想 ...

  3. zabbix纯内网环境监控服务器发送邮件报警

    Linux | zabbix | 实战篇(一步步带你到邮件报警) 一.本章环境: Zabbix3.4.8服务器OS:Centos7.6x86_64 邮件服务器OS:Windows10x86_64 邮件 ...

  4. 【云原生之Docker实战】使用Docker部署NPS内网穿透工具

    [云原生之Docker实战]使用Docker部署NPS内网穿透工具 一.NPS介绍 二.检查本地docker环境 1.检查docker服务状态 2.检查docker配置信息 3.开启IPv4 forw ...

  5. vue部署到内网和外网配置简要说明

    内网部署 Nginx基础配置 vue项目部署 图中地址nginx中的配置是 Nginx目录情况 外网部署 假设公司给你电脑内网IP:yyy.yyy.yyy.yyy:8006端口映射到外网IP:xxx. ...

  6. 纯内网环境中k8s下onlyOffice启用https

    其实本来onlyOffice启用https是个很简单的事情,参照官网配置进行启用即可.但是由于网络环境的特殊性我们只能使用自签证书来部署所有的系统服务.所以整个过程还是比较多坑需要踩. 开始时我想以往 ...

  7. 通过dns-cheater安装部署个人内网DNS域名解析服务器

    dns-cheater简介 DNS-Cheater 实现了一个功能较全面的DNS服务器,可以通过WEB端的管理界面,达到如下目的: 基本的DNS服务器,本服务器实现将通过询问上游DNS服务器来完成对规 ...

  8. verdaccio内网离线搭建npm私有仓库

    使用场景: 前端项目的编译运行开发中报下载经常出错: 项目场景:通常我们前端项目开发搭建过程中通过npm管理前端js库,新建项目或内网开发过程中经常出现环境搭建的问题,例如常见错误Failed at ...

  9. edusoho 内网部署问题(视频播放,文件上传 无法使用)

    edusoho 网络课堂 /edusoho 企业大学(企业培训版) 纯内网部署.课程视频播放 和课程上传文件 问题. 原因是: 播放器和上传的sdk是访问云端的,内网部署的话需要本地化. 注意: 1. ...

最新文章

  1. js全选 复选框的问题
  2. 关于Istio 1.1,你所不知道的细节
  3. Qt文档阅读笔记-编写应用脚本解析与实例
  4. 菜鸟Linux系列:[4]SSH免密码登陆远程服务器
  5. 【leetcode79】Single Number III
  6. NYOJ-找点(贪心)
  7. java的addattribute_Java AttributeSet.addAttributeListener方法代码示例
  8. Ubuntu 搭建SVN服务器(SVN Server)
  9. js:图片的切换(代码)
  10. 扫描图片转换成文字怎么转
  11. 【论文研读】基于对偶种群的约束多目标优化进化算法
  12. 51nod1538: 一道难题(特征多项式+多项式取模/求逆)
  13. mac解压rar文件
  14. JS 无形装逼,最为致命
  15. 使用conda时出现Solving environment: failed with initial frozen solve. Retrying with flexible solve错误
  16. 计算机科学与技术需要什么电脑配置,如果你要配置一台计算机,需要购买的硬件配置有哪些,主要技术参数是什么?...
  17. SAP学习第一篇——SAP模块介绍
  18. android xp wifi连接不上,手把手解决xp系统电脑无线网络连接不上的处理技巧
  19. 兰光bl2000_蓝光 bl2000-stb-v2电梯安全回路图纸
  20. 管理寓言:白鹤的失误

热门文章

  1. MTSC2018 测试开发大会视频公开(含 PPT)| 年度福利
  2. 一文让你搞懂 Python 的 pyc 文件
  3. 使用自定义注解加密实体中手机号码字段
  4. 如何成为月入五万的程序员,他们告诉你!
  5. 修正 SEIR传染病动力学模型应用于冠状病毒病( COVID-19) 疫情预测和评估
  6. 重磅!谷歌推出GKE Kubernetes On-Prem
  7. VMware网络配置NAT
  8. 加菲猫经典语录55条,献给热爱生活的人们
  9. JAVA位运算符的使用
  10. 小孩子语录——庆祝六一儿童节