当前位置: 首页 > 知识库问答 >
问题:

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

孙宏扬
2023-03-14

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

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

共有1个答案

华瀚漠
2023-03-14

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

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

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

< code>Exec -在容器的cgroups和命名空间中执行特定的命令,例如pre-stop.sh。该命令消耗的资源计入容器。< code>HTTP -针对容器上的特定endpoint执行HTTP请求。

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

您可以为此使用一些解决方法,并在脚本中添加睡眠命令,以便让它等待一段时间来创建主容器。您的脚本文件可以存储在容器映像中,也可以使用ConfiMap挂载到与pod共享的卷中。以下是一些如何做到这一点的示例:

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

确保您的脚本不超过< code>ConfigMap的< code>1mb限制

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

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留档和本文中阅读更多关于钩子的信息。如果有帮助,请告诉我。

 类似资料:
  • 问题内容: 我有一些要自动执行的SQL脚本。过去,我使用过SQL * Plus,并从bash脚本中手动调用了sqlplus二进制文件。 但是,我试图找出是否有一种方法可以连接到数据库,并从bash脚本内部调用该脚本……以便我可以插入查询并使查询相对于特定天数运行过去。 问题答案: 我有点困惑。您应该能够从bash脚本中调用sqlplus。这可能就是您在第一个陈述中所做的 尝试在bash脚本中执行以

  • 问题内容: 我有一个.sql文件,其中包含一堆要在heroku上的postgres数据库上执行的插入命令。但我不知道该怎么做: 如果我有权访问postgres控制台,请输入以下内容: 但似乎heroku不支持此命令。我尝试过 但这不能让我输入文件。 还有其他选择吗? 问题答案: 对于种子数据库之类的事情,我推荐理查德·布朗(Richard Brown)的答案:可以说,最好使用Rails种子机制之类

  • 问题内容: 我有一个带有数据库转储的SQL脚本。如何使用Hibernate执行它? 我这样尝试过: 但是它仅在包含单个SQL查询且我需要运行多个插入和其他复杂内容时才有效。 RDBMS:Oracle数据库11g快捷版11.2.0.2.0版-64位生产 问题答案: 用开始结束块包装查询。喜欢

  • 问题内容: 我有一个批处理文件,该文件在sqlplus中运行一个SQL脚本,并将输出发送到日志文件: sqlplus用户/密码 RowCount.log 我的日志文件包含以下内容: 等等,但是它有数千行输出,因此很难确定哪个结果属于哪个语句。 我想在输出中添加一些格式,以便我可以识别发生了什么。可以对执行的语句进行回显,也可以在脚本中手动插入一些“ echo”语句。理想情况下,它看起来像这样: 问

  • 问题内容: 如何自动执行给定文件夹中所有SQL脚本的运行过程? 问题答案: 编写Windows脚本,使用FOR构造遍历文件,并使用SQLCMD实用程序执行每个文件。

  • 问题内容: 我正在开发仅Linux的Java应用程序,并且需要在其中执行Shell脚本。根据我所读的内容,执行该Shell脚本的唯一方法是从jar文件中提取该脚本并执行它。问题是?如何在运行时提取该Shell脚本? 先感谢您 问题答案: Unix不知道如何在jar文件中运行脚本。您必须使用给定的内容创建一个文件(有一些例程在运行时中创建临时文件),然后运行该文件- 请参阅如何从Java代码运行Un