gpt4 book ai didi

sql-server - 如何在 Kubernetes Pod 中执行 sql 脚本文件?

转载 作者:行者123 更新时间:2023-12-02 11:36:48 24 4
gpt4 key购买 nike

我想使用 SQL 脚本文件在 Kubernetes pod 中创建 SQL Server 数据库。我有创建数据库并插入主数据的 SQL 脚本。由于我是 Kubernetes 的新手,我很难在 pod 中运行 SQL 脚本。我知道 SQL 脚本可以在单独的 kubectl exec 命令中手动执行,但我希望它在 pod deploy yml 文件本身中自动执行。

有没有办法将脚本文件挂载到pod的volume中,并在容器启动后运行?

最佳答案

对于这种情况,您可以使用 kubernetes hooks。其中有两个:PostStartPreStop

PostStart 在创建容器后立即执行。另一方面,PreStop 在容器终止之前立即被调用。

您有两种类型的 Hook 处理程序可以实现:ExecHTTP

Exec - 在容器的 cgroup 和命名空间内执行特定命令,例如 pre-stop.sh。命令消耗的资源将计入容器中。HTTP - 对容器上的特定端点执行 HTTP 请求。

PostStart 是此处要使用的,但请注意, Hook 与主进程并行运行。它不会等待主进程完全启动。在 Hook 完成之前,容器将保持等待状态。

您可以为此使用一些变通方法,并向您的脚本添加一个 sleep 命令,让它稍等片刻,等待您创建主容器。您的脚本文件可以存储在容器镜像中或使用 ConfigMap 挂载到与 pod 共享的卷。下面是一些如何做到这一点的例子:

kind: ConfigMap
apiVersion: v1
metadata:
namespace: <your-namespace>
name: poststarthook
data:
poststart.sh: |
#!/bin/bash
echo "It`s done"

确保您的脚本不超过 ConfigMap1mb 限制

定义 configMap 后,您将使用 volumes 挂载它:

spec:
containers:
- image: <your-image>
name: example-container
volumeMounts:
- mountPath: /opt/poststart.sh
subPath: poststart.sh
name: hookvolume
volumes:
- name: hookvolume
configMap:
name: poststarthook
defaultMode: 0755 #please remember to add proper (executable) permissions

然后你可以在你的规范中定义postStart:

spec:
containers:
- name: example-container
image: <your-image>
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", /opt/poststart.sh ]

您可以在 kubernetes 中阅读有关钩子(Hook)的更多信息 documentation在这个article .让我知道这是否有帮助。

关于sql-server - 如何在 Kubernetes Pod 中执行 sql 脚本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com