为容器定义命令和参数

本页面展示了如何在 Pod 中运行容器时定义命令和参数。

准备开始

你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具与你的集群进行通信。建议在至少有两个非控制平面主机的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用这些 Kubernetes 游乐场之一

要检查版本,请输入 kubectl version

创建 Pod 时定义命令和参数

创建 Pod 时,可以为在 Pod 中运行的容器定义命令和参数。要定义命令,请在配置文件中包含 command 字段。要定义命令的参数,请在配置文件中包含 args 字段。定义命令和参数后,Pod 创建后将无法更改。

你在配置文件中定义的命令和参数会覆盖容器镜像提供的默认命令和参数。如果你定义了 args,但没有定义命令,则将使用你的新参数执行默认命令。

在本练习中,你将创建一个运行一个容器的 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
  1. 基于 YAML 配置文件创建 Pod

    kubectl apply -f https://k8s.io/examples/pods/commands.yaml
    
  2. 列出正在运行的 Pod

    kubectl get pods
    

    输出显示在 command-demo Pod 中运行的容器已完成。

  3. 要查看容器中运行的命令的输出,请查看 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)"]

这意味着你可以使用定义环境变量的任何可用技术(包括 ConfigMapSecrets)为 Pod 定义参数。

在 shell 中运行命令

在某些情况下,你需要命令在 shell 中运行。例如,你的命令可能由管道连接的多个命令组成,或者它可能是一个 shell 脚本。要在 shell 中运行命令,请将其包装如下

command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]

下一步

最后修改时间 2024 年 4 月 17 日下午 8:20 PST:更新 define-command-argument-container.md (631e9a23e4)