Kubernetes Exec 命令

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何使用 Kubernetes 的 exec 命令在运行于 Kubernetes pod 中的容器内执行命令。你将从简单的示例开始,逐步过渡到更复杂的场景。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/get("`Get`") kubernetes/BasicCommandsGroup -.-> kubernetes/run("`Run`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("`Exec`") subgraph Lab Skills kubernetes/initialization -.-> lab-8502{{"`Kubernetes Exec 命令`"}} kubernetes/get -.-> lab-8502{{"`Kubernetes Exec 命令`"}} kubernetes/run -.-> lab-8502{{"`Kubernetes Exec 命令`"}} kubernetes/describe -.-> lab-8502{{"`Kubernetes Exec 命令`"}} kubernetes/exec -.-> lab-8502{{"`Kubernetes Exec 命令`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 重置环境(如有需要)。

探索 kubectl exec 命令

kubectl exec 命令用于直接在 pod 中的容器内执行命令。它在调试和检查容器环境时特别有用。

运行以下命令以查看 kubectl exec 的可用选项:

kubectl exec -h

你将看到以下输出:

在容器中执行命令。

示例:
  ## 从 pod mypod 中运行 'date' 命令并获取输出,默认使用第一个容器
  kubectl exec mypod -- date

  ## 从 pod mypod 的 ruby-container 容器中运行 'date' 命令并获取输出
  kubectl exec mypod -c ruby-container -- date

  ## 切换到原始终端模式;将 stdin 发送到 pod mypod 的 ruby-container 容器中的 'bash'
  ## 并将 'bash' 的 stdout/stderr 发送回客户端
  kubectl exec mypod -c ruby-container -i -t -- bash -il

  ## 列出 pod mypod 的第一个容器中 /usr 目录的内容并按修改时间排序
  ## 如果你想在 pod 中执行的命令有任何共同的标志(例如 -i),
  ## 你必须使用两个破折号(--)来分隔命令的标志/参数
  ## 另外请注意,不要用引号包围命令及其标志/参数,
  ## 除非这是你通常执行它的方式(即,执行 ls -t /usr,而不是 "ls -t /usr")
  kubectl exec mypod -i -t -- ls -t /usr

  ## 从部署 mydeployment 的第一个 pod 中运行 'date' 命令并获取输出,默认使用第一个容器
  kubectl exec deploy/mydeployment -- date

  ## 从服务 myservice 的第一个 pod 中运行 'date' 命令并获取输出,默认使用第一个容器
  kubectl exec svc/myservice -- date

在容器中执行命令

在本步骤中,你将学习如何在运行于 pod 中的容器内执行命令。

  1. 首先创建一个包含一个副本和 Nginx 容器的部署:

    kubectl create deployment nginx --image=nginx --replicas=1
  2. 等待 pod 变为就绪状态:

    kubectl wait --for=condition=Ready pod -l app=nginx
  3. 使用 kubectl exec 命令在 Nginx 容器内执行命令:

    kubectl -it /bin/bash < pod_name > --

    <pod_name> 替换为步骤 1 中创建的 pod 的名称,你可以通过 kubectl get pod -l app=nginx 命令获取 <pod_name>

在特定容器中执行命令

在本步骤中,你将学习如何在运行多个容器的 pod 中执行特定容器内的命令。

  1. 创建一个包含两个容器(Nginx 和 BusyBox)的 pod:

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-busybox
    spec:
      containers:
      - name: nginx
        image: nginx
      - name: busybox
        image: busybox
        command:
          - sleep
          - "3600"
    EOF
  2. 等待 pod 变为就绪状态:

    kubectl wait --for=condition=Ready pod nginx-busybox
  3. 使用 kubectl exec 命令在 BusyBox 容器内执行命令:

    kubectl exec nginx-busybox -c busybox -- ls /bin

使用 Tty 执行命令

在本步骤中,你将学习如何在容器中使用 tty 执行命令。

  1. 使用 kubectl exec 命令并添加 -it 选项以通过 tty 执行命令:

    kubectl exec -it nginx-busybox -- /bin/sh
  2. 进入容器 shell 后,运行以下命令:

    echo "Hello, world!"
  3. 退出容器 shell:

    exit

使用环境变量执行命令

在本步骤中,你将学习如何在容器内使用环境变量执行命令。

  1. 创建一个包含一个副本和带有环境变量的 Nginx 容器的部署:

    kubectl run nginx-env --image=nginx --env="MY_VAR=my-value"
  2. 等待 pod 变为就绪状态:

    kubectl wait --for=condition=Ready pod -l run=nginx-env
  3. 使用 kubectl exec 命令在 Nginx 容器内执行命令以输出环境变量:

    kubectl exec nginx-env -- sh -c 'echo $MY_VAR'

    nginx-env 替换为步骤 1 中创建的 pod 的名称。

总结

恭喜你,你已成功完成 Kubernetes exec 命令实验!在本实验中,你学习了如何使用 kubectl exec 命令在运行于 Kubernetes pod 中的容器内执行命令。你还学习了如何在特定容器中执行命令、使用 tty 执行命令以及使用环境变量执行命令。这些技能对于调试 Kubernetes 集群中的问题至关重要。

您可能感兴趣的其他 Kubernetes 教程