为容器定义命令和参数
此页面展示了如何在 Pod 中运行容器时定义命令和参数。
开始之前
您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点(不充当控制平面主机)的集群上运行本教程。如果您还没有集群,可以使用 minikube 创建一个集群,或者可以使用以下 Kubernetes 游乐场之一
要检查版本,请输入kubectl version
。在创建 Pod 时定义命令和参数
创建 Pod 时,可以为 Pod 中运行的容器定义命令和参数。要定义命令,请在配置文件中包含 command
字段。要为命令定义参数,请在配置文件中包含 args
字段。在创建 Pod 后,无法更改您定义的命令和参数。
您在配置文件中定义的命令和参数将覆盖容器镜像提供的默认命令和参数。如果您定义了 args,但没有定义命令,则将使用默认命令和您的新参数。
注意
command
字段对应于 ENTRYPOINT
,args
字段对应于某些容器运行时的 CMD
。在本练习中,您将创建一个运行一个容器的 Pod。Pod 的配置文件定义了一个命令和两个参数
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args: ["HOSTNAME", "KUBERNETES_PORT"]
restartPolicy: OnFailure
基于 YAML 配置文件创建 Pod
kubectl apply -f https://k8s.io/examples/pods/commands.yaml
列出正在运行的 Pod
kubectl get pods
输出显示在 command-demo Pod 中运行的容器已完成。
要查看在容器中运行的命令的输出,请查看 Pod 的日志
kubectl logs command-demo
输出显示 HOSTNAME 和 KUBERNETES_PORT 环境变量的值
command-demo tcp://10.3.240.1:443
使用环境变量定义参数
在前面的示例中,您通过提供字符串直接定义了参数。作为直接提供字符串的替代方法,可以使用环境变量定义参数
env:
- name: MESSAGE
value: "hello world"
command: ["/bin/echo"]
args: ["$(MESSAGE)"]
这意味着您可以使用任何可用于定义环境变量的技术(包括 ConfigMaps 和 Secrets)为 Pod 定义参数。
注意
环境变量出现在括号中,"$(VAR)"
。这是在 command
或 args
字段中扩展变量所必需的。在 shell 中运行命令
在某些情况下,您需要在 shell 中运行命令。例如,您的命令可能包含多个管道在一起的命令,或者它可能是一个 shell 脚本。要在 shell 中运行命令,请将其包装起来,如下所示
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
下一步
- 详细了解 配置 Pod 和容器。
- 详细了解 在容器中运行命令。
- 请参阅 Container。
上次修改时间:2024 年 4 月 17 日下午 8:20 PST:更新 define-command-argument-container.md (631e9a23e4)