溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

k8s集群部署eureka的方法

發(fā)布時間:2021-07-28 18:51:23 來源:億速云 閱讀:1031 作者:chen 欄目:云計(jì)算

這篇文章主要介紹“k8s集群部署eureka的方法”,在日常操作中,相信很多人在k8s集群部署eureka的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”k8s集群部署eureka的方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

先說總結(jié)

K8S基本目的就是為了集群部署,但集群也分2種,一種是無狀態(tài)的,類似一些平常的web服務(wù),一種是有狀態(tài)的,kind:statefulSet,類似kafka,eureka,MySQL,前兩個特殊的地方來自于他們需要互相注冊,ip要穩(wěn)定,MySQL則是可能需要主從結(jié)構(gòu),總之都是ip需要穩(wěn)定的,至少內(nèi)部是穩(wěn)定的。

kind:statefulSet 提供了這個穩(wěn)定的機(jī)制,pod的下的hostnameip都是有規(guī)律有順序的,而不是像kind:Deployment是隨機(jī)的字符。通過statefuleSet部署集群,可以在沒有啟動eureka時,就知道集群中各個podip地址,達(dá)到互相注冊的目的。

PS:中間失敗了N次,因?yàn)槌醮谓佑|,總以為配置錯了,但無法定位錯誤的地方。修改配置重試了N次,最后發(fā)現(xiàn),在eureka里開啟了spring-boot-starter-security并設(shè)置了密碼...... 而我在配置中eureka.client.serviceUrl.defaultZone 中沒有配置密碼?。?!

PS: 最后結(jié)果的驗(yàn)證: 我是又新建了個service kind:NodePort,代理了下… 然后宿主機(jī)上直接wget http://user:password@{NodePortIp}:{port} 下載了個index.html 看里面的注冊情況,確認(rèn)OK。(面對無法直接訪問的地方,我們只能直擊源碼)
如果服務(wù)器ip可以本地訪問的話,直接通過瀏覽器看就好了。至于為啥請求的是{port}而不是定義的{NodePort},我發(fā)現(xiàn){NodePort}訪問不了,不知道是哪里出了問題,我不是運(yùn)維,太晚了,睡了!頭發(fā)要緊

PS: 為啥不用多個service,一個service一個pod... 這個我沒試,主要我想的是service的ip和pod不是一個,通過修改application.yml里的hostname之類的好像可以解決,不過彈性上,就全靠手動了...

最后說下做法

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

pom.xml

就不全寫了,因?yàn)橛邪踩r?yàn),所以比其他的可能多了

<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會自動發(fā)現(xiàn)該限制
              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"

到此,關(guān)于“k8s集群部署eureka的方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI