k8s安裝eureka集群


部署Eureka集群

創建 Eureka 部署文件,用於在 Kubernetes 中部署 Eureka,這里選擇用 StatefulSet (有狀態集)方式來部署,這樣能保證它 Eureka Pod 名是有序的,如果部署為 Deployment,那么得部署三個 Deployment 對象,比較繁瑣。並且 StatefulSet 支持 Service Headless 方式創建 Service 來對內部服務訪問,如果是 CluserIP 方式創建 Service 會分一個虛擬 IP 給該 Service,那么服務通過 Service 訪問 Pod 每次都需要經過 Kube-proxy 代理流量,這樣會增加與注冊中心的通信造成一定性能損耗。Headless 方式部署的 Service 不會分配虛擬 IP,而是用輪詢的訪問,每次都直接與 Pod 的 IP 進行通信。

1.eureka的Dockerfile

FROM dk.uino.cn/java/java8:1.0
#設置上海時間
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

EXPOSE 9001
VOLUME /tmp
ADD framework-eureka.jar app.jar
RUN bash -c 'touch /app.jar'
ENV APP_OPTS=""
ENTRYPOINT ["sh", "-c", "java  -jar /app.jar  $APP_OPTS" ]
  • APP_OPTS:Spring 容器啟動參數變量,方便后續操作時能通過此變量配置 Spring 參數

2.創建eureka.yml

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: eureka
  namespace: framework-micro
  annotations:
    k8s.eip.work/workload: cloud-eureka
    k8s.eip.work/displayName: 服務注冊
  labels:
    k8s.eip.work/layer: eureka
    k8s.eip.work/name: cloud-eureka
spec:
  rules:
    - host: eureka.uino.com
      http:
        paths:
        - path: /
          backend:
            serviceName: eureka
            servicePort: 9001
---
apiVersion: v1
kind: Service
metadata:
  name: eureka
  namespace: framework-micro
  annotations:
    k8s.eip.work/workload: framework-eureka
    k8s.eip.work/displayName: 服務注冊
  labels:
    k8s.eip.work/layer: eureka
    k8s.eip.work/name: framework-eureka
spec:
  clusterIP: None
  ports:
    - name: eureka
      port: 9001
  selector:
    project: framework-micro
    app: eureka
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: eureka
  namespace: framework-micro
  annotations:
    k8s.eip.work/workload: framework-eureka
    k8s.eip.work/displayName: 服務注冊
    k8s.eip.work/service: ClusterIP
    k8s.eip.work/ingress: 'true'
  labels:
    k8s.eip.work/layer: eureka
    k8s.eip.work/name: framework-eureka
spec:
  serviceName: eureka
  replicas: 3
  selector:
    matchLabels:
      project: framework-micro
      app: eureka
  template:
    metadata:
      labels:
        project: framework-micro
        app: eureka
    spec:
      containers:
        - name: eureka
          image: xxxxxxxxxx/framework/framework-eureka:v1
          imagePullPolicy: IfNotPresent
          ports:
            - protocol: TCP
              containerPort: 9001
          env:
            - name: APP_NAME
              value: "eureka"
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: APP_OPTS
              value: "
                     --eureka.instance.hostname=${POD_NAME}.${APP_NAME}
                     --eureka.client.serviceUrl.defaultZone=http://eureka-0.${APP_NAME}:9001/eureka/,http://eureka-1.${APP_NAME}:9001/eureka/,http://eureka-2.${APP_NAME}:9001/eureka/
                     "
          resources:
            limits:
              cpu: 1
              memory: 1024Mi
            requests:
              cpu: 0.5
              memory: 125Mi
          readinessProbe:              #就緒探針
            tcpSocket:
              port: 9001
            initialDelaySeconds: 20    #延遲加載時間
            periodSeconds: 5           #重試時間間隔
            timeoutSeconds: 10         #超時時間設置
            failureThreshold: 5        #探測失敗的重試次數
          livenessProbe:               #存活探針
            tcpSocket:
              port: 9001
            initialDelaySeconds: 60    #延遲加載時間
            periodSeconds: 5           #重試時間間隔
            timeoutSeconds: 5          #超時時間設置
            failureThreshold: 3        #探測失敗的重試次數

env參數說明:

APP_NAME: 和服務名稱一致,將服務名稱傳入容器環境中。
POD_NAME: Pod名稱,將 Pod 名稱傳入容器環境中。
APP_OPTS: Dockerfile 中定義的變量,用於設置 Spring 啟動參數,這里主要設置此值與 APP_NAME 和 POD_NAME 兩值配合使用
其他參數說明:

  • resources: 對 Pod 使用計算資源的限制,最好兩個值設置成一致,Kubernetes 中會對 Pod 設置 QoS 等級,跟這兩個值的設置掛鈎,limits 與 request 值一致時 Qos 等級最高,當資源不足時候 QoS 等級低的最先被殺死,等級高的一般不會受太大影響。
  • readinessProbe: 就緒探針,Pod 啟動時只有就緒探針探測成功后才對外提供訪問,用它可用避免 Pod 啟動而內部程序沒有啟動的情況下就允許外部流量流入這種情況。
  • livenessProbe: 存活探針,定期檢測 Docker 內部程序是否存活。
  • spec.podManagementPolicy: pod的啟動順序策略
  • OrderedReady: 順序啟停 Pod,默認設置。
  • Parallel: 並行啟停 Pod,而不遵循一個 Pod 啟動后再啟動另一個這種規則

2.部署Eureka Server到kubernetes

kubectl apply -f eureka.yaml
#如果發現部署錯了,可以執行kubectl delete -f erueka.yaml,刪除這個yaml部署的所有資源

3.訪問Eurek UI

由於ingress配置了域名,先配置hosts,把域名解析到ingress-controller的Pod所在的NodeIP

image-20210902115719029

可以隨時刷新,看頁面最下面的IP 是rr方式輪訓到各個IP提供服務的

4.在kuboard上查看部署的情況

image-20210902134150894

5.spring cloud服務注冊進eureka

cat application.yaml

eureka:
  instance:
    prefer-ip-address: true  #以IP注冊進eureka,不以ID注冊
  client:
    register-with-eureka: true #注冊到eureka為true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka-2.eureka.framework-micro.svc.cluster.local:framework-register:9001,http://eureka-0.eureka.framework-micro.svc.cluster.local:framework-register:9001,http://eureka-1.eureka.framework-micro.svc.cluster.local:framework-register:9001

參考連接:https://blog.csdn.net/qq_32641153/article/details/99700281


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM