我希望在部署初始化成功后运行特定命令。
这是我的yaml文件:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: auth
spec:
replicas: 1
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: {{my-service-image}}
env:
- name: NODE_ENV
value: "docker-dev"
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 3000
但是,我想在成功初始化部署并且正在运行pod之后(之前)运行db迁移命令。
我可以为每个pod手动执行(使用kubectl exec),但这不是很容易扩展。
答案 0 :(得分:30)
我使用生命周期来解决它:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: auth
spec:
replicas: 1
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: {{my-service-image}}
env:
- name: NODE_ENV
value: "docker-dev"
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 3000
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", {{cmd}}]
答案 1 :(得分:6)
您可以使用Helm部署一组Kubernetes资源。然后,使用Helm hook,例如post-install
或post-upgrade
,在单独的泊坞窗容器中运行Job。设置Job以调用db migration。一个Job将运行> = 1个Pods来完成,所以它非常适合这里。
答案 2 :(得分:0)
我选择使用 readinessProbe
我的应用程序需要在进程完全启动后进行配置。
postStart 命令在应用准备就绪之前正在运行。
readinessProbe:
exec:
command: [healthcheck]
initialDelaySeconds: 30
periodSeconds: 2
timeoutSeconds: 1
successThreshold: 3
failureThreshold: 10