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