首页 > 解决方案 > 创建/运行 Pod 时如何在 kubectl 中传递运行时参数?

问题描述

我有一个很少有作业的 Spring 批处理应用程序,它正在执行,如下所示

java -jar /appl/myapp/my-bat-spr-jobs-*.jar  updtTablJob 
 
java -cp /opt/mqm/java/lib/com.ibm.mq.allclient.jar:/appl/myapp/my-bat-spr-jobs-*.jar com.demo.jobs.mappingApp  jsonToQueue 

我已经定义了我的 docker 文件,如下所述

FROM openjdk:8-jre-alpine
ENV my-bat-spr-jobs.jar
WORKDIR /root/apps
COPY . /appl/myapp
ENTRYPOINT ["java "]

我想在 Azure Kubernetes 上部署/运行这个 dockerized 应用程序。

我已经定义了我的 POD.YAML,如下所述

apiVersion: v1
kind: Pod
metadata:
 name: my_app
 labels:
  app: my_app
spec:
 containers:
  - name: my_app
    image: docker:5000/path_to_my_custom_image

如何使用所需的 cmd args 部署 POD - 例如“-jar /appl/myapp/my-bat-spr-jobs-.jar updtTablJob”或“-cp /opt/mqm/java/lib/com.ibm。 mq.allclient.jar: /appl/myapp/my-bat-spr-jobs-.jar com.demo.jobs.mappingApp jsonToQueue"?

我应该只运行图像而不定义 POD 定义吗?像下面的东西?

kubectl run -ti --rm test --image=path_to_my_custom_image --namespace default -- sh -c "-jar /appl/myapp/my-bat-spr-jobs-*.jar  updtTablJob"

kubectl run -ti --rm test --image=path_to_my_custom_image --namespace default -- sh -c "-cp /opt/mqm/java/lib/com.ibm.mq.allclient.jar:/appl/myapp/my-bat-spr-jobs-*.jar com.demo.jobs.mappingApp  jsonToQueue"

我的意图是启动容器,根据运行时参数执行作业并销毁容器。

标签: javakubernetesazure-aks

解决方案


可以通过command参数或者args参数(甚至env)传入运行参数

如下:

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "test"
spec:
  template:
    spec:
      containers:
        - name: "test"
          image: "test:v1.0"
          {{- if .Values.command }}
          command:
            {{ toYaml .Values.command | nindent 12 }}
          {{- end }}
          {{- if .Values.args }}
          args:
            {{ toYaml .Values.args | nindent 12 }}
          {{- end }}
          {{- if .Values.env }}
          env:
            {{ toYaml .Values.env | nindent 12 }}
          {{- end }}
  1. 如果使用命令

值.yaml

command:
  - java
  - -jar
  - /appl/myapp/my-bat-spr-jobs-*.jar
  - updtTablJob 
  1. 如果使用参数

值.yaml

args:
  - -cp
  - /opt/mqm/java/lib/com.ibm.mq.allclient.jar:/appl/myapp/my-bat-spr-jobs-*.jar com.demo.jobs.mappingApp
  - jsonToQueue 
  1. 如果使用环境

值.yaml

args:
  - $env0
  - $env1
  - $env2

env:
  - name: "env0"
    value: "-cp"
  - name: "env1"
    value: "/opt/mqm/java/lib/com.ibm.mq.allclient.jar:/appl/myapp/my-bat-spr-jobs-*.jar com.demo.jobs.mappingApp"
  - name: "env2"
    value: "jsonToQueue "

推荐阅读