为容器定义命令和参数

此页面展示了如何在 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)"]

这意味着您可以使用任何可用于定义环境变量的技术(包括 ConfigMapsSecrets)为 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)