SpringCloud mesos+Marathon 上部署经验总结
marathon +mesos 上 SpringCloud云端部署微服务经验总结:
-
如果采用SDN+mesos-dns动态域名解析,配置变得非常灵活有效,因为每个docker 实例有唯一IP,所以端口都可以设置一样的,或者根据需要设置.
2. SpringBoot 里类似 port: ${PORT:8761} 配置必须替换掉,或者从环境变量显式传递参数。
3. health 健康检查 必须手动确认后再部署,因为这个依赖于不同的具体应用对外暴露的api 。如果没有可以自己创建一个controller 类,暴露一个可以验证的健康状态的,比如 /whattime
如果找不到合适的app检查方法,就自己写一个. 可以自己放在applicaiton 类里。
@RequestMapping("/whattime")
public String index() {
return "The time is "+new Date();
} -
有多个配置文件的zone1,zone2, 可以通过修改marathon app json 里的env 配置传入. “env”: { “downloadURL”: “http://download-nginx-data.data.marathon.mesos/sample-spring-cloud-comm/feign-with-discovery/account-service/account-service-1.0-SNAPSHOT.tgz”, “spring.profiles.active”: “zone1” },
-
app 里配置的localhost 必须相应的改成对应的应用的域名,如 spring:
profiles: zone1
eureka:
instance:
metadataMap:
zone: zone1
client:
serviceUrl:
defaultZone: http://discovery-service.feign-with-discovery.sample-spring-cloud-comm.test.marathon.mesos:8761/eureka/
preferSameZoneEureka: true -
可以直接删除实例然后部署更快. 如果直接修改配置文件,速度要慢很多
-
在测试环境里,最小化资源需求,最小化可运行实例,可以设置为内存128MB,CPU 0.5,如果不能运行再调节大一点。这个取决于你用的docker 镜像. 我用的镜像是: ”image": “common-docker-starter:openjdk-8u191-jdk-alpine3.8”
-
容器时间和主机同步( marathon 里如何设置这个参数, 目前我还没解决这个问题)
docker 镜像时间和主机同步的办法
-v /etc/localtime:/etc/localtime