部署

docker 部署

  1. $ docker run -d \
  2. -p 8500:8500 \
  3. --name consul \
  4. --volume ./consul:/consul/data \
  5. -e CONSUL_BIND_INTERFACE='eth0' \
  6. consul:latest agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -bootstrap-expect=1

docker-compose 部署

docker-compose.yaml

  1. version: '3.6'
  2. services:
  3. consul1:
  4. image: consul:latest
  5. container_name: consul-1
  6. restart: always
  7. ports:
  8. - 8500:8500
  9. environment:
  10. - CONSUL_BIND_INTERFACE=eth0
  11. volumes:
  12. - ./data:/consul/data
  13. command: agent -server -ui -bind=0.0.0.0 -client=0.0.0.0 -bootstrap-expect 1

k8s 部署

consul-pod.yaml

  1. kind: Pod
  2. apiVersion: v1
  3. metadata:
  4. name: consul
  5. namespace: hawkeye
  6. labels:
  7. app: consul
  8. spec:
  9. containers:
  10. - name: container-q8zm1r
  11. image: 'consul:latest'
  12. args:
  13. - agent
  14. - '-server'
  15. - '-ui'
  16. - '-bind=0.0.0.0'
  17. - '-client=0.0.0.0'
  18. - '-bootstrap-expect=1'
  19. ports:
  20. - name: http-1
  21. containerPort: 8500
  22. protocol: TCP
  23. resources:
  24. limits:
  25. cpu: 500m
  26. memory: 1Gi
  27. requests:
  28. cpu: 300m
  29. memory: 500Mi
  30. terminationMessagePath: /dev/termination-log
  31. terminationMessagePolicy: File
  32. imagePullPolicy: IfNotPresent
  33. restartPolicy: Always

参数解析

  • -bootstrap-expect 表示是集群中服务器个数
  • -ui 用web来管理consul
  • -node 设置服务器节点名称
  • -server 表示 server 模式
  • -client 运行访问的终端地址

通过上面三种任意方式都可以完成快速部署,启动后日志输出如下

  1. consul-1 | ==> Found address '172.23.0.2' for interface 'eth0', setting bind option...
  2. consul-1 | ==> Starting Consul agent...
  3. consul-1 | Version: '1.8.4'
  4. consul-1 | Node ID: 'b66e8b6c-eb0e-8ac7-ed56-289fca4508cf'
  5. consul-1 | Node name: '467c201ea1a1'
  6. consul-1 | Datacenter: 'dc1' (Segment: '<all>')
  7. consul-1 | Server: true (Bootstrap: true)
  8. consul-1 | Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
  9. consul-1 | Cluster Addr: 172.23.0.2 (LAN: 8301, WAN: 8302)
  10. consul-1 | Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false
  11. consul-1 |
  12. consul-1 | ==> Log data will now stream in as it occurs:

返回日志一些重要信息分析:

  • Node name:节点名称
  • Datacenter:默认数据中心
  • Server:这指示代理是在服务器模式下还是在客户端模式下运行
  • Client Addr:客户端到代理的接口地址,默认情况下仅版本本机
  • Cluster Addr:集群中 consul 代理之间进行通信的地址和端口,并非集群中所有 consul 代理都必须使用相同的端口,但是所有其他节点都必须可以访问此地址

日志输出后,可以代开后端地址 : localhost:8500

退出

可以通过向进程发送中断信号(通常是 Ctrl-C从终端或运行kill -3 consul_pid),当客户端正常退出时,代理首先通知群集它打算离开群集。这样,其他集群成员会通知集群该节点已离开。当正常退出后,该服务器将会标记为 failed,如果要从集群中彻底删除服务,则需要使用 force-leave命令,只要服务代理不处于 alive,就可以将服务实例设置为 left 状态。

如果发送 kill -9 consul_pid 实现强制退出,则集群中其他节点将检测到这个节点已死亡,并且将它设置为 failed

生命周期

首次启动服务时,它不知道集群中的任何其他节点。要发现其对等方则它必须加入集群。这可以通过 join 命令或通过提供适当的配置以在启动时自动加入来完成。一旦节点加入,该信息就会发布到整个群集中,这意味着所有节点最终都将彼此了解。如果代理是服务器,则现有服务器将开始复制到新节点。

在网络故障的情况下,某些节点可能无法被其他节点访问。在这种情况下,无法访问的节点被标记为failed