我想使用SQL脚本文件在Kubernetes pod中创建一个SQL Server数据库。我有创建数据库和插入主数据的SQL脚本。由于我是Kubernetes的新手,我很难在pod中运行SQL脚本。我知道SQL脚本可以在单独的kubectl exec命令中手动执行,但是我希望它在pod deploy yml文件本身中自动执行。
有没有办法将脚本文件挂载到pod的卷中,并在启动容器后运行它?
在这种情况下,您可以使用kubernetes钩子
。其中有两个:PostStart
和PreStation
。
PostStart
在创建容器后立即执行。另一方面,在容器终止之前立即调用PreStation。
您可以实现两种类型的钩子处理程序:Exec
或 HTTP
< 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