我会说你应该将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 文档中有一个很好的例子。