暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CurveAdm Playbook 使用指南

OpenCurve 2023-06-28
252

CurveAdm Playbook 介绍

Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易主导自研和开源的高性能、易运维、云原生的分布式存储系统。
Playbook 是由 Curve 团队为 CurveAdm 设计的一个类似于 Ansible 的扩展插件。通过该插件可以很容易的为 CurveAdm 项目扩展支持各类运维操作,以及部署依赖的第三方组件。使用 Playbook 可以方便的在多台机器上执行你编写的脚本并获得执行结果,自定义脚本极大地扩展了 CurveAdm 的易用性和灵活性。
下面就以实际的例子介绍 curveadm playbook
 的用法。

例一:使用 CurveAdm Playbook 执行脚本

管理员需要导入需要操作的主机信息才能执行操作,相应的信息保存在 hosts.yaml
 
文件中:
    global:
    user: curve
    ssh_port: 22
    private_key_file: /home/curve/.ssh/id_rsa


    hosts:
    - host: server-host1
    hostname: 10.0.1.1
    - host: server-host2
    hostname: 10.0.1.2
    - host: server-host3
    hostname: 10.0.1.3
    使用以下命令导入主机:
      curveadm hosts commit hosts.yaml
      使用 CurveAdm Playbook 可以获取所有主机的 hostname
        curveadm playbook test.sh


        ------
        TOTAL: 3 hosts


        --- server-host1 [SUCCESS]
        server-host1


        --- server-host2 [SUCCESS]
        server-host2


        --- client-curve3 [SUCCESS]
        server-host3
        脚本 test.sh
         
        的内容如下:
          hostname

          例二:使用 CurveAdm Playbook 执行带参数的脚本
          导入需要操作的主机信息,保存在 hosts.yaml
           
          文件中:
            global:
            user: curve
            ssh_port: 22
            private_key_file: /home/curve/.ssh/id_rsa


            hosts:
            - host: server-host1
            hostname: 10.0.1.1
            - host: server-host2
            labels:
            - client
            hostname: 10.0.1.2
            - host: server-host3
            hostname: 10.0.1.3
            使用以下命令导入主机:
              curveadm hosts commit hosts.yaml
              脚本 test.sh
               的内容如下:
                ls $1
                使用 CurveAdm Playbook 可以执行脚本 test.sh
                ,使用参数 -l client
                可以指定在 label 为 client 的机器上执行。
                  curveadm playbook -l client test.sh test


                  ------
                  TOTAL: 1 hosts


                  --- server-host2 [SUCCESS]
                  test


                  例三:使用 CurveAdm Playbook 部署 memcached 集群

                  下面以部署 memcached
                   为例,介绍 curveadm playbook
                   的使用方法,下面所使用到的所有文件可以从 
                  memcached 中获取。
                  memcached: https://github.com/opencurve/curveadm/tree/master/playbook/memcached
                  导入主机
                  导入需要操作的主机信息,保存在 hosts.yaml
                   
                  文件中:
                    global:
                    user: curve
                    ssh_port: 22
                    private_key_file: home/curve/.ssh/id_rsa


                    hosts:
                    - host: server-host1
                    hostname: 10.0.1.1
                    labels:
                    - memcached
                    envs:
                    - IMAGE=memcached:1.6.17
                    - LISTEN=10.0.1.1
                    - PORT=11211
                    - USER=root
                    - MEMORY_LIMIT=32768 # item memory in megabytes
                    - MAX_ITEM_SIZE=8m # adjusts max item size (default: 1m, min: 1k, max: 1024m)
                    - EXT_PATH=/mnt/memcachefile/cachefile:1024G
                    - EXT_WBUF_SIZE=8 # size in megabytes of page write buffers.
                    - EXT_ITEM_AGE=1 # store items idle at least this long (seconds, default: no age limit)
                    - host: server-host2
                    hostname: 10.0.1.2
                    labels:
                    - memcached
                    envs:
                    - IMAGE=memcached:1.6.17
                    - LISTEN=10.0.1.2
                    - PORT=11211
                    - USER=root
                    - MEMORY_LIMIT=32768 # item memory in megabytes
                    - MAX_ITEM_SIZE=8m # adjusts max item size (default: 1m, min: 1k, max: 1024m)
                    - EXT_PATH=/mnt/memcachefile/cachefile:1024G
                    - EXT_WBUF_SIZE=8 # size in megabytes of page write buffers.
                    - EXT_ITEM_AGE=1 # store items idle at least this long (seconds, default: no age limit)
                    - host: server-host3
                    hostname: 10.0.1.3
                    labels:
                    - memcached
                    envs:
                    - IMAGE=memcached:1.6.17
                    - LISTEN=10.0.1.3
                    - PORT=11211
                    - USER=root
                    - MEMORY_LIMIT=32768 # item memory in megabytes
                    - MAX_ITEM_SIZE=8m # adjusts max item size (default: 1m, min: 1k, max: 1024m)
                    - EXT_PATH=/mnt/memcachefile/cachefile:1024G
                    - EXT_WBUF_SIZE=8 # size in megabytes of page write buffers.
                    - EXT_ITEM_AGE=1 # store items idle at least this long (seconds, default: no age limit)
                    然后导入主机:
                      curveadm hosts commit hosts.yaml
                      下面介绍一下 hosts.yaml
                       
                      中各个部分的作用。
                      global
                      其中 global
                      部分记录 ssh
                      使用的端口、用户、私钥等信息。
                      hosts
                      hosts
                       记录了要部署服务的机器的信息:
                        - host: server-host1
                        hostname: 10.0.1.1
                        labels:
                        - memcached
                        envs:
                        - IMAGE=memcached:1.6.17
                        - LISTEN=10.0.1.1
                        - PORT=11211
                        - USER=root
                        - MEMORY_LIMIT=32768 # item memory in megabytes
                        - MAX_ITEM_SIZE=8m # adjusts max item size (default: 1m, min: 1k, max: 1024m)
                        - EXT_PATH=/mnt/memcachefile/cachefile:1024G
                        - EXT_WBUF_SIZE=8 # size in megabytes of page write buffers.
                        - EXT_ITEM_AGE=1 # store items idle at least this long (seconds, default: no age limit)
                        host 和 hostname
                        hostname
                         
                        记录要部署机器的 ip
                        ,使用 host
                         
                        作为机器的别名,一个 host
                         
                        表示一台机器,是 curveadm playbook
                         
                        执行的基本单位。如果想在一台机器上部署多个服务,可以保持 hostname
                         
                        一致,然后使用不同的 host
                         
                        来区别。以下方式表示在机器 10.0.1.1
                         
                        上同时部署两个服务:
                          - host: server-host1
                          hostname: 10.0.1.1
                          ...
                          - host: server-host2
                          hostname: 10.0.1.1
                          lables
                          labels
                           
                          表示机器的标签,允许有多个,拥有同一个 label
                           
                          的机器表示归属于同一个组,curveadm playbook
                           
                          管理的基本单位。 curveadm playbook
                           
                          执行时使用 -l
                           或者 --label
                           指定标签来识别要执行命令的机器。如以下命令就表示在所有拥有 label memcached
                           
                          机器上执行 xxx.sh
                           
                          脚本。
                            curveadm playbook --label memcached xxx.sh
                            env
                            env
                             
                            里设置一些环境变量供后续脚本执行时使用,大部分为 memcached
                             的启动参数,这部分内容可以参考部署脚本 deploy.sh
                             
                            中的 init
                             
                            的内容。在创建镜像时指定启动的参数,在 init
                             
                            中根据需求配置对应的启动参数。如需要添加新的参数请自行修改 hosts.yaml
                             中的 env
                             
                             deploy.sh
                             
                            中的 init()
                             
                            内容。
                              ...
                              init() {
                              ${g_docker_cmd} pull ${IMAGE} >& dev/null
                              if [ "${LISTEN}" ]; then
                              g_start_args="${g_start_args} --listen=${LISTEN}"
                              fi
                              ...
                              if [ "${EXT_PATH}" ]; then
                              g_start_args="${g_start_args} --extended ext_path=/memcached/data${EXT_PATH}"
                              volume_path=(${EXT_PATH//:/ })
                              g_volume_bind="--volume ${volume_path}:/memcached/data${volume_path}"
                              fi
                              ...
                              }
                              ...
                              部署 memcached 集群
                              以上述的 hosts.yaml
                               为例,部署一个 memcached
                               
                              集群。假设已经成功导入主机,执行一下命令部署 memcached
                               
                              集群:
                                curveadm playbook -l memcached deploy.sh
                                成功部署的输出如下:
                                  TOTAL: 3 hosts


                                  --- server-host1 [SUCCESS]
                                  [✔] create container [memcached-11211]
                                  [✔] start container [memcached-11211]
                                  [✔] wait 3 seconds, check container status...
                                  CONTAINER ID NAMES STATUS
                                  2836176cdfe8 memcached-11211 Up 3 seconds


                                  --- server-host2 [SUCCESS]
                                  [✔] create container [memcached-11211]
                                  [✔] start container [memcached-11211]
                                  [✔] wait 3 seconds, check container status...
                                  CONTAINER ID NAMES STATUS
                                  65308cc2f676 memcached-11211 Up 3 seconds


                                  --- server-host3 [SUCCESS]
                                  [✔] create container [memcached-11211]
                                  [✔] start container [memcached-11211]
                                  [✔] wait 3 seconds, check container status...
                                  CONTAINER ID NAMES STATUS
                                  9f5045852974 memcached-11211 Up 3 seconds
                                  同时 deploy.sh
                                   
                                  脚本还会检查容器名称 memcached-${PORT}
                                   
                                  和端口号是否占用。容器名称已占用认为已经创建会跳过创建返回仍是成功。端口号通过 lsof -i:${port}
                                   
                                  检查是否占用,如已占用则返回失败。
                                  检查 memcached 状态
                                  使用以下命令检查 memcached
                                   的状态:
                                    curveadm playbook -l memcached status.sh
                                    输出如下:
                                      TOTAL: 3 hosts


                                      --- server-host1 [SUCCESS]
                                      CONTAINER ID NAMES STATUS
                                      2836176cdfe8 memcached-11212 Up 2 minutes
                                      memcached addr: 10.0.1.1:11211


                                      --- server-host2 [SUCCESS]
                                      CONTAINER ID NAMES STATUS
                                      65308cc2f676 memcached-11211 Up 2 minutes
                                      memcached addr: 10.0.1.2:11211


                                      --- server-host3 [SUCCESS]
                                      CONTAINER ID NAMES STATUS
                                      9f5045852974 memcached-11211 Up 2 minutes
                                      memcached addr: 10.0.1.3:11211
                                      停止 memcached 集群
                                      使用以下命令停止 memcached
                                       集群:
                                        curveadm playbook -l memcached stop.sh
                                        输出如下:
                                          TOTAL: 3 hosts


                                          --- server-host1 [SUCCESS]
                                          [✔] stop container[memcached-11211]


                                          --- server-host2 [SUCCESS]
                                          [✔] stop container[memcached-11211]


                                          --- server-host3 [SUCCESS]
                                          [✔] stop container[memcached-11211]
                                          清理 memcached 集群
                                          使用以下命令清理 memcached
                                           集群:
                                            curveadm playbook -l memcached clean.sh
                                            输出如下:
                                              TOTAL: 3 hosts


                                              --- server-host1 [SUCCESS]
                                              [✔] rm container[memcached-11211]


                                              --- server-host2 [SUCCESS]
                                              [✔] rm container[memcached-11211]


                                              --- server-host3 [SUCCESS]
                                              [✔] rm container[memcached-11211]

                                              CurveAdm Playbook 未来计划


                                              • 支持指定除 label 方式外的机器列表
                                                curveadm playbook --host 'host1:host2:host3' command.sh
                                                • host.yaml 中支持全局 env 的配置
                                                如 IMAGE
                                                 等多个主机共用的环境变量目前需要在各个主机中重复定义。此类变量可以放在全局中定义,可以精简配置文件。
                                                • 添加 CurveAdm 管理集群的环境变量
                                                自动添加一些如 __curveadm_kind__
                                                 、__curveadm_mds_addr__
                                                 、__curveadm_etcd_addr__
                                                 等相关环境变量供用户使用。
                                                • CurveAdm Playbook pull
                                                创建类似于 dockerhub 的中央仓库,使用 curveadm playbook pull
                                                 来获取指定项目的可执行的脚本和 host.yaml 模板。使用下命令就是下载 memcached 项目:
                                                  curveadm playbook pull memcached

                                                  ------ END. ------
                                                  🔥 火爆报名中:
                                                  2023 GLCC | Curve 邀你开源编程夏令营,赢万元奖金
                                                  2023 开源之夏 | Curve 邀你与中国存储软件共成长,赢万元奖金
                                                  Curve丨Google 编程之夏 2023 招募中
                                                  🔥 推荐用户案例:
                                                  Curve 文件存储在 Elasticsearch 冷热数据存储中的应用实践
                                                  扬州万方:基于申威平台的 Curve 块存储在高性能和超融合场景下的实践
                                                  创云融达:基于 Curve 块存储的超融合场景实践 
                                                  🔥 推荐硬核技术解析:
                                                  Curve 混闪之 bcache 与 open-cas 对比 
                                                  Curve 基于 SPDK target 的 iSCSI 性能优化实践

                                                  AI 场景中的 IO 行为浅析




                                                  关于 Curve 

                                                  Curve 是一款高性能、易运维、云原生的开源分布式存储系统。可应用于主流的云原生基础设施平台:对接 OpenStack 平台为云主机提供高性能块存储服务;对接 Kubernetes 为其提供 RWO、RWX 等类型的持久化存储卷;对接 PolarFS 作为云原生数据库的高性能存储底座,完美支持云原生数据库的存算分离架构。

                                                  Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。

                                                  - GitHub:https://github.com/opencurve/curve
                                                  - 官网https://opencurve.io/
                                                  - 用户论坛:https://ask.opencurve.io/
                                                  - 微信群:搜索群助手微信号 OpenCurve_bot


                                                  文章转载自OpenCurve,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                  评论