1. 概述
在华为泰山200K
鲲鹏920
的服务器+麒麟v10 sp2
的服务器上部署Ceph
- 目的: 完成部署,可以正常提供服务
2. 环境
组件 | 版本 | 备注 |
---|---|---|
服务器 | Huawei TaiShan 200K (Model 2280K) | |
操作系统 | Kylin-Server-10-SP2 | |
内核 | 4.19.90-24.4.v2101.ky10.aarch64 | |
Ceph版本 | 14.2.21 |
3. 术语
- kolla: docker镜像管理项目,始于OpenStack部署,通过docker python sdk 和 Dockerfile模板来构建镜像
- kolla-build: 镜像构建工具,功能包括模板渲染,镜像管理等
- kolla-ansible: OpenStack部署工具,通过容器部署OpenStack等服务,也可以部署Ceph服务
4. 国产化失败历程
麒麟v10自带python3版本为3.7.9, 而centos8自带版本为3.6,导致了需要包都会有冲突
先说下适配尝试过程,ceph的国产化适配主要有如下方式
- 麒麟v10自带源中有ceph包,版本为12.2.11 – rados进程启动即crash,无法使用
- 自行编译安装 – 14版本以前的需要改较多spec和cmake, 14版本之后的可操作,但仍有依赖包需解决
- cephadm安装 – 依赖包的依赖包有强依赖python36,与系统自带的3.7冲突
- kolla安装 – train 版本自带ceph版本为12.2.11在kunpen-920cpu上运行有crc bug
- rook安装 – 没有尝试
原则上优先级按上面顺序,因为生产用容器会增大维护难度,最后成功的是kolla安装,先记录下失败过程
4.1. 编译
最开始编译 14.2.21, 由于python版本的问题,尝试修改 ceph.sepc
文件还是没编过去,所以使用了 15.2.16
编译,编译步骤参照 在银河麒麟V10下编译ceph 15.2.13 编译成功了 但是由于有部分包依赖冲突,还是无法使用,例如
ceph-mgr-modules-core-2 依赖 python3-cherrypy 这个包在网上没有找到 python3.7版本的,所以 ceph-mgr装不下去,这里解决方式是在 ceph.spec中注释如下包,安装完成之后用pip安装
205:BuildRequires: python%{python3_version_nodots}-bcrypt
210:BuildRequires: python%{python3_pkgversion}-bcrypt
212:BuildRequires: python%{python3_pkgversion}-pecan
217:BuildRequires: python%{python3_version_nodots}-six
220:BuildRequires: python%{python3_pkgversion}-six
502:Requires: python%{python3_version_nodots}-six
504:Requires: python%{python3_pkgversion}-six
592:Requires: python%{python3_version_nodots}-bcrypt
598:Requires: python%{python3_pkgversion}-bcrypt
599:Requires: python%{python3_pkgversion}-pecan
注释掉之后的没有再试了,编译能成功,但不确定后面会不会又其他包冲突,如果有按照这样解决即可
cephadm遇到的问题也一样,cephadm是ceph编译出来的一个包,解决方式和上面一样
4.2. kolla安装
此时OpenStack已使用kolla安装成功,Ceph也是可以通过kolla安装的,文档参照 ceph in kolla
4.2.1. crc bug
安装完之后ms一直crc校验错误,尝试关掉ceph的crc校验,但是关掉以后仍会校验,查到最后是一个是一个bug bug排查和描述参照 ceph-crc-failed-at-Kunpeng920 这个bug是在 12.2.13修的,但kolla镜像自带的是12.2.11, 所以升级即可解决
4.2.2. 重新编译kolla镜像
镜像构建参考 管理2000+Docker镜像,Kolla是如何做到的 我这里用的debian,由于debian的源中带的ceph版本就是12.2.11,构建的时候没有添加其他ceph源所以构建出来的还是旧版本,构建全程比较慢,所以在原有镜像 debian-source-ceph-base上进行修改,生成新的镜像,步骤大概记录下 (ceph-base镜像也可以直接从这里下载 https://hub.docker.com/layers/223355790/shoery/debian-binary-ceph-base/9.4.0/images/sha256-c2b928bdac02a34d4db9bc6df745a7dc05949f5777994720706c1fb4f8d5ea05?context=repo)
- docker run用源镜像启动容器
- 增加ceph源 参照ceph官网
- 安装14.2.21版本的ceph
- ceph
- ceph-common
- ceph-mgr
- ceph-osd
- ceph-mds
- ceph-radosgw
- nfs-ganesha
- nfs-ganesha-ceph
- 安装完成之后 docker commit命令打包成新的镜像
docker commit 0dce5383904d kolla/debian-binary-ceph-base:9.4.0
- 根据kolla中的dockerfile 重新编写dockerfile 打包新的 ceph 各个组件的包
.
├── base
│ └── Dockerfile
├── mds
│ └── Dockerfile
├── mon
│ ├── Dockerfile
│ ├── extend_start.sh
│ └── fetch_ceph_keys.py
├── osd
│ ├── Dockerfile
│ └── extend_start.sh
└── rgw
├── Dockerfile
└── extend_start.sh
extend_start
和 fetch_ceph_keys.py
取自kolla项目 Dockerfile 也参考自 kolla 但 kolla 里面是jinja2模板,所以我们需要把模板转化成渲染后的,例如
FROM {{ namespace }}/{{ image_prefix }}ceph-base:{{ tag }}
LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
{% block ceph_mon_header %}{% endblock %}
COPY fetch_ceph_keys.py /usr/bin/
COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/bin/fetch_ceph_keys.py
{% block ceph_mon_footer %}{% endblock %}
{% block footer %}{% endblock %}
FROM kolla/debian-binary-ceph-base:9.4.0
COPY fetch_ceph_keys.py /usr/bin/
COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/bin/fetch_ceph_keys.py
CMD ["kolla_start"]
具体的Dockerfile在最附录1: Dockerfile
4.2.3. 编译玩使用 kolla-ansible项目安装即可
一般比较顺利
4.2.4. debug 小技巧
- 服务没启动的,docker logs查看日志处理
- docker logs没有日志的可能是打镜像的时候少了启动命令
CMD ["kolla_start"]
- 其他ceph服务问题,查看日志,如果没部署上去可以尝试参考官网手动部署
- ceph没反应可以调整 debug_ms 等级,一般1就够了
部署ceph时如果public网络/cluster网络有vip则在ceph.conf中需配置, kolla中配置 /etc/kolla/config/ceph.conf
部署时会发到各个服务目录
[global]
# 由于之前crc校验错误跨节点比较明显,所以先使用了1节点,但升级后不存在这个问题,可以部署多节点的
osd pool default size = 1
osd pool default min size = 1
[mon.172.16.10.10]
host = 172.16.10.10
addr = 172.16.10.10
4.2.5. ceph -s
(virtualenv) [root@kunpeng-con01 noarch]# docker exec ceph_mon ceph -s
cluster:
id: 9835b376-3cf3-4358-b8fe-0224a58c0630
health: HEALTH_WARN
6 pool(s) have no replicas configured
application not enabled on 1 pool(s)
services:
mon: 1 daemons, quorum 172.16.10.10 (age 3h)
mgr: kunpeng-con01(active, since 4h)
mds: cephfs:1 {0=kunpeng-con01=up:active}
osd: 1 osds: 1 up (since 3h), 1 in (since 4h)
rgw: 1 daemon active (radosgw.gateway)
task status:
scrub status:
mds.kunpeng-con01: idle
data:
pools: 6 pools, 144 pgs
objects: 209 objects, 3.4 KiB
usage: 1.6 GiB used, 1.4 TiB / 1.4 TiB avail
pgs: 144 active+clean
5. 参考
- 在银河麒麟V10下编译ceph 15.2.13
- ceph in kolla
- ceph-crc-failed-at-Kunpeng920
- 管理2000+Docker镜像,Kolla是如何做到的
- kolla
- kolla-ansible
- ceph doc
6. 附录
6.1. 附录1: Dockerfile
需要提前把 kolla_extend_start fetch_ceph_keys.py 拷贝到上面目录树下的目录,然后把Dockerfile放到对应目录 执行
docker build . -t kolla/debian-binary-ceph-base:train-aarch64
命令即可,如果没有Dockerfile例如nfs 则直接给予ceph-base打标签即可docker tag kolla/debian-binary-ceph-base:train-aarch64 kolla/debian-binary-ceph-nfs:train-aarch64
- kolla/debian-binary-ceph-base:train-aarch64
FROM kolla/debian-binary-ceph-base:train-aarch64
COPY fetch_ceph_keys.py /usr/bin/
COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/bin/fetch_ceph_keys.py
- mds
这个直接使用ceph-base换个标签即可
docker tag kolla/debian-binary-ceph-base:train-aarch64 kolla/debian-binary-ceph-mds:train-aarch64
- mon
FROM kolla/debian-binary-ceph-base:train-aarch64
COPY fetch_ceph_keys.py /usr/bin/
COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/bin/fetch_ceph_keys.py
CMD ["kolla_start"]
- osd
FROM kolla/debian-binary-ceph-base:train-aarch64
COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN chmod 755 /usr/local/bin/kolla_extend_start
CMD ["kolla_start"]
- rgw
FROM kolla/debian-binary-ceph-base:9.4.0
COPY extend_start.sh /usr/local/bin/kolla_extend_start
RUN chmod 755 /usr/local/bin/kolla_extend_start
CMD ["kolla_start"]