写在前面
容器相关技术有利于应用隔离与高效部署。以最广为人知的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实例中下载安装脚本
- 执行安装脚本
- 在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 inconfig.yaml
when upgrading or configuring a new cluster. If you have already upgraded to DC/OS 1.12.x without configuringenable_ipv6
or ifconfig.yaml
file is set totrue
, 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
参数
- 新建安装临时目录
- 在Bootstrap实例上执行
- 后续过程
- 检查分布式状态
浏览器访问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 - 其他可选配置项
请参考官方文档。
- 检查分布式状态
网友评论