DC/OS 搭建/生产部署测试

写在前面

容器相关技术有利于应用隔离与高效部署。以最广为人知的Docker开始,到来自Google的Kubernetes(k8s),以及Apache Mesos等,都是容器、微服务乃至云计算技术的当红代表。

其中,Apache Mesos作为来自UCB的云计算级别的分布式基础架构,从数据中心资源抽象、持久弹性扩展、工作负载调度等多个方面成为容器领域较为底层的技术(Spark最初也来自于Mesos)。Mesos可以在基础设施上提供弹性的应用服务,包括但不限于Docker容器编排、CI/CD、Spark、Kafka,甚至是运行Kubernetes。

对于开发者而言,Docker便能满足大部分应用开发和部署的需求;对于普通开发团队而言,为了提供专门用于Docker Container Orchestration(容器编排)与公有云融合的相关服务,Kubernetes则更为适合;对于需求较为复杂的开发团队或是企业来说,一个较可靠且能适应更多场景的分布式操作系统则更为友好。来自Mesosphere的DC/OS(The Datacenter Operating System)便可以看作Mesos的绝佳发行版。

DC/OS 组件

目前笔者负责管理的实验室主要面临传统裸机虚拟化(VMware vSphere)带来的诸多瓶颈,例如资源利用率低、实例迁移困难、平台部署过于耗时、服务不够灵活等。通过在裸机虚拟化基础上构建DC/OS,希望能改善现状。

下面对DC/OS 1.12开源版本做快速的生产部署测试,内容仅供参考。更多内容请参考官方文档:
https://docs.mesosphere.com/1.12/installing/production/

测试平台

  • 三台虚拟机,OS均使用CentOS 7(官方仅提供CentOS/RHEL之文档支持)。配置如下:
角色 主机名 配置 IP地址
Bootstrap dcos-bootstrap 2c, 10GB, 60GB 192.168.83.59
Master dcos-master 24c 32GB 180GB 192.168.83.60
Agent dcos-agent 24c 16GB 180GB 192.168.83.61

*其中Bootstrap主要负责安装和升级,性能无需过高

  • 官方建议配置如下:
    • Bootstrap: 2c, 16GB, 60GB
    • Master: 最低1个, 4c, 32GB, 120GB; 推荐3-5个, 4c, 32GB, 120GB(SSD或RAID更佳)
    • Agent: 最低1个, 2c, 16GB, 60GB; 推荐6+个, 2c, 16GB, 60GB
  • 各角色示意图:
    角色示意图

过程概览

  • 准备工作
    • 配置与创建虚拟机实例(略)
    • 所有实例上执行
      • 关闭防火墙并禁止开机启动
      • 关闭SELINUX
      • hosts设置
    • 所有实例上安装软件
      • Docker
      • NTP
      • ifconfig (net-tools)
    • Bootstrap实例上执行
      • 下载官方安装脚本
      • 安装Nginx (Docker)
    • Master与Agent实例上执行
      • 安装解压缩工具
      • 添加nogroup docker用户组
      • 区域语言设置
      • 重启
  • 安装过程
    • Bootstrap实例上执行
      • 创建配置目录与IP检测脚本
      • 定义安装配置文件
      • 执行安装脚本
      • 启动Nginx镜像
    • Master实例上执行
      • 新建安装临时目录
      • 从Bootstrap实例中下载安装脚本
      • 执行安装脚本
    • Agent实例上执行
      • 新建安装临时目录
      • 从Bootstrap实例中下载安装脚本
      • 执行安装脚本
  • 后续过程
    • 检查分布式状态
    • 进入DC/OS控制台
    • 其他可选配置项

详细过程

  • 准备工作
    • 配置与创建虚拟机实例(略)
      注意主机名尽量使用小写且与后续hosts对应;
      因为当前版本尚且不支持回滚卸载:

      To remove DC/OS, you must completely reimage the operating system on your nodes. Uninstalling will be supported in future releases. For more information, see DCOS_OSS-250 and DCOS_OSS-192.

      为了避免因安装失败造成麻烦,建议在各实例上执行安装脚本前创建各实例的快照。(创建快照需要额外硬盘空间,请酌情预留)
      如果因故还原快照后,请先重启虚拟机并确保NTP已同步并再试。

    • 所有实例上执行

      • 关闭防火墙和DNSmasq并禁止开机启动
        sudo systemctl stop firewalld && sudo systemctl disable firewalld
        sudo systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service
        
      • 关闭SELINUX
        配置文件中enforcing改为disabled
        vim /etc/selinux/config
        
      • hosts设置
        vim /etc/hosts
        
        按照如下格式。
        192.168.83.59 dcos-bootstrap.idc.com dcos-bootstrap
        192.168.83.60 dcos-master.idc.com dcos-master
        192.168.83.61 dcos-agent.idc.com docs-agent
        
    • 所有实例上安装软件

      • Docker
        官方声明新版本的Docker存在稳定性问题。建议安装CentOS内置源中的1.13版本Docker。

        A recently discovered bug in Docker 17.x’s handling of cgroups kernel memory controller (kmem) causes instability for the entire system when the kmem accounting feature is activated. Customers may notice tasks or commands getting stuck indefinitely and kernel-related error messages in the system logs. Mesosphere DC/OS customers and community members who utilize RedHat or CentOS as their base operating systems are strongly advised to install and use RedHat’s fork of Docker 1.13. This fork of Docker does not require an RHN subscription.

        sudo yum remove docker-ce # 若安装了新版本,予以删除
        sudo yum -y install docker
        sudo systemctl start docker && systemctl enable docker
        
      • NTP

        生产环境建议搭建本地NTP校时服务器,此处略过。

        sudo yum -y install ntp
        

        修改配置文件,添加时间服务器。

        sudo vim /etc/ntp.conf
        
        ...
        server time1.aliyun.com # 删除原有项。若有本地NTP服务器,此处写本地NTP服务器地址
        ...
        

        检查是否已同步远程服务器,设置开机启动。

        sudo systemctl start ntpd
        nptstat
        sudo systemctl enable ntpd
        
      • ifconfig (net-tools)

        sudo yum -y install net-tools
        
    • Bootstrap实例上执行

      • 下载官方安装脚本
        cd ~
        wget https://downloads.dcos.io/dcos/stable/dcos_generate_config.sh
        
      • 安装Nginx (Docker)
        sudo docker pull nginx
        
    • Master与Agent实例上执行

      • 安装解压缩工具
        sudo yum install -y tar xz unzip curl ipset
        
      • 添加nogroup docker用户组
        sudo groupadd nogroup && sudo groupadd docker
        
      • 区域语言设置
        localectl set-locale LANG=en_US.utf8
        
      • 重启
        sudo reboot 0
        
  • 安装过程
    • Bootstrap实例上执行
      • 创建配置目录与IP检测脚本

        mkdir -p genconf
        cd genconf
        vim ip-detect
        

        脚本内容如下,(注意右边)注意修改实际网卡名。

        #!/usr/bin/env bash
        set -o nounset -o errexit
        export PATH=/usr/sbin:/usr/bin:$PATH
        echo $(ip addr show eth0 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
        
      • 定义安装配置文件
        创建配置文件。

        vim config.yaml
        

        下面是官方开源版配置模版(笔者添加了agent_list),按需增删改即可。(相对路径指的是相对于安装脚本IP检测脚本的位置)
        更多详见:https://docs.mesosphere.com/1.12/installing/production/deploying-dcos/configuration/examples/

        bootstrap_url: http://<bootstrap_ip>:80
        cluster_name: <cluster-name>
        exhibitor_storage_backend: static
        master_discovery: static
        ip_detect_public_filename: <relative-path-to-ip-script>
        master_list:
        - <master-private-ip-1>
        - <master-private-ip-2>
        - <master-private-ip-3>
        agent_list:
        - <agent-private-ip-1>
        - <agent-private-ip-2>
        - <agent-private-ip-3>
        resolvers:
        - 169.254.169.253
        use_proxy: 'true'
        http_proxy: http://<user>:<pass>@<proxy_host>:<http_proxy_port>
        https_proxy: https://<user>:<pass>@<proxy_host>:<https_proxy_port>
        no_proxy:
        - 'foo.bar.com'
        - '.baz.com'
        

        另外官方也有对ipv6配置项的说明,我们添加enable_ipv6项并设置其为false即可。

        NOTE: Due to a cluster configuration issue with overlay networks, we recommend setting enable_ipv6 to false in config.yaml when upgrading or configuring a new cluster. If you have already upgraded to DC/OS 1.12.x without configuring enable_ipv6 or if config.yaml file is set to true, then do not add new nodes.

      • 执行安装脚本
        记得创建实例快照!执行如下命令:

        cd ..
        sudo bash dcos_generate_config.sh
        
      • 启动Nginx镜像
        替换<your-port>为Bootstrap实例对外端口。

        sudo docker run -d -p <your-port>:80 -v $PWD/genconf/serve:/usr/share/nginx/html:ro nginx
        
    • Master实例上执行
      • 新建安装临时目录
        mkdir /tmp/dcos && cd /tmp/dcos
        
      • 从Bootstrap实例(的Docker镜像中)下载安装脚本
        替换相应值为Bootstrap实例IP和端口
        curl -O http://<bootstrap-ip>:<your_port>/dcos_install.sh
        
      • 执行安装脚本
        记得创建实例快照!执行如下命令:
        sudo bash dcos_install.sh master
        
    • Agent实例上执行
      • 新建安装临时目录
        mkdir /tmp/dcos && cd /tmp/dcos
        
      • 从Bootstrap实例中下载安装脚本
        替换相应值为Bootstrap实例IP和端口
        curl -O http://<bootstrap-ip>:<your_port>/dcos_install.sh
        
      • 执行安装脚本
        记得创建实例快照!执行如下命令:
        sudo bash dcos_install.sh slave_public
        
        注意此处的slave_public参数表示采用公共agent模式安装。与私有相比主要差在是否允许集群外访问。若需设置为私有则可使用slave参数
  • 后续过程
    • 检查分布式状态
      浏览器访问http://<master-ip>:8181/exhibitor/v1/ui/index.html,检查各Master实例是否完成安装(绿色即完成)。
      ZooKeeper Exhibitor
    • 进入DC/OS控制台
      浏览器访问Master实例的IP,便可进入控制台。


      DC/OS Login

      登陆后,可进入仪表盘。


      DC/OS Dashboard

      Agent节点也已被识别了。
      DS/OS Nodes
    • 其他可选配置项
      请参考官方文档。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容

  • 从事容器方面工作的朋友可能已经听说过DC/OS,往往大家误解DC/OS就是marathon + mesos,其实D...
    Alukar阅读 1,282评论 0 1
  • 概述 这篇文章主要介绍DC/OS集群从1.10升级到1.11,升级的时候需要保证集群上的应用都是正在运行状态,也就...
    Carltony阅读 380评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • 刷微博的时候,突然看到一条微博说用了以下头像的基本上就是渣男/渣女没错了。 其中有一条评论中哥哥(张国荣)也中枪了...
    想当你的树洞阅读 1,000评论 3 2
  • 鄰居(1) 剛搬來的時候 看見一個男人 坐在走廊上唃嗩吶 後來知道他還養蜂 院子的牆邊倒扣著幾只木桶 仔細看有小蜜...
    木頭3世阅读 313评论 0 0