如何在Kubernetes Pod中执行SQL脚本文件?

时间:2019-12-29 17:28:14

标签: sql-server kubernetes

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

是否可以将脚本文件安装到pod的卷中并在启动容器后运行它?

1 个答案:

答案 0 :(得分:0)

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

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

您有两种可以实现的挂钩处理程序:ExecHTTP

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

PostStart是与之配套的,但是请注意,该挂钩与主进程并行运行。 它不等待主要进程完全启动。在挂钩完成之前,容器将保持等待状态。

您可以为此使用一些解决方法,并在脚本中添加一个sleep命令,以使其稍等片刻来创建主容器。 您的脚本文件可以存储在容器映像中,也可以使用ConfigMap安装到与容器共享的卷上。这里是一些示例,说明了如何做到这一点:

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

确保您的脚本未超过1mb的{​​{1}}限制

定义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

postStart

您可以阅读有关kubernetes documentation和此article中的钩子的更多信息。让我知道是否有帮助。