如何优雅地停止 Pulumi up 命令
How to stop gracefully a Pulumi up command
我正在尝试在 Minikube 上开发几个 Helm 图表。
为此,我在 Minikube 环境中 运行 pulumi up。
import pulumi
from pulumi_kubernetes.helm.v3 import Chart, ChartOpts, FetchOpts, RepositoryOptsArgs
import pulumi_kubernetes as k8s
config = pulumi.Config()
is_minikube = config.require_bool("isMinikube")
datahub_prerequisites = Chart(
"prerequisites",
ChartOpts(
chart="datahub-prerequisites",
fetch_opts=FetchOpts(
repo="https://helm.datahubproject.io/",
),
values = {
'elasticsearch': {
'replicas': 1,
'minimumMasterNodes': 1,
'clusterHealthCheckParams': 'wait_for_status=yellow&timeout=1s',
'antiAffinity': "soft"
},
'neo4j-community': {
'enabled': 'true'
}
}
)
)
datahub_prerequisites = Chart(
"datahub",
ChartOpts(
chart="datahub",
fetch_opts=FetchOpts(
repo="https://helm.datahubproject.io/",
),
),
)
我犯了一个错误,因为我应该使用 depends on 属性 以便在先决条件之后开发 datahaub helmchart。
现在一些资源创建失败,pulumi up 没有终止。
这不是 minikube 资源的问题:我检查了 minikube top。
我试图在另一个终端 window 中启动 pulumi destroy 但出现此错误:
error: the stack is currently locked by 1 lock(s). Either wait for the other process(es) to end or manually delete the lock file(s).
我是一个初学者,我想了解在这种情况下的最佳做法。
当您 运行 Pulumi 程序时,Pulumi 会创建一个锁定文件以确保没有其他人可以尝试对该 Pulumi 程序进行 运行 操作。
您可以通过 ctrl+c
.
发送 SIGINT
来取消 pulumi up
操作,方法与更多其他 Go 程序或其他类似 Unix 的工具相同
第一个 SIGINT
将尝试 优雅地 停止 Pulumi 程序的执行,第二个 SIGINT
将尝试强制停止程序的执行。
在这种情况下停止 Pulumi 程序的最终机制是使用 SIGKILL
完全终止 Pulumi。这可能会或可能不会留下一个锁定文件,您可以使用 pulumi cancel
.
清理它
但是,在这种情况下需要考虑一些事情。
如果您取消 运行ning pulumi 程序,Pulumi 将无法再确认您的云提供商 API(在本例中为 Kubernetes)中的操作状态并协调该状态与你的 Pulumi 状态。您需要 运行 pulumi refresh
以便 Pulumi 可以将您的云提供商资源与 pulumi 状态相协调。在这种情况下 运行 a pulumi destroy
通常是安全的,因为 Pulumi 会简单地销毁它知道的所有资源
我正在尝试在 Minikube 上开发几个 Helm 图表。
为此,我在 Minikube 环境中 运行 pulumi up。
import pulumi
from pulumi_kubernetes.helm.v3 import Chart, ChartOpts, FetchOpts, RepositoryOptsArgs
import pulumi_kubernetes as k8s
config = pulumi.Config()
is_minikube = config.require_bool("isMinikube")
datahub_prerequisites = Chart(
"prerequisites",
ChartOpts(
chart="datahub-prerequisites",
fetch_opts=FetchOpts(
repo="https://helm.datahubproject.io/",
),
values = {
'elasticsearch': {
'replicas': 1,
'minimumMasterNodes': 1,
'clusterHealthCheckParams': 'wait_for_status=yellow&timeout=1s',
'antiAffinity': "soft"
},
'neo4j-community': {
'enabled': 'true'
}
}
)
)
datahub_prerequisites = Chart(
"datahub",
ChartOpts(
chart="datahub",
fetch_opts=FetchOpts(
repo="https://helm.datahubproject.io/",
),
),
)
我犯了一个错误,因为我应该使用 depends on 属性 以便在先决条件之后开发 datahaub helmchart。
现在一些资源创建失败,pulumi up 没有终止。
这不是 minikube 资源的问题:我检查了 minikube top。
我试图在另一个终端 window 中启动 pulumi destroy 但出现此错误:
error: the stack is currently locked by 1 lock(s). Either wait for the other process(es) to end or manually delete the lock file(s).
我是一个初学者,我想了解在这种情况下的最佳做法。
当您 运行 Pulumi 程序时,Pulumi 会创建一个锁定文件以确保没有其他人可以尝试对该 Pulumi 程序进行 运行 操作。
您可以通过 ctrl+c
.
SIGINT
来取消 pulumi up
操作,方法与更多其他 Go 程序或其他类似 Unix 的工具相同
第一个 SIGINT
将尝试 优雅地 停止 Pulumi 程序的执行,第二个 SIGINT
将尝试强制停止程序的执行。
在这种情况下停止 Pulumi 程序的最终机制是使用 SIGKILL
完全终止 Pulumi。这可能会或可能不会留下一个锁定文件,您可以使用 pulumi cancel
.
但是,在这种情况下需要考虑一些事情。
如果您取消 运行ning pulumi 程序,Pulumi 将无法再确认您的云提供商 API(在本例中为 Kubernetes)中的操作状态并协调该状态与你的 Pulumi 状态。您需要 运行 pulumi refresh
以便 Pulumi 可以将您的云提供商资源与 pulumi 状态相协调。在这种情况下 运行 a pulumi destroy
通常是安全的,因为 Pulumi 会简单地销毁它知道的所有资源