本项目目的是在kubernetes
上方便、快捷的部署eureka
集群。早期,有一个使用spring cloud
开发的系统部署在docker swarm
集群上,后来需要将该系统迁移到kubernetes
集群上,为了能在kubernetes
上方便部署eureka
多实例,所以使用statefulset
和headless service
完成该工作。
步骤一:Clone 项目
git clone https://github.com/BitInit/eureka-on-kubernetes
步骤二:修改k8s-eureka-prod.yml
配置信息
k8s-eureka-prod.yml
中默认开启 3 个eureka
实例,如果要自定义需要做两步修改。第一步:修改
StatefulSet
中replicas
为期望值n
第二步:修改
ConfigMap
中数据eureka_service_address
为http://eureka-0.eureka:8761/eureka,...,http://eureka-(n-1).eureka:8761/eureka
步骤三:在kubernetes
集群上部署eureka cluster
$ cd eureka-on-kubernetes
$ kubectl apply -f k8s-eureka-prod.yml
等待几分钟后,可以看到StatefulSet
信息:
$ kubectl get statefulset
NAME READY AGE
eureka 3/3 28m
Pods
:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
eureka-0 1/1 Running 0 29m
eureka-1 1/1 Running 0 28m
eureka-2 1/1 Running 0 28m
Services:
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
eureka ClusterIP None <none> 8761/TCP 16m
eureka-np NodePort 10.110.154.67 <none> 8761:30030/TCP 16m
此时,可通过Eureka UI
查看Eureka
基本信息,URL为http://<node-ip>:30030
:
为了连接eureka server
,eureka client
必须要知道eureka server
的 ip 地址,这里提供三种方式连接eureka server
eureka client
和eureka server
如果部署在kubernetes
的同一个namespace
。此时可以使用名为eureka-cm
的ConfigMap
的eureka_service_address
配置数据设置 ip 地址
# kubernetes yaml file
env:
- name: EUREKA_SERVER_ADDRESS
valueFrom:
configMapKeyRef:
name: eureka-cm
key: eureka_service_address
# application.yml
eureka:
client:
serviceUrl:
defaultZone: ${EUREKA_SERVER_ADDRESS}
eureka client
和eureka server
如果部署在同一个kubernetes
集群中。此时可以使用headless service
的域名地址,这里eureka
默认部署在kubernetes
的default
的命名空间中
eureka:
client:
serviceUrl:
defaultZone: http://eureka-0.eureka.default.svc.cluster.local:8761/eureka,http://eureka-1.eureka.default.svc.cluster.local:8761/eureka,http://eureka-2.eureka.default.svc.cluster.local:8761/eureka
如果eureka client
没有部署在该kubernetes
中,此时应使用kubernetes
的NodePort
方式访问eureka server
eureka:
client:
serviceUrl:
defaultZone: http://<node-ip>:30030/eureka
spring-cloud-kubernetes:通过kubernetes
来支撑服务的发现与注册。