使用Docker Stack部署应用( 四 )

payment_gateway:image: dockersamples/atseasampleshopapp_payment_gatewaysecrets:- source: staging_tokentarget: payment_tokennetworks:- paymentdeploy:update_config:failure_action: rollbackplacement:constraints:- 'node.role == worker'- 'node.labels.pcidss == yes'除了部署约束node.label之外,其余配置项在前面都已经出现过了 。通过docker node update命令可以自定义节点标签,并添加到Swarm集群的指定节点 。因此,node.label配置只适用于Swarm集群中指定的节点上(不能用于单独的容器或者不属于Swarm集群的容器之上) 。
在本例中,payment_gateway服务被要求只能运行在符合PCI DSS(支付卡行业标准,译者注)标准的节点之上 。为了使其生效,读者可以将某个自定义节点标签应用到Swarm集群中符合要求的节点之上 。本书在搭建应用部署实验环境的时候完成了该操作 。
因为当前服务定义了两个部署约束,所以服务副本只会部署在两个约束条件均满足的节点之上,即具备pcidss=yes节点标签的worker节点 。
关于Stack文件的分析到这里就结束了,目前对于应用需求应该有了较好的理解 。前文中提到,Stack文件是应用文档化的重要部分之一 。读者已经了解该应用包含5个服务、3个网络以及4个密钥 。此外读者还知道了每个服务都会连接到哪个网络、有哪些端口需要发布、应用会使用到哪些镜像以及哪些服务需要在特定的节点上发布 。
下面开始部署 。
14.2.3 部署应用在部署应用之前,有几个前置处理需要完成 。

  • Swarm模式:应用将采用Docker Stack部署,而Stack依赖Swarm模式 。
  • 标签:某个Swarm worker节点需要自定义标签 。
  • 密钥:应用所需的密钥需要在部署前创建完成 。
1.搭建应用实验环境在本节中会完成基于Linux的三节点Swarm集群搭建,同时能满足上面应用的全部前置依赖 。完成之后,实验环境如图14.4所示 。
使用Docker Stack部署应用

文章插图
 
图14.4 示例环境
接下来内容分为3个步骤 。
(1)创建新的Swarm 。
(2)添加节点标签 。
(3)创建密钥 。
首先创建新的三节点Swarm集群 。
(1)初始化Swarm 。
在读者期望成为Swarm管理节点的机器上,运行下面的命令 。
$ docker swarm initSwarm initialized: current node (lhma...w4nn) is now a manager.<Snip>(2)添加工作节点 。
复制前面输出中出现的docker swarm join命令 。将复制内容粘贴到工作节点上并运行 。
//Worker 1 (wrk-1)wrk-1$ docker swarm join --token SWMTKN-1-2hl6...-...3lqg 172.31.40.192:2377This node joined a swarm as a worker.//Worker 2 (wrk-2)wrk-2$ docker swarm join --token SWMTKN-1-2hl6...-...3lqg 172.31.40.192:2377This node joined a swarm as a worker.(3)确认当前Swarm由一个管理节点和两个工作节点构成 。在管理节点中运行下面的命令 。
$ docker node lsIDHOSTNAMESTATUSAVAILABILITYMANAGER STATUSlhm...4nn *mgr-1ReadyActiveLeaderb74...gz3wrk-1ReadyActiveo9x...um8wrk-2ReadyActiveSwarm集群目前就绪 。
payment_gateway服务配置了部署约束,限制该服务只能运行在有pcidss=yes标签的工作节点之上 。本步骤中将在wrk-1上添加该节点标签 。
在现实世界中,添加该标签之前必须将某个Docker节点按PCI规范进行标准化 。但是,这只是一个实验环境,所以就暂且跳过这一过程,直接将标签添加到wrk-1节点 。
在Swarm管理节点运行下面的命令 。
(1)添加节点标签到wrk-1 。
$ docker node update --label-add pcidss=yes wrk-1Node标签只在Swarm集群之内生效 。
(2)确认节点标签 。
$ docker node inspect wrk-1[{"ID": "b74rzajmrimfv7hood6l4lgz3","Version": {"Index": 27},"CreatedAt": "2018-01-25T10:35:18.146831621Z","UpdatedAt": "2018-01-25T10:47:57.189021202Z","Spec": {"Labels": {"pcidss": "yes"},<Snip>wrk-1工作节点现在已经配置完成,所以该节点可以运行payment_gateway服务副本了 。
应用定义了4个密钥,这些都需要在应用部署前创建 。
  • postgress_password 。
  • staging_token 。
  • revprox_cert 。
  • revprox_key 。
在管理节点运行下面的命令,来创建这些密钥 。
(1)创建新的键值对 。
密钥中有3个是需要加密key的 。在本步骤中会创建加密key,下一步会将加密key放到Docker密钥文件当中 。
$ openssl req -newkey rsa:4096 -nodes -sha256-keyout domain.key -x509 -days 365 -out domain.crt


推荐阅读