Dha*_*aya 4 sql-server kubernetes
我想使用 SQL 脚本文件在 Kubernetes pod 中创建 SQL Server 数据库。我有创建数据库并插入主数据的 SQL 脚本。由于我是 Kubernetes 新手,我很难在 Pod 中运行 SQL 脚本。我知道 SQL 脚本可以在单独的 kubectl exec 命令中手动执行,但我希望它在 pod 部署 yml 文件本身中自动执行。
有没有办法将脚本文件挂载到pod的卷中并在启动容器后运行它?
aci*_*uji 10
hooks对于这种情况,您可以使用 kubernetes 。其中有两个:PostStart和PreStop。
PostStart创建容器后立即执行。
PreStop另一方面,在容器终止之前立即调用。
您可以实现两种类型的挂钩处理程序:Exec或HTTP
Exec- 在容器的 cgroup 和命名空间内执行特定命令,例如 pre-stop.sh。命令消耗的资源将根据容器进行计数。
HTTP- 针对容器上的特定端点执行 HTTP 请求。
PostStart是这里要使用的一个,但是请注意,该钩子与主进程并行运行。它不会等待主进程完全启动。在钩子完成之前,容器将保持等待状态。
您可以使用一些解决方法,并向sleep脚本添加一个命令,以便让它稍等一下主容器的创建。您的脚本文件可以存储在容器映像中,或使用 挂载到与 pod 共享的卷ConfigMap。以下是如何做到这一点的一些示例:
kind: ConfigMap
apiVersion: v1
metadata:
namespace: <your-namespace>
name: poststarthook
data:
poststart.sh: |
#!/bin/bash
echo "It`s done"
Run Code Online (Sandbox Code Playgroud)
确保您的脚本不超过1mb限制ConfigMap
定义后,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
Run Code Online (Sandbox Code Playgroud)
然后你可以postStart在你的规范中定义:
spec:
containers:
- name: example-container
image: <your-image>
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", /opt/poststart.sh ]
Run Code Online (Sandbox Code Playgroud)
您可以在 kubernetes文档和本文中阅读有关钩子的更多信息。让我知道这是否有帮助。
| 归档时间: |
|
| 查看次数: |
14355 次 |
| 最近记录: |