我想在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
,您通常希望看到您的容器执行某种长时间运行的命令。