2

我想运行一个使用数据库的微服务。DB 也需要使用 PVC/PV 部署在同一个 kubernetes 集群中。用于实现此类逻辑的 kubernetes 服务名称/命令是什么:

  1. 部署数据库实例
  2. 如果1成功,则部署微服务,否则返回1并尝试(如果100次失败-则停止并报警)
  3. 如果 2 成功,请使用它,如果需要自动缩放(自动缩放 kubernetes 选项)

我主要关心 1-2:没有数据库,服务无法工作,但同时需要在不同的 pod 中(或者我错了,最好将 2 个容器:数据库和服务放在同一个 pod 中?)

4

1 回答 1

1

我会说你应该将initContainer添加到你的微服务中,它会搜索数据库服务,只要它准备好,就会启动微服务。

例如

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

至于命令,只需将kubectl apply与您的 yaml 一起使用(在您的应用程序中配置 initContainer)。

如果你想以更自动化的方式做到这一点,你可以考虑使用fluxCD / argoCD


至于评论中的问题,containers that run before the main container runs and the main container must be in the same pod?

是的,它们必须在同一个吊舱中。由于初始化容器将工作,除非数据库服务可用,然后主容器将启动。上面的 initContainer 文档中有一个很好的例子。

于 2021-04-28T07:42:17.490 回答