2020-09-24

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/

image-20200924163137768.png

完成。

参考文档:https://qingmu.io/2019/08/07/Run-eureka-cluster-on-kubernetes/#%E9%83%A8%E7%BD%B2%E5%88%B0kubernetes

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容