python - 如何优雅地停止 Pulumi up 命令

标签 python devops minikube pulumi helm3

我正在尝试在 Minikube 上开发几个 Helm Charts。
为此,我在 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/",
        ),
    ),
)

我犯了一个错误,因为我应该使用取决于属性,以便在先决条件之后开发 datahaub helmchart。
现在,某些资源无法创建,pulumi up 并未终止
这不是 minikube 资源的问题:我用 minikube top 检查过。 我尝试在另一个终端窗口中启动 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 程序上运行操作。

您可以像更多其他 Go 程序或其他 Unix 类工具一样取消 pulumi up 操作,通过 ctrl+c 发送 SIGINT .

第一个 SIGINT 将尝试优雅地停止 Pulumi 程序执行,第二个 SIGINT 将尝试强制停止程序执行。

在这种情况下停止 Pulumi 程序的最终机制是使用 SIGKILL 完全终止 Pulumi。这可能会或可能不会留下锁定文件,您可以使用 pulumi cancel 清除该文件。

但是,在这种情况下需要考虑一些事情。

如果您取消正在运行的 pulumi 程序,Pulumi 将无法再确认您的云提供商 API(在本例中为 Kubernetes)中的操作状态,也无法将该状态与您的 Pulumi 状态进行协调。您需要运行 pulumifresh 以便 Pulumi 可以使您的云提供商资源与 pulumi 状态保持一致。在这种情况下,运行 pulumi destroy 通常是安全的,因为 Pulumi 只会销毁它知道的所有资源

关于python - 如何优雅地停止 Pulumi up 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71968562/

相关文章:

python - 在终端中显示未存储在终端历史记录中的临时消息

python - 基于 POST 中的数据的 Django 表单集中的初始表单数量增加?

Python 和 Json : Multiline input data into Json

amazon-web-services - 我需要使用 CFT 在 cloudwatch 中创建警报,但无法检索外部值。 yaml 语法由 yamllint 检查是否正确

json - Chef inspec 验证嵌套的 json 文件

python - 从 Kibana 获取 elasticsearch 查询

docker - 从 Nexus Repository Manager OSS 3.0.1-01 中删除 Docker 镜像

node.js - Minikube 和 docker 上的开发工作流程

kubernetes - Kubernetes 是否缓存 docker-registry secret ?

kubernetes - Kubectl 和 Minikube 问题 - 无法连接到服务器