为容器定义命令和参数

此页面介绍了在 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)"]

这意味着您可以使用可用于定义环境变量的任何技术来定义 Pod 的参数,包括 ConfigMapsSecrets

在 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)