下线服务:
curl -X PUT "http://ip:port/eureka/apps/{application}/{instance}/status?value=OUT_OF_SERVICE"
curl -X PUT "http://ip:port/eureka/apps/{USER-WEB-SERVICE}/{172.17.16.100:9461}/status?value=OUT_OF_SERVICE"
上线服务:
curl -X PUT "http://ip:port/eureka/apps/{application}/{instance}/status?value=UP"
curl -X PUT "http://ip:port/eureka/apps/{USER-WEB-SERVICE}/{172.17.16.100:9461}/status?value=UP"删除服务:貌似不管用
curl -X DELETE http://ip:port/eureka/apps/{USER-WEB-SERVICE}/{172.17.16.100:9461}在k8s中可以使用如下两种方法来下线服务:
blog.csdn.net/qq_31960623/article/details/119865937 cnblogs.com/fengjian2016/p/15205477.html jishuin.proginn.com/p/763bfbd676e9
通过请求接口来让服务主动下线:
lifecycle: preStop: httpGet: path: /unhealthy port: http
或者执行脚本来让服务主动下线:
lifecycle: preStop: exec: command: ['/bin/sh','-c','/tmp/preStop.sh']
preStop.sh:这是nacos的eureka同理。
#!/bin/sh
# shell脚本作用
# 在更新pod时先执行这个脚本,把pod应用从nacos中下线,然后再关闭pod
#echo "输出必要的环境变量"
#echo "${NACOS_SERVER_ADDR}"
#echo "${PODNAME}"
#echo "${PODIP}"
#echo "${NACOS_NAMESPACE}"
result=$(curl -X PUT "http://${NACOS_SERVER_ADDR}/nacos/v1/ns/instance?serviceName=${PODNAME}&clusterName=DEFAULT&groupName=DEFAULT_GROUP&ip=${PODIP}&port=8093&enabled=false&namespaceId=${NACOS_NAMESPACE}")
echo "输出curl执行结果result:${result}"
if [ ${result} == "ok" ]; then
echo "执行成功"
sleep 45
exit 0
else
echo "执行失败"
exit 1
fi如何在Pod中获取PodIP:
https://kubernetes.io/zh-cn/docs/tasks/inject-data-application/environment-variable-expose-pod-information/
k8s上部署高可用eureka服务
eureka-statefulset.yaml:
---
apiVersion: v1
kind: Service
metadata:
name: eureka
labels:
app: eureka
spec:
ports:
- port: 8761
name: eureka
clusterIP: None
selector:
app: eureka
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: eureka
spec:
serviceName: "eureka"
replicas: 3
selector:
matchLabels:
app: eureka
template:
metadata:
labels:
app: eureka
spec:
containers:
- name: eureka
image: freemanliu/eureka:v1.1.1
ports:
- containerPort: 8761
resources:
limits:
# jvm会自动发现该限制
memory: 1Gi
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: JAVA_OPTS
value: -XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMFraction=2
-XX:CICompilerCount=8
-XX:ActiveProcessorCount=8
-XX:+UseG1GC
-XX:+AggressiveOpts
-XX:+UseFastAccessorMethods
-XX:+UseStringDeduplication
-XX:+UseCompressedOops
-XX:+OptimizeStringConcat
- name: EUREKA_SERVER
value: "http://eureka-0.eureka:8761/eureka/,http://eureka-1.eureka:8761/eureka/,http://eureka-2.eureka:8761/eureka/"
- name: EUREKA_INSTANCE_HOSTNAME
value: ${MY_POD_NAME}.eureka
podManagementPolicy: "Parallel"参考地址:
gitee.com/bill_liu_work/eureka/tree/master