K8S有状态部署eureka集群
application.yml配置如下
server:
port: ${PORT:8761}
logging:
level:
com:
netflix:
eureka:
registry: error
management:
endpoints:
web:
exposure:
include: "*"
spring:
application:
name: eurka-server
security:
user:
name: muri
password: muri2020
eureka:
instance:
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 10
instance-id: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}:${server.port}@${random.long(1000000,9999999)}
hostname: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}
client:
# register-with-eureka: true
# fetch-registry: true
registry-fetch-interval-seconds: 5
serviceUrl:
defaultZone: ${EUREKA_SERVER:http://127.0.0.1:${server.port}/eureka/}
server:
use-read-only-response-cache: false
enable-self-preservation: false
eviction-interval-timer-in-ms: 5000
# renewal-percent-threshold: 0.9
# waitTimeInMsWhenSyncEmpty: 0
然后打包
mvn clean package -X -Dmaven.test.skip=true
开始做镜像dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/muri/muri-java8:1.0
MAINTAINER "wangjian@meprint.com"
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /data/app
COPY target/muri-eureka-server-1.0.1-SNAPSHOT.jar /data/app/app.jar
# ENTRYPOINT ["/entrypoint"]
EXPOSE 10010
ENTRYPOINT ["nohup", "java","-jar","/data/app/app.jar"]
然后statefullset的yaml文件
# eureka-statefulset.yaml
---
apiVersion: v1
kind: Service
metadata:
namespace: middleware
name: eureka
labels:
app: eureka
spec:
ports:
- port: 8761
name: eureka
clusterIP: None
selector:
app: eureka
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: middleware
name: eureka
spec:
serviceName: "eureka"
replicas: 3
selector:
matchLabels:
app: eureka
template:
metadata:
labels:
app: eureka
spec:
imagePullSecrets:
- name: muri
containers:
- name: eureka
image: registry-vpc.cn-hangzhou.aliyuncs.com/muri/eureka:20200924152655
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"
k8s部署
kubectl create -f eureka.yaml
最后再创建一个公网的负载均衡的IP、或者nodeIP提供外部访问
[图片上传失败...(image-56a0c4-1600938231434)]
最后访问一下公网IP的地址查看是否正常
http://120.55.62.28:8761/
完成。
参考文档:https://qingmu.io/2019/08/07/Run-eureka-cluster-on-kubernetes/#%E9%83%A8%E7%BD%B2%E5%88%B0kubernetes