Kubernetes在部署容器中运行shell命令

3

在 Kubernetes 的 Deployment 中可以定义命令,在创建 Deployment 后立即执行该命令。

例如:

cd opt/
wget xxxxxx
mkdir new/

到目前为止,我还没有找到任何解决这个问题的方法。

是否有其他方法可以实现这个效果?


为什么不将这些命令作为您的 Pod 的一部分运行呢? - omricoco
你尝试过这个吗 https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/ ? - Pankaj
如果可能的话,我会将这个构建到镜像中。如果你获取的数据基本上是静态的,请在Dockerfile的RUN指令中执行;如果它非常动态或确实无法构建到镜像中(例如每次安装的安全凭证),那么请使用一个ENTRYPOINT包装脚本。 - David Maze
1个回答

3
可以这样做:
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: example
  name: example
spec:
  replicas: 1
  selector:
    matchLabels:
      app: example
  strategy: {}
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
        - image: busybox
          command: ["/bin/sh"]
          args: ["-c", "cd opt/ &&  wget xxxxxx && mkdir new/ && process-that-keeps-container-running"]
          name: busybox

这有点棘手,因为在命令参数的结尾,你必须放置保持容器运行的命令。如果你不知道它是哪个命令,你需要查看所使用的Docker镜像的 CMDENTRYPOINT


谢谢回复,但这个配置导致 Pod 状态终止。 - ph_anvin
1
如果您没有安装适当的服务器,那么“保持容器运行的进程”的示例可以是一个无限等待循环:while true; do sleep 10000; done - mirekphd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接