Eureka迁移至Kubernetes

Eureka迁移至Kubernetes

新建Eureka-Server

新建过程参考:centos7搭建Eureka-Server注册中心集群

不同之处:

  • 只需创建1个配置文件,采用yml文件格式,不用创建3个配置文件

配置文件application.yml

server:
  port: 8761
eureka:
  instance:
    hostname: ${EUREKA_HOST_NAME:peer1} 
    appname: ${spring.application.name} 
  client:
    register-with-eureka: ${BOOL_REGISTER:true} 
    fetch-registry: ${BOOL_FETCH:true} 
    service-url:
      defaultZone: ${EUREKA_URL_LIST:http://peer1:8761/eureka/} 
  server:
    enable-self-preservation: ${SELF_PRESERVATION:true} 

spring:
  application:
    name: ${EUREKA_APPLICATION_NAME:eureka-server}

编译完成后文件:eureka-k8s.jar,上传到CentOS中/usr/local/src/eureka中

打包Docker镜像

mkdir /usr/local/src/eureka
cd /usr/local/src/eureka
---
vim eureka-init.sh
#!/bin/bash

postFix="svc.cluster.local"
EUREKA_HOST_NAME="$MY_POD_NAME.$MY_IN_SERVICE_NAME.$MY_POD_NAMESPACE.$postFix"
export EUREKA_HOST_NAME=$EUREKA_HOST_NAME
BOOL_REGISTER="true"
BOOL_FETCH="true"
if [ $EUREKA_REPLICAS = 1 ]; then
    echo "the replicas of eureka pod is one"
    BOOL_REGISTER="false"
    BOOL_FETCH="false"
    EUREKA_URL_LIST="http://$EUREKA_HOST_NAME:8761/eureka/,"
    echo " set the EUREKA_URL_LIST is $EUREKA_URL_LIST"
else
    echo "the replicas of the eureka pod is $EUREKA_REPLICAS"
    BOOL_REGISTER="true"
    BOOL_FETCH="true"
    for ((i=0 ;i<$EUREKA_REPLICAS; i ++))
    do
        temp="http://$EUREKA_APPLICATION_NAME-$i.$MY_IN_SERVICE_NAME.$MY_POD_NAMESPACE.$postFix:8761/eureka/,"
        EUREKA_URL_LIST="$EUREKA_URL_LIST$temp"
        echo $EUREKA_URL_LIST
    done
fi

EUREKA_URL_LIST=${EUREKA_URL_LIST%?}
export EUREKA_URL_LIST=$EUREKA_URL_LIST
export BOOL_FETCH=$BOOL_FETCH
export BOOL_REGISTER=$BOOL_REGISTER
echo "start jar...."

java -jar /usr/local/src/eureka-k8s.jar
---
vim Dockerfile
FROM jdk:12.0.1 

EXPOSE 8761 
COPY eureka-init.sh /usr/local/src/eureka-init.sh 
COPY eureka-k8s.jar /usr/local/src/eureka-k8s.jar 

ENTRYPOINT ["/bin/bash","-c","source /usr/local/src/eureka-init.sh"]

---
docker build -t eureka:v1.0 .

准备K8s部署yaml文件

vim eureka-deploy.yaml
apiVersion: v1
kind: Service
metadata:
  name: eureka-service-internal
  labels:
    app: eureka-service-internal
  namespace: default    
spec:
  clusterIP: None
  ports:
  - port: 8761
    protocol: TCP
    targetPort: 8761
  selector:
    app: eureka
  type: ClusterIP

---

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: eureka
spec:
  selector:
    matchLabels:
      app: eureka
  serviceName: "eureka-service-internal"
  replicas: 3
  template:
    metadata:
      labels:
        app: eureka
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE 
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_IN_SERVICE_NAME 
          value: eureka-service-internal
        - name: EUREKA_APPLICATION_NAME
          value: "eureka"
        - name: EUREKA_REPLICAS
          value: "3"
        image:  eureka:v1.0 
        imagePullPolicy: IfNotPresent
        name: eureka-container
        ports:
        - containerPort: 8761
          protocol: TCP

---

kubectl create -f eureka-deploy.yaml

测试

kubectl get pods --all-namespaces
kubectl exec -it eureka-0 bash
curl eureka-service-internal:8761

   转载规则


《Eureka迁移至Kubernetes》 Midas Li 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
ingress-nginx部署 ingress-nginx部署
ingress-nginx部署1、部署nginx-ingress-controlleringress-nginx github 当前最新版本:NGINX: 0.25.0 镜像地址:quay.io/kubernetes-ingress-con
2019-08-14
下一篇 
如何通过Dockerfile快速构建镜像 如何通过Dockerfile快速构建镜像
如何通过Dockerfile快速构建镜像Docker官网 原文链接 Dockerfile的语法 Docker相关 Docker:最早是dotCloud公司出品的一套容器管理工具,但后来Docker慢慢火起来了,连公司名字都从dotClou
2019-08-14
  目录