【编者的话】本文为Mesosphere官方博客中发布的系列文章的第二部分,Mesosphere在本篇系列文章中分享了DC/OS的入门指南,并且做了演示。
在第一部分的指导中,我们已经学习了关于新的开源DC/OS-在Apache Mesos上用最简单的方法去开始部署容器和其他分布系统。
我们来快速回顾一下,DC/OS包含的Apache Mesos和它的所有核心功能,及以下特征:
- 一个简单的安装程序:在我们的config.yaml文件中列出你的所有节点的IP和一些配置信息,然后DC/OS将会自动引导,安装并且验证一个完整的带有所有DC/OS内容的Mesos安装。
- 群集范围的DNS服务:DC/OS使你的所有框架,应用,服务以及容器可以被发现并且通过DNS服务被寻址,这样你就可以花费较少的时候去做服务发现从而有较多的时间用在搭建更好的软件上。
- 容器编排平台:DC/OS使用Marathon去启动,监控并且维护你的应用,使得机器的故障并不会导致你的正常运行中断。
- DC/OS的软件包平台:曾经是否有过一键安装并且部署和伸缩Cassandra,Kafka,Spark或者HAproxy边缘路由的想法?在DC/OS软件包系统中这些已经全部可用并且开源了。
上篇博文结束时, 我们刚刚完成配置我们的机器,使他们可以互相通信。现在,我们要跳转到去安装DC/OS并且发布我们第一个可扩展的,具有负载均衡的容器!
开始之前,我们将选择一台主机作为引导节点。我通常使用VM来先发布,尽管目前该自引导是一个手动过程,但这一步终将变为自动的方式。
然而,该安装程序在开始之前有一个先决条件-我们需要安装Docker并正常的运行它。Docker允许我们可以有一个单独的DC/OS安装,且不论它是否是分布式。在CentOS7上安装Docker时,我们需要添加Docker的软件仓库;配置Docker的systemd文件让其使用一个用于产品部署的存储驱动;然后安装Docker engine。
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
sudo mkdir -p /etc/systemd/system/docker.service.d && sudo tee /etc/systemd/system/docker.service.d/override.conf <<- EOF
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --storage-driver=overlay -H fd://
EOF
sudo yum install -y docker-engine
sudo systemctl start docker
systemctl enable docker
想确保它是工作的?运行sudo docker ps命令;如果它没有抱怨出丢失了任何元素的信息,那么Docker就已经准备就绪了!
幸运地,DC/OS的安装程序将会为每一个运行Mesos的节点处理此次安装(外加一堆配置步骤)。
接下来,让我们下载DC/OS的安装程序到引导节点上。只需要运行以下脚本就可以了。
curl -O https://downloads.dcos.io/dcos ... ig.sh
为了使用DC/OS安装程序,我们需要提供三个文件:访问所有节点的SSH认证信息;用于判断每个节点的集群IP;一些重要设置的YAML配置文件。这些文件将会被存储在 ~/genconf 文件夹下面,这是基于你在~路径下运行DC/OS安装程序而来的假设。
你可以使用你部署的集群的SSH秘钥。我们会把该秘钥拷贝至 ~/genconf/ssh_key 。
确保运行以下命令去获得对应的文件权限。
我们将把该脚本拷贝至 ~/genconf/ip-detect 。你可以从任何AWS的VPC上是去使用:
#!/bin/sh
curl -fsSL http://169.254.169.254/latest/meta-data/local-ipv4
关于其他的环境,可以参考 DC/OS文档 。
最后,我们会写入这个存储在 ~/genconf/config.yaml 里的配置文件。这里是我使用的配置文件;你将只需要提供自己环境中的master和agent主机的IP。这些IP可以通过AWS的控制界面找到,它位于你的EC2实例下面。
- ---
agent_list:
- 10.0.0.1
- 10.0.0.2
master_list:
- 10.0.0.4
- 10.0.0.5
- 10.0.0.6
bootstrap_url: file:///opt/dcos_install_tmp
cluster_name: DCOS
exhibitor_storage_backend: static
master_discovery: static
process_timeout: 10000
resolvers:
- 169.254.169.253
ssh_port: 22
ssh_user: centos
roles: slave_public
weights: slave_public=1
可以看到我没有漏掉任何一个代理,我们稍后将会回来,由于代理需要一些额外的配置工作以便于负载均衡到互联网上。
最后,我们可以运行安装程序了。确保该程序时可执行的 chmod +x dcos_generate_config.sh 。首先,我们将用DC/OS结合刚才写进去安装镜像的三个文件来运行。
sudo ./dcos_generate_config.sh --genconf
如果这花费的时间较长请别着急-他可能花费30秒至几分钟的时间,取决于你运行的主机。一旦命令完成了,你会被告知有一个新的安装包位于 ~/genconf/serve/ 目录下。这就是我们需要拷贝到我们所有节点并本地运行的安装程序。幸运的是,DC/OS自动化了这个步骤。
接下来,我们将去准备为DC/OS的所有节点安装Docker,配置SELinux并做一系列的你肯定会忘记的事情。可以通过以下命令自动的准备所有节点
sudo ./dcos_generate_config.sh --install-prereqs
现在,我们希望所有节点被完美的配置好了,可以通过以下命令查看:
sudo ./dcos_generate_config.sh --preflight
preflight参数应该不会找到任何问题,这样我们就可以进行部署了。不用惊讶,部署的命令就如以下一样。
sudo ./dcos_generate_config.sh --deploy
为了验证部署是成功的,我们会运行postflight参数的检查,就如以下一样简单:
sudo ./dcos_generate_config.sh --postflight
现在就可以进行DC/OS的安装工作了!
我们需要通过浏览器访问其中的一台主节点去登录到DC/OS上。请记住你的集群IP,这可以通过引导节点上的 ~/genconf/config.yaml 配置文件查询。然后,你可以通过EC2的仪表板找到该节点的公有IP,可以点击一个master节点,然后查看description标签的右边列的第二行找到该IP。
由于我们已经将IP添加到了security group里,你应该可以通过浏览器访问主节点的公有IP,然后会被定向到DC/OS的登录页面。
你最先的登录将会成为该集群的第一个管理员账号。我喜欢通过我的GitHub认证方式登录。一旦你登录过后,其他用户可以被简单的添加近来。
现在,你可以看到你的Mesos集群在哼唱着-比手动安装28个部件更容易。
让我们启动一个集群上的容器。进入Marathon服务,然后点击并打开控制面板。我们将启动一个博客平台,Ghost。点击新添加一个名为my-blog的应用。
接下来我们会添加名为ghost的Docker镜像,然后使用桥接网络模式。
我们需要把容器的2368端口暴露出来分配给主机的任何端口(默认Ghost的通信端口)。
最后我们会添加一个基于博客根路径的健康检查。
等待,直到你能看见my-blog健康的运行在MarathonUI上。
在这个时候,我们已经管理了关于启动一个由Mesos提供的可扩展的,可靠的集群,并且它比原来更加的简便。但是我之前承诺我们会把应用暴露到互联网上,而且依然没有安装负载均衡器。
还记得我们在上次节点里还有哪些没配置么?是时候转到我们的第一个负载均衡服务了。让我们通过安装预先需求来开始它吧。在引导节点的 ~/genconf/config.yaml 配置文件上添加最终的代理的节点的IP。这一次,我们只用以下命令
sudo ./dcos_generate_config.sh --install-prereqs
sudo ./dcos_generate_config.sh --preflight
你可以忽略现有代理和主控的错误-DC/OS只是告诉你已经装好了,然后你可能不希望安装到位。
为了让这个新的节点伴随着正确的配置信息成为负载均衡代理(当然了,他也可以让其他容器作为宿主机来用,如果有空间的话),我们需要使用手动安装步骤。可以通过拷贝引导节点的 ~/genconf/serve/ 文件夹下面的内容到新的节点的 /opt/dcos_install_tmp/ 上。
如果你需要帮助来实现这一点,试用以下的命令。首先,在引导节点上,运行:
scp -r -i genconf/ssh_key genconf/serve $LAST_NODE_IP:~
然后,在最后的节点上:
sudo mkdir /opt/dcos_install_tmp
sudo cp serve/* /opt/dcos_install_tmp/
最后,我们可以运行安装程序在最后的节点上:
cd /opt/dcos_install_tmp/
sudo ./dcos_install.sh slave_public
我们在做拷贝文件,因为DC/OS暂时还不会通过CLI传递参数到 dcos_install.sh 里。
通过在引导节点上运行 sudo ./dcos_generate_config.sh --postflight 命令来验证安装成功是好措施。
现在我们来到简单的部分。在DC/OS的Universe标签栏上搜索marathon-lb,然后安装。
为了更好的服务我们的应用程序在互联网上的80端口。我们简单的返回到Marathon这个应用并编辑它的配置。首先,我们将添加这个标签,这样负载均衡器可以对外部暴露该容器。你可以通过点击Labels菜单,然后添加“HAPROXY_GROUP:external”标签。
配置该服务端口将会被用于负载均衡上,这一次我们来转到JSON模式。可以通过右上角的开关去切换。然后,只要添加portMappings段落的servicePort字段为80。
现在,如果你访问最后一个节点的公有IP,你将会看见我们的博客系统上线了!这也是为什么这显得太酷了:
- 你配置的每个节点就像slave_public这样会被运行HAProxy的负载均衡器的。
- 一旦有新的容器启动或者崩溃,如果它有我在上面的Marathon提及的元数据,每个负载均衡将会有机会去推送它并且以毫秒级别的单位去显示最新的变化。
这种反应,基于容器推送的负载均衡通常需要一系列的对于人才和技术的投资。
当然,许多服务不希望被外部暴露。如果你定义了一个为80或者443端口的servicePort,marathon-lb将会发布他们。按照惯例servicePort端口在10000-10100之间意味着内部服务,这样你就可以轻松适应您现有的Docker应用程序网络并让其拥有迅速的负载平衡和发现服务,而这些,都是免费的。
在此时,你应该已经看见了用DC/OS的Mesos是多么的简单。我们安装了DC/OS;开启了一个容器;通过DC/OS包管理系统为Mesos安装了一个软件包;然后连接到了一个高性能负载均衡和服务发现的解决方案中。
其实还有关于DC/OS很多的东西,而我们刚刚做的仅仅是一个开始。这里是一些关于下一步你可以做的:
-安装DC/OS命令行:如果你和我一样偏向于用命令行。所有的DC/OS的分布功能可以通过dcos里面的 命令行接口 来试用,包括集群里的容器排错!
-安装数据库:DC/OS于其他容器编排技术的一个主要的优势是它可以管理高性能的数据库,这样可以本地存储数据。为什么不安装Cassandra?它只需要在包管理系统上点击一下鼠标,参考此 教程 。
-将DC/OS转至生产环境:通过这些教程去学习将你的 负载均衡 节点连接至公有DNS并且为丢失的代理和主节点做自动灾难恢复。
记住,你可以在DC/OS的 官方网站 上获取任何你需要的额外信息,这位于 documentation 菜单,并且可以通过它的 GitHub项目 组织来获取。敬请关注该系列的第三部分来学习在DC/OS上运行现有应用,例如Cassandra和KairosDB。
原文链接: The Mesosphere guide to getting started with DC/OS:Part2 (翻译:薛开成)