假设我想要部署一个不包含连续运行/阻塞程序的skaffold吊舱。例如,使用入门示例并将main.go更改为:
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello world!")
}如果我使用上面修改过的示例运行skaffold dev,然后等待而不对代码做任何更改,则结束符将继续重新启动,循环通过statuses Completed -> CrashLoopBackOff -> Completed,每次重新启动都会在pod中运行程序。如何让pod运行一次程序,而只在更改代码时重新运行/重新启动?
这是与skaffoldv1.6.0-docs,ubuntu 18,microk8s 1.16/稳定化,设置了skaffold config set default-repo localhost:32000。
发布于 2020-03-30 23:33:21
首先,我要强调的是,Skaffold没有什么特定的东西。它与kubernetes Pod的性质有很大关系,它不是要运行到完成,而是继续运行(至少使用它的默认设置)。
通过在几个不同的变体中从Pod示例中运行这,您可以很容易地验证它:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']尝试将睡眠时间缩短到一些较短的值,您将看到它在Completed和CrashLoopBackOff状态之间也在不断变化。当您删除保持容器正常运行的命令时,也会发生这种情况。
如果你跑:
kubectl get pod myapp-pod -o yaml您可能会注意到,在restartPolicy规范中定义了Pod,如果不明确地将其设置为不同的值,默认情况下将其设置为Always。这里有您的Completed Pods不断重新启动的原因。
将其设置为Never 应该会给出您想要达到的结果。
spec:
restartPolicy: Never
containers:
- name: myapp-container
image: busybox
...但是,请记住,通常不会使用裸Pods在kubernetes中运行工作负载。您更愿意使用诸如Deployment这样的控制器来管理它们。只要使用Deployment来确保某些Pods的启动和运行,就可以运行一些要完成的东西--您在kubernetes中拥有的--另一个控制器,名为工作。
https://stackoverflow.com/questions/60915975
复制相似问题