在docker环境下部署eureka集群还是很简单的
docker-compose.yaml如下
version: '2'
services:
eureka-peer-1:
image: image-url ## 镜像
container_name: eureka-peer-1
environment:
- SERVER_PORT=8761
- eureka.instance.hostname=eureka-peer-1
- eureka.client.service-url.defaultZone=http://admin:admin@eureka-peer-2:8762/eureka/,http://admin:admin@eureka-peer-1:8761/eureka/,http://admin:admin@eureka-peer-3:8763/eureka/
ports:
- 8761:8761
networks:
- eureka-net
eureka-peer-2:
image: image-url ## 镜像
container_name: eureka-peer-2
environment:
- SERVER_PORT=8762
- eureka.instance.hostname=eureka-peer-2
- eureka.client.service-url.defaultZone=http://admin:admin@eureka-peer-2:8762/eureka/,http://admin:admin@eureka-peer-1:8761/eureka/,http://admin:admin@eureka-peer-3:8763/eureka/
ports:
- 8762:8762
networks:
- eureka-net
eureka-peer-3:
image: image-url ## 镜像
container_name: eureka-peer-3
environment:
- SERVER_PORT=8763
- eureka.instance.hostname=eureka-peer-3
- eureka.client.service-url.defaultZone=http://admin:admin@eureka-peer-2:8762/eureka/,http://admin:admin@eureka-peer-1:8761/eureka/,http://admin:admin@eureka-peer-3:8763/eureka/
ports:
- 8763:8763
networks:
- eureka-net
networks:
eureka-net:
driver: bridge
其中:eureka.client.service-url.defaultZone 中的admin:admin是注册中心的认证信息,可根据自己需求修改。
docker-compose up -d 启动即可
查看pod日志,相互注册成功
kubernetes环境下,因为我不想起三个deployment,决定使用statefulSet+headless,很显然更适合这种有状态的服务。
registry.yaml如下
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka
namespace: zgg
spec:
rules:
- host: eureka.test.linksdwan.com
http:
paths:
- path: /
backend:
serviceName: eureka
servicePort: 8761
---
apiVersion: v1
kind: Service
metadata:
name: eureka
namespace: zgg
spec:
clusterIP: None
ports:
- port: 8761
protocol: TCP
targetPort: 8761
selector:
app: eureka
sessionAffinity: None
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: eureka
namespace: zgg
spec:
serviceName: eureka
replicas: 3
selector:
matchLabels:
project: zgg
app: eureka
template:
metadata:
labels:
project: zgg
app: eureka
spec:
terminationGracePeriodSeconds: 10 #当删除Pod时,等待时间
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: eureka
image: image-url
ports:
- protocol: TCP
containerPort: 8761
env:
- name: APP_NAME
value: "eureka"
- name: SERVER_PORT
value: "8761"
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: APP_OPTS
value: "
--eureka.instance.hostname=${POD_NAME}.${APP_NAME}
--registerWithEureka=true
--fetchRegistry=true
--eureka.instance.preferIpAddress=false
--eureka.client.serviceUrl.defaultZone=http://admin:admin@eureka-0.${APP_NAME}.zgg.svc.cluster.local:8761/eureka/,http://admin:admin@eureka-1.${APP_NAME}.zgg.svc.cluster.local:8761/eureka/,http://admin:admin@eureka-2.${APP_NAME}.zgg.svc.cluster.local:8761/eureka/"
resources:
limits:
cpu: 1
memory: 1024Mi
requests:
cpu: 0.5
memory: 125Mi
readinessProbe: #就绪探针
tcpSocket:
port: 8761
initialDelaySeconds: 20 #延迟加载时间
periodSeconds: 5 #重试时间间隔
timeoutSeconds: 10 #超时时间设置
failureThreshold: 5 #探测失败的重试次数
livenessProbe: #存活探针
tcpSocket:
port: 8761
initialDelaySeconds: 60 #延迟加载时间
periodSeconds: 5 #重试时间间隔
timeoutSeconds: 5 #超时时间设置
failureThreshold: 3 #探测失败的重试次数
使用kubectl apply -f registry.yaml -n zgg 即可启动,查看日志,相互注册成功。