Ceph国产化

Posted by elrond on May 29, 2022

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_startfetch_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. 参考

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"]