功能概述

在整个云化应用过程中,制作镜像是最花时间也是最容易出错的一部分。因为每个应用的部署架构不同,需要调试的时间也存在差异,通常情况下,少则几个小时,多则一周左右。

本文将详细介绍 KVM 镜像的制作流程。

注意事项

在制作 KVM 镜像前期,用户需明确以下内容。

  1. 除了允许用户登录的节点之外,其它节点如有持久化数据,则必须挂载数据盘。

    • 允许用户登录的节点,即配置文件里定义 user_accesstrue 的节点。

    • 持久化数据是指与具体用户有关的数据,如 session、用户自己的数据等。如,对于数据库应用,数据库应用程序本身不是持久化数据,因为它可以无差别的重复部署而不影响服务,但用户的数据库信息、用户设置的参数、日志等是持久化数据。

  2. 云服务器里不要操作资源。如 halt 云服务器等,云平台会负责资源调度,用户只需要关注应用即可。

操作步骤

  1. 使用以下镜像创建云服务器。以下系统镜像均已经过测试。

    • Ubuntu: 12.10 64-bit (quantalx64b),13.10 64-bit (saucysrvx64b),14.04.1 LTS 64-bit (trustysrvx64c),16.04 LTS 64-bit (xenialx64)

    • CentOS: 6.4 64-bit (centos64x64b),7 64-bit (centos7x64b)

    • Debian: Wheezy 7.5 64-bit (wheezyx64g)

    • OpenSUSE: 12.3 64-bit (opensuse12x64c)

    • Fedora: 18 64-bit (fedora18x64b),20 64-bit (fedora20x64b)

    • Windows: Windows Server 2008 (win2k8r2eechsi, win2k8r2eechdc, win2k8r2seen), Windows Server 2012 (winsrv2012r2chsh)

  2. 根据实际情况安装自己的应用。

  3. 下载企业云平台提供的 APP Agent。

    根据实际情况分别下载 Linux 版本Windows 版本

  4. 解压后运行脚本程序。

    • linux 操作系统下执行命令行 ./install.sh 来运行脚本。

    • Windows 下双击 install.bat 来运行脚本。

  5. 开发一些必须的模板文件,用于监听 metadata 服务的变化从而更新自己应用的配置文件。

    • toml 文件

      文件示例

      # vi /etc/confd/conf.d/zoo.cfg.toml
        [template]
        src = "zoo.cfg.tmpl"
        dest = "/opt/zookeeper/conf/zoo.cfg"
        keys = [
          "/",
        ]
        reload_cmd = "/opt/zookeeper/bin/restart-server.sh"

      参数说明

      参数 说明

      src

      代表模板文件名。

      dest

      即应用的配置文件,这个配置文件会根据 src 模板刷新 dest 内容。

      keys

      即进程 confd 监控 metadata 服务关于该节点所在集群的信息,有变化则需更新。如果模板中需要用到某个 key 的信息,则需要监听这个 key,也可以直接监听根目录 /

      reload_cmd

      配置文件被刷新后的操作,脚本开发者自行提供脚本,如果不需要触发动作可以去掉该参数。

      其他参数

      该配置文件中可添加权限控制,详情请见 confd 文档

    • tmpl 文件

      文件示例

      # vi /etc/confd/templates/zoo.cfg.tmpl
        tickTime=2000
        initLimit=1ini0
        syncLimit=5
        dataDir=/zk_data/zookeeper
        clientPort=2181
        maxClientCnxns=1000
        {% raw %}{{range $dir := lsdir "/hosts"}}{{$sid := printf "/hosts/%s/sid" $dir}}
        {{$ip := printf "/hosts/%s/ip" $dir}}server.{{getv $sid}}={{getv $ip}}:2888:3888{{end}}{% endraw %}

      参数说明

      • tmpl 模板文件决定应用配置文件内容。confd 读取 metadata 服务来刷新这些变量的值。

      • 如此例 range 这一行是读取该节点所在集群节点的 IP 和 Server ID 信息,刷新为如下信息。

          server.1=192.168.100.2:2888:3888
          server.2=192.168.100.3:2888:3888
          server.3=192.168.100.4:2888:3888
      • 更多模板语法参见 confd 模板文档