为容器定义命令和参数

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

开始之前

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

要检查版本,请输入 kubectl version

创建 Pod 时定义命令和参数

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

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

在此练习中,你将创建一个运行一个容器的 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 PM:更新 define-command-argument-container.md (631e9a23e4)