zoukankan      html  css  js  c++  java
  • 基于docker部署ceph以及修改docker image

    前言

    容器和ceph的结合已经在一些生产环境当中做了尝试,容器的好处就是对运行环境的一个封装,传统的方式是集成为ISO,这个需要一定的维护量,而容器的相关操作会简单很多,也就有了一些尝试,个人觉得如果玩的转容器可以考虑,当然得懂ceph,不然两套系统在一起,问题都不知道是哪个的,就比较麻烦了

    本篇是基于之前我的填坑群里面的牛鹏举的一个问题,他的环境出现了创建osd的时候权限问题,我这边没遇到,现在实践了一遍,感觉应该是之前目录提前创建了的问题

    实践步骤

    安装docker

    yum install docker
    

    下载ceph镜像

    这个镜像是sebastien维护的,他是redhat的ceph工程师,ceph-ansible的负责人,很多一线的资料都是来自他的分享,这个是一个集成好的镜像

    docker pull ceph/daemon
    

    准备好一些目录

    mkdir -p /etc/ceph
    mkdir -p /var/lib/ceph/
    

    注意只需要做这个两个目录,不要创建子目录,docker内部有相关的操作

    创建一个mon

    sudo docker run -d --net=host  --name=mon 
    -v /etc/ceph:/etc/ceph 
    -v /var/lib/ceph/:/var/lib/ceph 
    -e MON_IP=192.168.8.106 
    -e CEPH_PUBLIC_NETWORK=192.168.0.0/16 
    ceph/daemon mon
    

    MON_IP就是宿主机的IP地址

    执行完了后

    [root@lab8106 ceph]#  docker ps -l
    CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS              PORTS               NAMES
    86ed05173432        ceph/daemon         "/entrypoint.sh mon"   About a minute ago   Up 59 seconds                           mon
    

    可以看到退出了,我们来docker logs -f mon看下日志的输出

    [root@lab8106 ceph]# docker logs -f mon
    /sbin/ip
    creating /etc/ceph/ceph.client.admin.keyring
    creating /etc/ceph/ceph.mon.keyring
    creating /var/lib/ceph/bootstrap-osd/ceph.keyring
    creating /var/lib/ceph/bootstrap-mds/ceph.keyring
    creating /var/lib/ceph/bootstrap-rgw/ceph.keyring
    monmaptool: monmap file /etc/ceph/monmap-ceph
    monmaptool: set fsid to cb5df106-25b3-4f93-9f54-baca2976a47b
    monmaptool: writing epoch 0 to /etc/ceph/monmap-ceph (1 monitors)
    creating /tmp/ceph.mon.keyring
    importing contents of /etc/ceph/ceph.client.admin.keyring into /tmp/ceph.mon.keyring
    importing contents of /var/lib/ceph/bootstrap-osd/ceph.keyring into /tmp/ceph.mon.keyring
    importing contents of /var/lib/ceph/bootstrap-mds/ceph.keyring into /tmp/ceph.mon.keyring
    importing contents of /var/lib/ceph/bootstrap-rgw/ceph.keyring into /tmp/ceph.mon.keyring
    importing contents of /etc/ceph/ceph.mon.keyring into /tmp/ceph.mon.keyring
    ceph-mon: set fsid to cb5df106-25b3-4f93-9f54-baca2976a47b
    ceph-mon: created monfs at /var/lib/ceph/mon/ceph-lab8106 for mon.lab81
    

    提示成功了

    我们看下生成的文件

    [root@lab8106 ceph]# ll /etc/ceph
    total 16
    -rw------- 1 root  root  137 Mar 14 17:53 ceph.client.admin.keyring
    -rw-r--r-- 1 root  root  285 Mar 14 17:53 ceph.conf
    -rw------- 1 64045 64045  77 Mar 14 17:53 ceph.mon.keyring
    -rw-r--r-- 1 64045 64045 187 Mar 14 17:53 monmap-ceph
    

    从这里可以看到内部的cpeh的用户的id是64045,所以在docker宿主机不要随便去给ceph权限,可能id不匹配,容器内部还是无法操作

    创建一个osd

    sudo docker run -d --net=host --name=myosd1 
    --privileged=true 
    -v /etc/ceph:/etc/ceph 
    -v /var/lib/ceph/:/var/lib/ceph 
    -v /dev/:/dev/ 
    -e OSD_DEVICE=/dev/sdb 
    ceph/daemon osd_ceph_disk
    

    如果查询日志

    docker logs -f myosd1
    

    如果执行命令

     docker exec -it mon ceph -s
    

    如果想进入容器内部

      docker exec -it mon  /bin/bash
    

    修改集群的副本数

    docker exec -it mon  ceph osd pool set rbd size 1
    

    查看集群状态

    [root@lab8106 ceph]# docker exec -it mon  ceph -s
        cluster cb5df106-25b3-4f93-9f54-baca2976a47b
         health HEALTH_WARN
                mon.lab8106 low disk space
         monmap e2: 1 mons at {lab8106=192.168.8.106:6789/0}
                election epoch 4, quorum 0 lab8106
            mgr no daemons active 
         osdmap e7: 1 osds: 1 up, 1 in
                flags sortbitwise,require_jewel_osds,require_kraken_osds
          pgmap v15: 64 pgs, 1 pools, 0 bytes data, 0 objects
                34288 kB used, 279 GB / 279 GB avail
                      64 active+clean
    

    上面的操作都很顺利,但是某些情况可能出现异常情况,或者镜像内部本身就有问题需要自己修改,这个怎么处理

    碰上问题想修改image

    我们看下我们运行的docker

    [root@lab8106 ceph]# docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    874d78ccae55        ceph/daemon         "/entrypoint.sh osd_c"   14 hours ago        Up 14 hours                             myosd1
    86ed05173432        ceph/daemon         "/entrypoint.sh mon"     15 hours ago        Up 15 hours                             mon
    

    COMMAND这里有个/entrypoint.sh

    如果存在ENTRYPOINT和CMD,那么CMD就是ENTRYPOINT的参数,如果没有ENTRYPOINT,则CMD就是默认执行指令
    也就是容器启动的时候默认是会去执行/entrypoint.sh 这个了

    我们不需要他执行这个,就需要加参数了

    [root@lab8106 ceph]# docker run -i -t --entrypoint /bin/bash ceph/daemon
    

    比如我上次做的一个操作,把ceph用户绑定到root的id

    root@9b269bf751f9:/# cat /etc/passwd|grep ceph
    ceph:x:64045:64045:Ceph storage service:/var/lib/ceph:/bin/false
    root@9b269bf751f9:/# sed -i 's/64045/0/g' /etc/passwd
    root@9b269bf751f9:/# cat /etc/passwd|grep ceph
    ceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false
    

    退出容器

    root@9b269bf751f9:/# exit
    

    查询我们最后运行的容器,修改回entrypoint我们再把容器修改提交到基础image

    [root@lab8106 ceph]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    9b269bf751f9        ceph/daemon         "/bin/bash"         2 minutes ago       Exited (0) 15 seconds ago                       angry_hawking
    
    [root@lab8106 ceph]#  docker commit 9b269bf751f9 ceph/daemon
    
    [root@lab8106 ~]# docker run -i -t --entrypoint /entrypoint.sh ceph/daemon
    [root@lab8106 ~]# docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    c2ea602c18ac        ceph/daemon         "/entrypoint.sh"    10 seconds ago      Exited (1) 7 seconds ago                       ecstatic_bartik
    
    [root@lab8106 ceph]# docker commit c2ea602c18ac ceph/daemon
    

    再次启动容器,并且检查内容,可以看到已经修改好了

    [root@lab8106 ceph]# docker run -i -t --entrypoint /bin/bash ceph/daemon
    root@65b538fdc61e:/# cat /etc/passwd|grep ceph
    ceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false
    

    如果需要做其他的改动,这样改下就行

    总结

    本篇主要是根据sebastien的镜像做的部署,并且给出一些常用的命令,以及如何进入固化的容器的内部进行修改,方便自己调试环境

    相关资料

    bootstrap-your-ceph-cluster-in-docker/

    变更记录

    Why Who When
    创建 武汉-运维-磨渣 2017-03-15
  • 相关阅读:
    c++读写MySQL
    感叹游戏行业的飞速发展
    和真正的程序员在一起是怎样的体验
    程序媛是怎样找老公的
    IO和socket编程
    郁金香搜索引擎的方案
    实现一个自己的搜索引擎的初始规划
    JVM知识在离线数据中的运用
    看Lucene源码必须知道的基本规则和算法
    看Lucene源码必须知道的基本概念
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575412.html
Copyright © 2011-2022 走看看