在创建新Pod时注册kubectl exec命令

时间:2017-10-29 08:05:24

标签: kubernetes kubectl

我有一个Dockerfile,它将安装程序复制到容器中,而Dockerfile中指定的默认命令是/usr/sbin/init,因为我需要运行某些服务。通过kubectl create -f server-rc.yml命令创建容器后,我在交互模式下运行kubectl exec命令来运行该安装程序并通过node.js脚本自动提供输入,命令就像这样kubectl exec $container -i -t -- bash -c "node install.js"(运行安装程序并通过stdin自动提供输入,这将启动我在pod上的自定义服务。

到目前为止,一切都很好。现在让我们说出2个豆荚,一个豆荚死亡,一个新豆荚产卵。现在,我如何确保我最初在pod上运行的这些交互式命令也可以在新生成的pod上运行?我不确定在规范中使用commandargs是否有效,因为它们都在非交互模式下工作。如何解决这个问题的任何想法都将不胜感激。

修改

Dockerfile(部分代码):

FROM centos:7

ENV container docker

RUN yum -y update; yum clean all

VOLUME [ “/sys/fs/cgroup” ]

RUN yum -y install nodejs npm && npm install progress

RUN mkdir -p /tmp

COPY ./install.js /tmp

COPY ./test.bin /tmp/

CMD ["/usr/sbin/init"]

node.js脚本通过test.bin打开child_process.spawn,然后侦听process.stdout.on并根据stdout上收到的内容,通过process.stdin.write提供输入。

感谢。

1 个答案:

答案 0 :(得分:0)

我不确定您的互动意味着什么。如果这意味着脚本需要人工交互,则无法自动化(因为您需要有人这样做)。

由于Kubernetes Pods可以在任何时候死亡,你应该使脚本非交互式并扩展entrypoint / command,所以它在启动实际服务器之前执行node install.js。一个例子是MySQL的官方Docker镜像,defines an entrypoint并在actually starting the server之前进行一些预配置。

很难更准确,因为我们没有Dockerfile或install.js脚本。

编辑如果install.js在Dockerfile中运行会更好,因为这会加快启动并使服务器代码不可变。