具有非阻塞程序的脚手架
Skaffold with non-blocking program
假设我想部署一个带有 skaffold 的 pod,它将 不 包含连续 running/blocking 程序。例如。取 getting started example 并将 main.go
更改为:
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello world!")
}
如果我 运行 skaffold dev
使用上面修改过的示例,只是等待而不对代码进行任何更改,pod 将不断重启,循环显示状态 Completed
-> CrashLoopBackOff
-> Completed
,每次重新启动 运行 再次在 pod 中启动程序。如何让 pod 进入 运行 程序一次,而仅 rerunning/restarting pod 更改代码?
这是 skaffold v1.6.0-docs,ubuntu 18,microk8s 1.16/stable,已设置 skaffold config set default-repo localhost:32000
。
首先我想强调的是 Skaffold 没有任何特定的内容。它与 kubernetes Pod
的本质有关,这并不意味着 运行 完成,而是保持 运行ning(至少使用其默认设置)。
您可以通过 运行从 this 示例的 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
状态之间不断变化。当您删除使容器保持启动并 运行ning.
的命令时,也会发生这种情况
如果你运行:
kubectl get pod myapp-pod -o yaml
您可能会注意到 Pod
规范中定义了 restartPolicy
,如果您没有明确将其设置为不同的值,默认情况下它会设置为 Always
。在这里你有你的 Completed
Pods
不断重启的原因。
将其设置为 Never
应该会给您想要的结果。:
spec:
restartPolicy: Never
containers:
- name: myapp-container
image: busybox
...
但是请记住,您通常不会在 kubernetes 中使用裸 Pods
来 运行 处理您的工作负载。您宁愿使用诸如 Deployment
之类的控制器来管理它们。只要Deployment
用来保证Pods
的某组up和运行ning,for 运行ning something to completion 你在 kubernetes 中有另一个控制器,名为 Job.
假设我想部署一个带有 skaffold 的 pod,它将 不 包含连续 running/blocking 程序。例如。取 getting started example 并将 main.go
更改为:
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello world!")
}
如果我 运行 skaffold dev
使用上面修改过的示例,只是等待而不对代码进行任何更改,pod 将不断重启,循环显示状态 Completed
-> CrashLoopBackOff
-> Completed
,每次重新启动 运行 再次在 pod 中启动程序。如何让 pod 进入 运行 程序一次,而仅 rerunning/restarting pod 更改代码?
这是 skaffold v1.6.0-docs,ubuntu 18,microk8s 1.16/stable,已设置 skaffold config set default-repo localhost:32000
。
首先我想强调的是 Skaffold 没有任何特定的内容。它与 kubernetes Pod
的本质有关,这并不意味着 运行 完成,而是保持 运行ning(至少使用其默认设置)。
您可以通过 运行从 this 示例的 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
状态之间不断变化。当您删除使容器保持启动并 运行ning.
如果你运行:
kubectl get pod myapp-pod -o yaml
您可能会注意到 Pod
规范中定义了 restartPolicy
,如果您没有明确将其设置为不同的值,默认情况下它会设置为 Always
。在这里你有你的 Completed
Pods
不断重启的原因。
将其设置为 Never
应该会给您想要的结果。:
spec:
restartPolicy: Never
containers:
- name: myapp-container
image: busybox
...
但是请记住,您通常不会在 kubernetes 中使用裸 Pods
来 运行 处理您的工作负载。您宁愿使用诸如 Deployment
之类的控制器来管理它们。只要Deployment
用来保证Pods
的某组up和运行ning,for 运行ning something to completion 你在 kubernetes 中有另一个控制器,名为 Job.