借助容器技術,可以方便的在不同環境下部署服務,保證服務環境的一致性。docker swarm這個東西,可以方便的對容器進行編排管理。
docker swarm集群中,有manager節點與worker節點。
在工作項目中,需要在此集群新增一台機器,用於部署剛上線的服務。對於新上線的服務,需要先在這台機器上運行一段時間。穩定一段時間之后,再去除此限制,服務可以隨機部署到一台生產的機器上。
首先介紹一下在一個集群中新增work機器的操作:
登錄docker swarm的一個管理節點,運行:
[root@machine01 swarm]# docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-5krx9k52xqyv5qypt22rkmclbb0mxqbv49fvw7ru2iby7zmm4b-2xw3h4rjoz9jn7h5gjdxt3sdv 192.168.20.155:2377
運行后得到添加worker節點的命令,再登錄到新的機器上,運行上個命令產生的添加機器命令,即可完成docker swarm集群新增機器的操作。
新增節點完成之后,設置此節點標簽如下:
docker node update --label-add application=generic --label-add staging=true machine01 docker node update --label-add application=generic --label-add staging=true machine01
機器新增之后,介紹一下如何限制服務啟動時選擇的機器,有兩種方式:
方式一:
通過 --constraint參數設定啟動微服務的節點標簽,如果需要限定某個微服務只能啟動在camel機器中:
--constraint node.labels.application==generic,如果只有新增的機器的application標簽值為generic,那么通過此限制,微服務啟動時,只會在新增的機器上啟動。
方式二:
通過--placement-pref 標簽:
如果application標簽中,有些機器的值為generic,有些是special。但是staging標簽只有新的這台機器使用,那么通過如下的啟動參數:
--placement-pref spread=application --placement-pref spread=staging,就可以限制啟動在新的機器,如果新的機器掛了,那么微服務就會啟動在別的機器。
因為此命令只是表示優先選擇符合條件的機器,如果找不到,那么啟動此微服務的時候等於沒有限制。官網描述如下: