首页 理论教育 微服务运维实战:设置Swarm集群和代理

微服务运维实战:设置Swarm集群和代理

时间:2023-11-06 理论教育 版权反馈
【摘要】:现在使用的配置(几乎)与第12章中探索的配置相同,即在Amazon Web Services中创建和管理一个Docker Swarm集群。继续使用vfarcic/cloud-providing代码库。现在使用的Packer配置在terraform/aws-full/packer-ubuntu-docker-compose.json中。来自shell provisioner的命令将把上传的文件移动到正确的目录,给予它正确的权限,并重新启动docker服务。唯一的区别是ExecStart中的-H tcp://0.0.0.0:2375。默认情况下,Docker Engine不允许远程连接。在讨论状态之前,剩下的唯一的事情就是运行docker-flow-proxy和docker-flow-swarm-listener服务。

微服务运维实战:设置Swarm集群和代理

我们将使用Packer(https://www.packer.io/)和Terraform(https://www.terraform.io/)在AWS中创建一个Swarm集群。现在使用的配置(几乎)与第12章中探索的配置相同,即在Amazon Web Services(AWS)中创建和管理一个Docker Swarm集群。稍后,当遇到更复杂的场景时,我们将对其进行扩展。

本章中的所有命令都可以在13-volumes.sh(https://gist.github.com/ vfarcic/338e8f2baf2f0c9aa1ebd70daac31899)中找到。

继续使用vfarcic/cloud-providing(https://github.com/vfarcic/cloud-provisioning)代码库。它包含帮助我们解决问题的配置和脚本。你已经把它克隆了。为了安全起见,我们将拉取最新版本:

Packer和Terraform的配置在terraform/aws-full目录(https://github.com/vfarcic/ cloud-provisioning/tree/master/terraform/aws-full):

现在将定义几个环境变量,这些变量将为Packer提供与AWS一起工作所需的信息:

请以实际值替换[…]。如果丢失了密钥并忘记了如何创建密钥,请参阅第12章,在Amazon Web Services中创建和管理Docker Swarm集群。

我们已经准备好创建将在本章中使用的第一个镜像。现在使用的Packer配置在terraform/aws-full/packer-ubuntu-docker-compose.json(https://github.com/vfarcic/ cloud-provisioning/blob/master/terraform/aws-full/packer-ubuntu-docker-compose.json)中。它几乎与之前使用的一样,所以这里只会讨论相关的差异,代码如下:

文件provisioner将docker.service文件复制到VM中。来自shell provisioner的命令将把上传的文件移动到正确的目录,给予它正确的权限,并重新启动docker服务。

文件docker.service(https://github.com/vfarcic/cloud-provisioning/blob/master/ terraform/aws-full/docker.service)的内容如下:

Docker服务的配置几乎与默认配置相同。唯一的区别是ExecStart中的-H tcp://0.0.0.0:2375。

默认情况下,Docker Engine不允许远程连接。如果其配置保持不变,则不能从一台服务器向另一台服务器发送命令。通过添加-H tcp://0.0.0.0:2375,可以告诉Docker接受来自任何地址0.0.0.0的请求。通常情况下,这将是一个很大的安全风险。但是,默认情况下,所有AWS端口都是关闭的。稍后,我们将只对属于同一安全组的服务器打开端口2375。因此,只要在一个服务器内,就可以控制任何Docker Engine。正如你很快就会看到的,这将在下面的许多例子中派上用场。

让我们构建在packer-ubuntu-docker-compose.json中定义的AMI:

现在,可以把注意力转向创建集群的Terraform。我们将复制之前创建的SSH密钥devops21.pem,并声明一些允许Terraform访问AWS账户的环境变量:(www.xing528.com)

Terraform希望环境变量以TF_VAR作为前缀,因此必须创建新的变量,尽管它们的值与Packer使用的值相同。环境变量KEY_PATH的值只是一个例子。你可能会把它保存在别的地方。如果是这样,请将值更改为正确的路径。

最后一个命令过滤packer-ubuntu-docker.log,并将AMI ID存储为环境变量TF_VAR_swarm_ami_id。

现在可以创建一个Swarm群集。三个虚拟机应该足够下面的练习,所以我们只创建manager。由于这些命令与前面几章中执行的命令相同,因此将跳过解释并运行它们:

创建第一个服务器并初始化Swarm集群。稍后获取其中一个manager的令牌和IP,并使用该数据创建和添加另外两个节点。

为了安全起见,我们将登录一个manager并列出构成集群的节点:

输出如下(为简洁起见,移除了ID):

Worker在哪

我们没有创建任何worker节点。原因很简单。对于本章的练习,三个节点就足够了。这不会妨碍你在组织中开始使用类似的群集设置时添加worker节点。

若要添加worker节点,请执行以下命令:

如果输出为1.2.3.4,则应该在浏览器中打开http://1.2.3.4/jenkins。

快要完成任务了。在讨论状态之前,剩下的唯一的事情就是运行docker-flow-proxy和docker-flow-swarm-listener服务。因为已经多次创建了这样的服务,所以不需要解释,可以通过部署vfarcic/docker-flow-proxy/docker-composestack.yml栈(https://github.com/vfarcic/docker-flow-proxy/blob/master/docker-compose-stack.yml)来加速这个过程:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈