使用特定命令启动kubernetes容器
使用fleet,我可以指定启动时在容器内运行的命令。这似乎在库伯内特斯身上也很容易做到,但我似乎找不到任何说明如何做到的东西。似乎必须专门创建容器才能使用特定命令启动 拥有一个通用容器并使用不同的参数启动它要比为特定情况创建许多不同的容器或设置和获取环境变量简单得多使用特定命令启动kubernetes容器,kubernetes,Kubernetes,使用fleet,我可以指定启动时在容器内运行的命令。这似乎在库伯内特斯身上也很容易做到,但我似乎找不到任何说明如何做到的东西。似乎必须专门创建容器才能使用特定命令启动 拥有一个通用容器并使用不同的参数启动它要比为特定情况创建许多不同的容器或设置和获取环境变量简单得多 是否可以指定kubernetes吊舱在启动时在Docker映像中运行的命令 我花了45分钟找这个。然后我发布了一个关于它的问题,并在9分钟后找到了解决方案 这暗示了我在卡桑德拉里面想要什么。图像下方的命令行: id: cassand
是否可以指定kubernetes吊舱在启动时在Docker映像中运行的命令 我花了45分钟找这个。然后我发布了一个关于它的问题,并在9分钟后找到了解决方案 这暗示了我在卡桑德拉里面想要什么。图像下方的
命令
行:
id: cassandra
kind: Pod
apiVersion: v1beta1
desiredState:
manifest:
version: v1beta1
id: cassandra
containers:
- name: cassandra
image: kubernetes/cassandra
command:
- /run.sh
cpu: 1000
ports:
- name: cql
containerPort: 9042
- name: thrift
containerPort: 9160
env:
- key: MAX_HEAP_SIZE
value: 512M
- key: HEAP_NEWSIZE
value: 100M
labels:
name: cassandra
尽管找到了解决方案,但如果Kubernetes项目中有明显的地方,我可以看到各种配置文件(pod、服务、复制控制器)的所有可能选项,那就太好了。对于那些希望使用带参数的命令的人,你需要提供一个数组 比如说
command: [ "bin/bash", "-c", "mycommand" ]
或者也
command:
- "bin/bash"
- "-c"
- "mycommand"
要回答Derek Mahar在上述评论中提出的问题: 如果可以使用命令指定所有参数,参数的用途是什么 Dockerfiles可以仅具有入口点或仅具有CMD,也可以同时具有两者 如果一起使用,则CMD中的任何内容都将作为参数传递给ENTRYPOINT中的命令,即
ENTRYPOINT ["print"]
CMD ["hello", "world"]
因此,在Kubernetes中,当您指定命令时
command: ["print"]
它将覆盖容器Dockerfile中Entrypoint的值
如果只指定参数,那么这些参数将被传递到容器入口点中的任何命令。为了在启动时指定在Docker映像中运行kubernetes pod的命令,我们需要在yaml文件中包含要传递的命令和参数的命令和参数字段。比如说,
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demo-command
spec:
containers:
- name: command-demo-container
image: ubuntu
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
除了可接受的答案外,您还可以在命令中使用具有来自机密的值的变量,如下所示:
command: ["/some_command","-instances=$(<VARIABLE_NAME>)"]
env:
- name: <VARIABLE_NAME>
valueFrom:
secretKeyRef:
name: <secret_name>
key: <secret_key>
command:[“/some_command”,“-instances=$()”]
环境:
-姓名:
价值来源:
secretKeyRef:
姓名:
关键:
AFAIK,目前有两个不错的选择:1)进入集群主页。这允许您浏览可用的REST命令及其对象详细信息。2) 直接查看代码中的API定义:我知道它不精确,但这是一个很好的参考。谢谢你们两位。这很有帮助。@AlexRobinson更新了代码链接,因为v1beta1已被弃用:现在,它被称为“name”而不是“key”。实际上,kubernetes是一个移动的目标,是一个次优记录的目标。一行是一个参数。如果您的参数中有空格,这很好,但是它不会被解析为多个参数如果您可以使用命令指定所有参数,那么参数的目的是什么呢,而且效果不好,上面有一个打字错误。它应该是ENTRYPOINT