Sql server 如何在Kubernetes吊舱中执行sql脚本文件?

Sql server 如何在Kubernetes吊舱中执行sql脚本文件?,sql-server,kubernetes,Sql Server,Kubernetes,我想使用SQL脚本文件在Kubernetes pod中创建一个SQL Server数据库。我有创建数据库和插入主数据的SQL脚本。由于我是Kubernetes的新手,我正努力在pod中运行SQL脚本。我知道SQL脚本可以在单独的kubectl exec命令中手动执行,但我希望它能够在pod deploy yml文件中自动执行 有没有办法将脚本文件装载到pod的卷中,并在启动容器后运行它?对于这种情况,您可以使用kubernetes挂钩。它们有两种:PostStart和PreStop PostSt

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


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

对于这种情况,您可以使用kubernetes
挂钩。它们有两种:
PostStart
PreStop

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

可以实现两种类型的钩子处理程序:
Exec
HTTP

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

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

您可以使用一些解决方法,并向脚本中添加
sleep
命令,以便让它等待主容器的创建。 您的脚本文件可以存储在容器映像中,也可以使用
ConfigMap
装载到与pod共享的卷中。下面是一些如何做到这一点的例子:

kind: ConfigMap
apiVersion: v1
metadata:
  namespace: <your-namespace> 
  name: poststarthook
data:
  poststart.sh: |
     #!/bin/bash
     echo "It`s done"
然后您可以在规范中定义
postStart

spec:
  containers:
  - name: example-container
    image: <your-image> 
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", /opt/poststart.sh ]
spec:
容器:
-名称:示例容器
图片:
生命周期:
启动后:
执行官:
命令:[“/bin/sh”、“-c”、/opt/poststart.sh]

你可以阅读更多关于kubernetes和本书中的钩子的内容。让我知道这是否有用

您可以将脚本装载为配置映射。您还应该将其作为init容器运行,以便它只在主pod运行之前运行。您还必须提供更多信息,例如您正在使用哪个映像以及如何创建SQL数据库容器。部署/状态集描述为useful@PatrickW关于如何使用initcontainers/configmap在pod中运行sql脚本文件的任何参考资料,因为我没有找到实现这一点的任何好参考资料。Init容器将在主pod之前执行,但我希望在创建主pod之后执行脚本。顺便说一下,我使用标准的MSSQL映像(McC.C.com/MSSQL/Server:2017最新的)谢谢@ Actudi-Fuji,这个答案帮助我理解了Kube钩子和卷。@扎耶,如果我的答案是有用的,你会考虑接受和?@托马斯,你的意思是把SQL脚本的内容放在配置图里面吗?
spec:
  containers:
  - name: example-container
    image: <your-image> 
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", /opt/poststart.sh ]