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

标签 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个 pods 中有一个 pods 死了,又有一个新的 pods 出现了。现在,如何确保最初在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提供输入。

谢谢。

最佳答案

我不确定您所说的互动是什么意思。如果这意味着脚本需要人机交互,则您无法自动执行此操作(因为您需要执行此操作的人员)。

由于Kubernetes Pods可能随时随地死亡,因此您应该使脚本非交互式并扩展entrypoint / command,因此它会在启动实际服务器之前执行node install.js。一个示例是MySQL的官方Docker镜像,该镜像为defines an entrypoint,并在actually starting the server之前进行了一些预配置。

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

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

关于kubernetes - 在创建新Pod时注册kubectl exec命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46998064/

相关文章:

kubernetes - Kubectl 命令从 Kubernetes 返回所有用户帐户的列表

kubernetes - 部署服务时是否有默认的NodePort?

kubernetes - Chaos Monkey 与 Kubernetes 的可操作性?

bash - kubectl 或 bash 忽略 KUBECONFIG 环境变量

docker - Kubernetes DNS外部资源

kubernetes - EKS 集群的 ansible 模块

kubernetes - 如何在通过 Kubernetes 运行的 GKE 上设置 GOOGLE_APPLICATION_CREDENTIALS

docker - 如何使用Docker部署应用程序撰写到kubernetes

virtualbox - 在 Mac 上,什么 IP 将代表 minikube 集群中的笔记本电脑?

kubernetes - 如何配置 kubernetes 以允许长时间运行的交互式 session ?