idoop/docker-apollo

k8s部署中,数据库用外部,要怎么修改

Closed this issue · 6 comments

k8s部署中,数据库用外部,要怎么修改

idoop commented

只需将env中的数据库地址改成目标地址即可.

  containers:
  - env:
      # 替换为 DEV_DB / FAT_DB / UAT_DB / PRO_DB / PORTAL_DB
    - name: XX_DB
      # 或者用域名  jdbc:mysql://mysql.addr.com:3306/xxx ,确保内部能够解析出IP且能访问即可.
      value: jdbc:mysql://1.2.3.4:3306/DbName?characterEncoding=utf8
    - name: XX_DB_USER
      value: username
    - name: XX_DB_PWD
      value: password

请问一下,k8s部署apollo多环境,在您的示例配置文件如何追加yaml文件呢,能给模板吗?

同时admin 如何配置呢,示例中没有admin

idoop commented

admin不需要特殊的配置,这个服务是给portal用的,在k8s环境中的绝大部分场景是客户端访问config获取配置,因此可以设置ONLY_CONFIG参数不启动admin以节约资源.

k8s中部署多个Apollo环境, 是指用多个Deployment类型部署不同的Apollo环境,还是在一个DeploymentPod中启动多个Apollo环境呢?

用多个Deployment的话,只需修改为对应Apollo环境的env参数,再和Service绑定默认端口即可.

如果是在一个Pod中启动多个Apollo环境,只用添加你想要的环境的env参数,再开放相应的端口即可,例如你想开启dev和fat的Apollo环境:

kind: Deployment
# ...
  containers:
  - name: multie-apollo-env
    env: 
     - name: DEV_DB
        value: jdbc:mysql://1.2.3.4:3306/DevDbName?characterEncoding=utf8
     # ... set db account & pwd
     - name: FAT_DB
        value: jdbc:mysql://1.2.3.4:3306/FatDbName?characterEncoding=utf8
      # ...
    ports:
    - name: dev-cfg-port
      containerPort: 8080
    # 如果启动admin了,则暴露端口
    - name: dev-adm-port
      containerPort: 8090
    - name: fat-cfg-port
      containerPort: 8081
    - name: fat-adm-port
      containerPort: 8091
  # 在一个pod中启动多个Apollo环境则readiness和liveness的检测方式使用exec
    readinessProbe:
      initialDelaySeconds: 100
      periodSeconds: 20
      exec:
        command:
        - healthcheck
    # liveness的配置类似readiness,但initialDelaySeconds要设置稍大些.

---
kind: Service
# ...
spec:
  ports:
  - name: dev-cfg-port
    port: 你要暴露dev config的端口
    targetPort: 8080
  - name: def-adm-port
    port: 你要暴露dev admin的端口
  - name: fat-cfg-port
    port: 你要暴露fat config的端口
    targetPort: 8081
  - name: fat-adm-port
    port: 你要暴露fat admin的端口
    targetPort: 8091
  # ...

可以参考wikidocker-compose的yaml部署模板,里面其实和在k8s中的部署是极其类似的,**都是一样的.

好的

2018-12-19 12:21:16.491 ERROR 532 --- [Apollo-EnvHealthChecker-1] c.c.f.a.portal.component.PortalSettings : Env health check failed, maybe because of meta server down or configure wrong meta server address. env: UAT, meta server address: http://localhost:

com.ctrip.framework.apollo.common.exception.ServiceException: No available admin server. Maybe because of meta server down or all admin server down. Meta server address: http://localhost:
at com.ctrip.framework.apollo.portal.component.RetryableRestTemplate.getAdminServices(RetryableRestTemplate.java:172)
at com.ctrip.framework.apollo.portal.component.RetryableRestTemplate.execute(RetryableRestTemplate.java:90)
at com.ctrip.framework.apollo.portal.component.RetryableRestTemplate.get(RetryableRestTemplate.java:56)
at com.ctrip.framework.apollo.portal.api.AdminServiceAPI$HealthAPI.health(AdminServiceAPI.java:43)
at com.ctrip.framework.apollo.portal.component.PortalSettings$HealthCheckTask.isUp(PortalSettings.java:127)
at com.ctrip.framework.apollo.portal.component.PortalSettings$HealthCheckTask.run(PortalSettings.java:103)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)