您好,登錄后才能下訂單哦!
這篇文章主要介紹“k8s集群部署eureka的方法”,在日常操作中,相信很多人在k8s集群部署eureka的方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”k8s集群部署eureka的方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
K8S基本目的就是為了集群部署,但集群也分2種,一種是無狀態的,類似一些平常的web服務,一種是有狀態的,kind:statefulSet
,類似kafka
,eureka
,MySQL
,前兩個特殊的地方來自于他們需要互相注冊,ip要穩定,MySQL則是可能需要主從結構,總之都是ip需要穩定的,至少內部是穩定的。
kind:statefulSet
提供了這個穩定的機制,pod的下的hostname
和ip
都是有規律有順序的,而不是像kind:Deployment
是隨機的字符。通過statefuleSet
部署集群,可以在沒有啟動eureka時,就知道集群中各個pod
的ip
地址,達到互相注冊的目的。
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 以下配置都是引用上面的博客后自己的修改。
就不全寫了,因為有安全校驗,所以比其他的可能多了
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
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
--- 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"
到此,關于“k8s集群部署eureka的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。