docker及k8s安装consul(轉載)
轉載:https://www.cnblogs.com/caibao666/p/11582909.html
一、docker部署consul集群
参考文献:https://www.cnblogs.com/lonelyxmas/p/10880717.html
https://blog.csdn.net/qq_36228442/article/details/89085373
consul是提供服务发现、简单配置管理、分区部署的服务注册发现解决方案。
主要特性:服务发现\健康检查\基于Key-Value的配置\支持TLS安全通讯\支持多数据中心部署
consul的实例叫agent
agent有两种运行模式:server和client
每个数据中心至少要有一个server,一般推荐3-5个server(避免单点故障)
client模式agent是一个轻量级进程,执行健康检查,转发查询请求到server。
服务service是注册到consul的外部应用,比如spring web server
以下为docker-compose.yaml文件
version: "3.0"
services:
consulserver:
image: progrium/consul:latest
hostname: consulserver
ports:
- "8300:8300"
- "8400:8400"
- "8500:8500"
- "53"
command: -server -ui-dir /ui -data-dir /tmp/consul --bootstrap-expect=3
consulserver1:
image: progrium/consul:latest
hostname: consulserver1
depends_on:
- "consulserver"
ports:
- "8301:8300"
- "8401:8400"
- "8501:8500"
- "53"
command: -server -data-dir /tmp/consul -join consulserver
consulserver2:
image: progrium/consul:latest
hostname: consulserver2
depends_on:
- "consulserver"
ports:
- "8302:8300"
- "8402:8400"
- "8502:8500"
- "53"
command: -server -data-dir /tmp/consul -join consulserver
宿主机浏览器访问:http://localhost:8500 或者 http://localhost:8501 或者 http://localhost:8502

创建test.json文件,以脚本形式注册服务到consul:
test.json文件内容如下:
{
"ID": "test-service1",
"Name": "test-service1",
"Tags": [
"test",
"v1"
],
"Address": "127.0.0.1",
"Port": 8000,
"Meta": {
"X-TAG": "testtag"
},
"EnableTagOverride": false,
"Check": {
"DeregisterCriticalServiceAfter": "90m",
"HTTP": "http://zhihu.com",
"Interval": "10s"
}
}
通过 http 接口注册服务(端口可以是8500. 8501, 8502等能够正常访问consul的就行):
curl -X PUT --data @test.json http://localhost:8500/v1/agent/service/register

二、k8s部署consul集群
参考文献:https://www.cnblogs.com/tylerzhou/p/11161634.html
https://www.jianshu.com/p/b00de040d92e
由于node节点只有两个,所以配置集群也两个实例,测试时候,配置三个实例不能正常工作,所以配置俩个
1、先创建service资源
apiVersion: v1
kind: Service
metadata:
name: consul
labels:
name: consul
spec:
type: ClusterIP
ports:
- name: http
port: 8500
targetPort: 8500
# - name: https
# port: 8443
# targetPort: 8443
# - name: rpc
# port: 8400
# targetPort: 8400
# - name: serflan-tcp
# port: 8301
# targetPort: 8301
# - name: serflan-udp
# port: 8301
# targetPort: 8301
# protocol: "UDP"
# - name: serfwan-tcp
# port: 8302
# targetPort: 8302
# - name: serfwan-udp
# port: 8302
# targetPort: 8302
# protocol: "UDP"
# - name: server
# port: 8300
# targetPort: 8300
# - name: consuldns
# port: 8600
# targetPort: 8600
selector:
app: consul
由于只暴露8500的ui端口,所以将其他端口都没有创建service,service为clusterIP
2、创建statefulset资源
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: consul
spec:
serviceName: consul
replicas: 2
selector:
matchLabels:
app: consul
template:
metadata:
labels:
app: consul
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- consul
topologyKey: kubernetes.io/hostname
terminationGracePeriodSeconds: 10
containers:
- name: consul
image: consul:latest
args:
- "agent"
- "-server"
- "-bootstrap-expect=2"
- "-ui"
- "-data-dir=/consul/data"
- "-bind=0.0.0.0"
- "-client=0.0.0.0"
- "-advertise=$(PODIP)"
- "-retry-join=consul-0.consul.$(NAMESPACE).svc.cluster.local"
- "-retry-join=consul-1.consul.$(NAMESPACE).svc.cluster.local"
- "-retry-join=consul-2.consul.$(NAMESPACE).svc.cluster.local"
- "-domain=cluster.local"
- "-disable-host-node-id"
env:
- name: PODIP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 8500
name: ui-port
- containerPort: 8400
name: alt-port
- containerPort: 53
name: udp-port
- containerPort: 8443
name: https-port
- containerPort: 8080
name: http-port
- containerPort: 8301
name: serflan
- containerPort: 8302
name: serfwan
- containerPort: 8600
name: consuldns
- containerPort: 8300
name: server
3、创建ingress,以使用域名访问
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-consul
namespace: default
annotations:
kubernets.io/ingress.class: "nginx"
spec:
rules:
- host: consul.cabel.com
http:
paths:
- path:
backend:
serviceName: consul
servicePort: 8500
以上资源创建完成后就可以访问了:



浙公网安备 33010602011771号