k8s集群部署eureka总结

先说总结

K8S基本目的就是为了集群部署,但集群也分2种,一种是无状态的,类似一些平常的web服务,一种是有状态的,kind:statefulSet,类似kafkaeurekaMySQL,前两个特殊的地方来自于他们需要互相注册,ip要稳定,MySQL则是可能需要主从结构,总之都是ip需要稳定的,至少内部是稳定的。

kind:statefulSet 提供了这个稳定的机制,pod的下的hostnameip都是有规律有顺序的,而不是像kind:Deployment是随机的字符。通过statefuleSet部署集群,可以在没有启动eureka时,就知道集群中各个podip地址,达到互相注册的目的。

PS:中间失败了N次,因为初次接触,总以为配置错了,但无法定位错误的地方。修改配置重试了N次,最后发现,在eureka里开启了spring-boot-starter-security并设置了密码...... 而我在配置中eureka.client.serviceUrl.defaultZone 中没有配置密码!!!

PS: 最后结果的验证: 我是又新建了个service kind:NodePort,代理了下… 然后宿主机上直接wget http://user:password@{NodePortIp}:{port} 下载了个index.html 看里面的注册情况,确认OK。(面对无法直接访问的地方,我们只能直击源码)
如果服务器ip可以本地访问的话,直接通过浏览器看就好了。至于为啥请求的是{port}而不是定义的{NodePort},我发现{NodePort}访问不了,不知道是哪里出了问题,我不是运维,太晚了,睡了!头发要紧

PS: 为啥不用多个service,一个service一个pod... 这个我没试,主要我想的是service的ip和pod不是一个,通过修改application.yml里的hostname之类的好像可以解决,不过弹性上,就全靠手动了...

最后说下做法

我是一个伸手党
基本上参考这个来做就行了
https://qingmu.io/2019/08/07/Run-eureka-cluster-on-kubernetes/#部署到kubernetes 以下配置都是引用上面的博客后自己的修改。

pom.xml

就不全写了,因为有安全校验,所以比其他的可能多了

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

application.yml

server:
  port: ${PORT:8679}

logging:
  level:
    com:
      netflix:
        eureka:
          registry: error
management:
  endpoints:
    web:
      exposure:
        include: "*"
spring:
  application:
    name: eurka-server
  security:
    user:
      name: *****
      password: ********

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

eureka-statefulSet.yml

---
apiVersion: v1
kind: Service
metadata:
  name: eureka
  labels:
    app: eureka
spec:
  ports:
    - port: 8769
      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
		#镜像就自己把eurek打包把
          image: *****
          ports:
            - containerPort: 8762
          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:8769/eureka/,http://**:****@eureka-1.eureka:8769/eureka/,http://**:****@eureka-2.eureka:8769/eureka/"
            - name: EUREKA_INSTANCE_HOSTNAME
              value: ${MY_POD_NAME}.eureka
            - name: PORT
              value: "8769"
  podManagementPolicy: "Parallel"
优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/northerSong/blog/3123748

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。