最近在做swarm环境,针对swarm的优点这里就不多说了,因为我们要部署到生产环境,资源比较少而且要求压力不是特别多,最主要的是避免浪费,选择了swarm,但是部署后,准备服务上线呢,发现在swarm中部署的nginx服务,在用户请求的时候日志中都是swarm的负载均衡地址,原本在容器中也做了proxy_set_header的配置,如果在容器中请求,是正常的,但是swarm环境就无法获取。难道就因为最后一步抛弃swarm吗?不能,最少服务是可用的,考虑了一下原本想把nginx放到集群外边,这样是解决了nginx的问题,但是发布的时候和原来就有区别了。后来看到说,在swarm中选择host模式,和本地使用nginx是一个道理。也就是说,host模式不走swarm的负载均衡了,不过还是部署在swarm集群中的。
docker service create --name wulaoer-clound-ui --publish 80:80 --publish 443:443 --mount type=volume,source=wulaoer-nginx,destination=/var/log/nginx --secret app.key --secret app.pem --secret key.key --secret key.pem --config src=wulaoer-clound-ui.conf,target=/etc/nginx/conf.d/wulaoer-clound-ui.conf --network xn_net --limit-cpu 0.5 --limit-memory 1G --with-registry-auth registry-vpc.cn-beijing.aliyuncs.com/rdgtestlinshi/wulaoer-clound-ui:1.1.6
这是我原来的部署方式,利用集群的负载均衡中请求到nginx的地址是docker的。
[root@ali-xn-g-prod-swarm-master-bj-01 ~]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Docker Buildx (Docker Inc., v0.9.1-docker) scan: Docker Scan (Docker Inc., v0.17.0) Server: Containers: 28 Running: 9 Paused: 0 Stopped: 19 Images: 41 Server Version: 20.10.18 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true userxattr: false Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: active NodeID: 3ubixvjicpu89v5x4i7avqa2g Is Manager: true ClusterID: 05dowatpbajdro48i1o5ecb33 Managers: 1 Nodes: 2 Default Address Pool: 10.0.0.0/8 #这个网段,这个是docker默认的网段 SubnetSize: 24 Data Path Port: 4789 Orchestration:
使用host网段,直接走物理网络,不走swarm的负载均衡,也就是说host模式,同一个服务在一个节点上不能有多个副本,要不就会有端口冲突,并且如果我在服务上层做负载均衡,就会出现有时候访问正常有时候访问异常的情况。
docker service create --name wulaoer-clound-ui --publish "mode=host,target=80,published=80" --publish "mode=host,target=443,published=443" --mount type=volume,source=wulaoer-nginx,destination=/var/log/nginx --secret app.key --secret app.pem --secret key.key --secret key.pem --config src=wulaoer-clound-ui.conf,target=/etc/nginx/conf.d/wulaoer-clound-ui.conf --network xn_net --limit-cpu 0.5 --limit-memory 1G --with-registry-auth registry-vpc.cn-beijing.aliyuncs.com/rdgtestlinshi/wulaoer-clound-ui:1.1.6
如果副本数大于节点数就会提示:
2/3: no suitable node (host-mode port already in use on 2 nodes)
为了避免,后期增加节点,负载均衡返回不了数据,所以我需要在每个节点自动起一个nginx,这样保证所有的负载均衡正常。这就用到了关键词--mode global,创建服务时会在每个节点上启动一个副本,这样任何一个节点异常就不会出现用户请求不可用了。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏