在Kubernetes中链接多个参数(Arg) [英] Chain multiple arguments (args) in Kubernetes

查看:10
本文介绍了在Kubernetes中链接多个参数(Arg)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在容器中执行多行代码,这些代码将作为args传递,如下例所示: 部署.yaml摘录

initContainers:
 - name: wait-for-migrations
   args:
    - python
    - -c
    - |
        print("python")
        ...more lines
    - bash
    - -c
    - |
        echo bash
        ...more lines


现在,无论我做了什么尝试,我都无法同时执行python/bash。只有第一个永远是。 使用中间层链接两者:

- ;

也不起作用。

有什么办法实施吗?

推荐答案

我认为最好为此创建一个专用脚本。按照我下面显示的方式操作有点脏。

这是容器的一般限制。您不能运行多个命令。从这个意义上讲,这与库伯内斯没有任何关系。 对于复杂命令,通常的解决方法是将所有内容包装在单个bash -c中,即bash -c "first command; second command"。 我们还经常看到它们与&&连接,如果当前命令失败,&&

将不会执行任何进一步的命令

您不必在commandargs中将它们分开,但我认为它更清晰一些。

apiVersion: v1
kind: Pod
metadata:
  name: script
spec:
  containers:
    - name: script
      image: python
      command:
        - bash
        - -c
      args:
        - |
          echo "hello world";
          python -c '
          print("foo")
          print("bar")
          print("baz")
          ';
          sleep 180;
也就是说,由于您希望等待迁移,因此将迁移移至Kubernetes作业并在作业完成时检查init容器中的Kubernetes API可能会更干净。例如kubectl。 迁移作业可以运行与主应用程序相同的映像,但执行其迁移命令(如果它有的话)。

apiVersion: batch/v1
kind: Job
metadata:
  name: migration
spec:
  ttlSecondsAfterFinished: 100
  template:
    spec:
      containers:
        - name: migration
          image: busybox
          command: ["/bin/sh", "-c", "sleep 20"]
      restartPolicy: Never
---
apiVersion: v1
kind: Pod
metadata:
  name: app
spec:
  containers:
    - name: app
      image: busybox
      command: ["/bin/sh", "-c", "sleep 100"]
  initContainers:
    - name: wait-for-migration
      image: bitnami/kubectl
      args:
        - wait
        - job/migration
        - --for
        - condition=complete
        - --timeout
        - 60s

这篇关于在Kubernetes中链接多个参数(Arg)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆