1. # vim consul.yaml
  2. apiVersion: apps/v1
  3. kind: StatefulSet
  4. metadata:
  5. name: consul
  6. namespace: demo
  7. labels:
  8. app: consul
  9. component: server
  10. spec:
  11. serviceName: consul
  12. replicas: 3
  13. selector:
  14. matchLabels:
  15. app: consul
  16. component: server
  17. template:
  18. metadata:
  19. labels:
  20. app: consul
  21. component: server
  22. spec:
  23. imagePullSecrets:
  24. - name: harbor
  25. volumes:
  26. - name: host-time
  27. hostPath:
  28. path: /etc/localtime
  29. - name: config
  30. configMap:
  31. name: consul-config
  32. containers:
  33. - name: consul
  34. image: 10.166.33.110/infra/consul:1.9.2
  35. imagePullPolicy: IfNotPresent
  36. args:
  37. - "agent"
  38. - "-server" # 以server加入集群
  39. - "-bootstrap-expect=3" # 组成集群预期需要的数量
  40. - "-config-dir=/etc/consul/config" #配置文件目录,所有以.json结尾的文件都会被加载,可以是服务或consul自身的配置
  41. - "-advertise=$(PODIP)" # 节点地址
  42. - "-retry-join=consul-0.consul.$(NAMESPACE).svc.cluster.local" # 对已知地址情况下,启动时加入的另一位代理的地址
  43. - "-retry-join=consul-1.consul.$(NAMESPACE).svc.cluster.local"
  44. - "-retry-join=consul-2.consul.$(NAMESPACE).svc.cluster.local"
  45. volumeMounts:
  46. - name: consul
  47. mountPath: /consul/data
  48. - name: host-time
  49. mountPath: /etc/localtime
  50. - name: config
  51. mountPath: /etc/consul/config
  52. env:
  53. - name: PODIP
  54. valueFrom:
  55. fieldRef:
  56. fieldPath: status.podIP
  57. - name: NAMESPACE
  58. valueFrom:
  59. fieldRef:
  60. fieldPath: metadata.namespace
  61. ports:
  62. - containerPort: 8500 # HTTP API 及 Web UI
  63. name: http
  64. - containerPort: 8300 # Server RPC,server 用于接受其他 agent 的请求
  65. name: server
  66. - containerPort: 8301 # Serf LAN,数据中心内 gossip 交换数据用
  67. name: serflan
  68. - containerPort: 8302 # Serf WAN,跨数据中心 gossip 交换数据用
  69. name: serfwan
  70. - containerPort: 8400 # CLI RPC,接受命令行的 RPC 调用
  71. name: cli-port
  72. - containerPort: 8600 # DNS 服务,可以把它配置到 53 端口来响应 dns 请求
  73. name: consuldns
  74. volumeClaimTemplates:
  75. - metadata:
  76. name: consul
  77. namespace: demo
  78. spec:
  79. accessModes:
  80. - ReadWriteMany
  81. resources:
  82. requests:
  83. storage: 5Gi
  84. storageClassName: nfs
  85. ---
  86. apiVersion: v1
  87. kind: Service
  88. metadata:
  89. name: consul
  90. namespace: demo
  91. labels:
  92. name: consul
  93. component: server
  94. spec:
  95. clusterIP: None
  96. ports:
  97. - name: http
  98. port: 8500
  99. targetPort: 8500
  100. - name: server
  101. port: 8300
  102. targetPort: 8300
  103. - name: serflan-tcp
  104. protocol: "TCP"
  105. port: 8301
  106. targetPort: 8301
  107. - name: serflan-udp
  108. protocol: "UDP"
  109. port: 8301
  110. targetPort: 8301
  111. - name: serfwan-tcp
  112. protocol: "TCP"
  113. port: 8302
  114. targetPort: 8302
  115. - name: serfwan-udp
  116. protocol: "UDP"
  117. port: 8302
  118. targetPort: 8302
  119. - name: cli-port
  120. port: 8400
  121. targetPort: 8400
  122. - name: consuldns
  123. port: 8600
  124. targetPort: 8600
  125. selector:
  126. app: consul
  127. ---
  128. kind: Service
  129. metadata:
  130. name: consul-web
  131. namespace: demo
  132. labels:
  133. name: consul
  134. component: server
  135. spec:
  136. ports:
  137. - name: http
  138. protocol: TCP
  139. port: 8500
  140. targetPort: 8500
  141. - name: server
  142. protocol: TCP
  143. port: 8300
  144. targetPort: 8300
  145. - name: serflan-tcp
  146. protocol: TCP
  147. port: 8301
  148. targetPort: 8301
  149. - name: serflan-udp
  150. protocol: UDP
  151. port: 8301
  152. targetPort: 8301
  153. - name: serfwan-tcp
  154. protocol: TCP
  155. port: 8302
  156. targetPort: 8302
  157. - name: serfwan-udp
  158. protocol: UDP
  159. port: 8302
  160. targetPort: 8302
  161. - name: cli-port
  162. port: 8400
  163. targetPort: 8400
  164. - name: consuldns
  165. protocol: TCP
  166. port: 8600
  167. targetPort: 8600
  168. selector:
  169. app: consul
  170. type: ClusterIP
  171. ---
  172. apiVersion: v1
  173. kind: ConfigMap
  174. metadata:
  175. name: consul-config
  176. namespace: demo
  177. data:
  178. server.json: |
  179. {
  180. "bind_addr": "0.0.0.0", // 应为内部集群通信绑定的地址
  181. "client_addr": "0.0.0.0", // consul绑定客户端接口的地址
  182. "disable_host_node_id": true, // 将此设置为true将阻止Consul使用来自主机的信息生成确定性节点标识,并将生成随机节点标识,该标识将保留在数据目录中
  183. "data_dir": "/consul/data", // consul持久化数据存储位置
  184. "datacenter": "shisuyun", // 数据中心名称
  185. "bootstrap_expect": 3, // 组成集群预期需要的数量
  186. "server": true, // 表示当前使用的server模式
  187. "domain": "cluster.consul", // 默认情况下,Consul响应"consul"中的DNS查询
  188. "retry_join": [ // k8s集群
  189. "provider=k8s namespace=demo label_selector=\"app=consul,component=server\""
  190. ],
  191. "telemetry": {
  192. "prometheus_retention_time": "5m"
  193. }
  194. }
  195. ui.json: |
  196. {
  197. "ui" : true, // 启用内置的Web UI服务器和所需的HTTP路由
  198. "client_addr" : "0.0.0.0",
  199. "enable_script_checks" : false,
  200. "disable_remote_exec" : true
  201. }
  202. ---
文档更新时间: 2023-02-28 10:39   作者:张尚