如何在特定路径下运行Kubernetes pod中的多个命令



我想在kubernetes pod的两个不同位置运行两个不同的命令。我怎么能做到呢?我的方法如下;

apiVersion: apps/v1
kind: Deployment
metadata:
name: wso2is-deployment
namespace: tech-ns
labels:
app: wso2is
spec:
replicas: 1
selector:
matchLabels:
app: wso2is
template:
metadata:
labels:
app: wso2is
spec:
containers:
- image: vialogic/wsois:cluster1.0
name: wso2is
imagePullPolicy: Always
command: ["/home/wso2carbon/wso2is-5.11.0/repository/resources/security/; /opt/java/openjdk/lib/security/", "-c"]
args: ["keytool -exportcert -alias wso2carbon -keystore wso2carbon.jks -rfc -file wso2carbon.pem; keytool -import -alias wso2Carbon -file wso2carbon.pem -keystore cacerts"]
resources:
requests:
memory: "2Gi"
cpu: "2000m"
limits:
memory: "4Gi"
cpu: "4000m"
volumeMounts:
...

让我解释一下我想在上面的清单中实现什么。我有两个命令,一个是keytool -exportcert -alias wso2carbon -keystore wso2carbon.jks -rfc -file wso2carbon.pem,我想在/home/wso2carbon/wso2is-5.11.0/repository/resources/security/上执行这个命令,第二个命令是keytool -import -alias wso2Carbon -file wso2carbon.pem -keystore cacerts,位于/opt/java/openjdk/lib/security/

当我应用清单时,它无法创建容器。当我描述豆荚的时候。它说。

Message:      failed to create shim: OCI runtime create failed: runc create failed: unable to start container process: exec: "/home/wso2carbon/wso2is-5.11.0/repository/resources/security/; /opt/java/openjdk/lib/security/": stat /home/wso2carbon/wso2is-5.11.0/repository/resources/security/; /opt/java/openjdk/lib/security/: no such file or directory: unknown

您希望将多个命令作为shell脚本嵌入到sh -c调用中,如下所示:

command:
- /bin/sh
- -c
- |
cd /home/wso2carbon/wso2is-5.11.0/repository/resources/security/
keytool -exportcert -alias wso2carbon -keystore wso2carbon.jks -rfc -file wso2carbon.pem
cd /opt/java/openjdk/lib/security/
keytool -import -alias wso2Carbon -file wso2carbon.pem -keystore cacerts

(注意我们没有使用args)

这将工作,但它并不完全有意义;这些命令完成后,pod将立即退出。对于Deployment,您通常希望看到您的容器执行某种长时间运行的命令。

最新更新