Kubernetes Run 命令

KubernetesKubernetesBeginner
立即练习

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

简介

kubectl run 命令是在 Kubernetes 中创建资源的最简单且最通用的方式之一。它允许你快速部署容器、创建用于批处理的任务(job),或设置部署(deployment)以管理应用程序的多个副本。本实验旨在帮助初学者理解 kubectl run 命令的基础知识以及如何有效地使用它。

在本实验结束时,你将学习如何:

  1. 启动并验证 Minikube 集群。
  2. 使用 kubectl run 创建一个 Pod。
  3. 创建具有多个副本的部署(deployment)。
  4. 运行一个用于批处理的任务(job)。
  5. 清理资源以维护你的集群。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("Expose") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/initialization -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/get -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/create -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/delete -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/expose -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/run -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/scale -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/describe -.-> lab-8456{{"Kubernetes Run 命令"}} kubernetes/logs -.-> lab-8456{{"Kubernetes Run 命令"}} 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 run 命令

kubectl run 命令用于在 Pod 中创建并运行特定的镜像。它提供了多种选项来定制 Pod 的行为、环境和规格。

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

kubectl run -h

你将看到以下输出:

在 Pod 中创建并运行特定的镜像。

示例:
## 启动一个 nginx Pod
kubectl run nginx --image=nginx

## 启动一个 hazelcast Pod 并让容器暴露端口 5701
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701

## 启动一个 hazelcast Pod 并在容器中设置环境变量 "DNS_DOMAIN=cluster" 和 "POD_NAMESPACE=default"
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"

## 启动一个 hazelcast Pod 并在容器中设置标签 "app=hazelcast" 和 "env=prod"
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"

## 试运行;打印相应的 API 对象而不创建它们
kubectl run nginx --image=nginx --dry-run=client

## 启动一个 nginx Pod,但使用从 JSON 解析的部分值覆盖 spec
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'

## 启动一个 busybox Pod 并保持在前台运行,如果退出则不重启
kubectl run -i -t busybox --image=busybox --restart=Never

## 使用默认命令启动 nginx Pod,但为该命令使用自定义参数 (arg1 .. argN)
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>

## 使用不同的命令和自定义参数启动 nginx Pod
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>

创建一个 Pod

Pod 是 Kubernetes 中最小的可部署单元,代表一个或多个一起运行的容器。在此步骤中,我们将创建一个运行 Nginx Web 服务器的 Pod。

  1. 创建 Pod

    运行以下命令以创建一个名为 nginx-pod 的 Pod:

    kubectl run nginx-pod --image=nginx
    • --image 选项指定要使用的容器镜像。这里我们使用官方的 Nginx 镜像。
  2. 验证 Pod

    检查 Pod 是否正在运行:

    kubectl get pods
    • 在输出中查找 nginx-pod
    • 当 Pod 准备就绪时,STATUS 列应显示为 Running

如果 Pod 状态显示为 Pending,Kubernetes 可能仍在拉取容器镜像。请稍等片刻,然后重新运行 kubectl get pods

创建 Deployment 并扩展副本

Deployment 管理一组 Pod 并确保它们按预期运行。它对于扩展和更新应用程序非常有用。

  1. 创建 Deployment

    运行以下命令以创建一个名为 nginx-deployment 的 Deployment:

    kubectl create deployment nginx-deployment --image=nginx
    • --image 选项指定要使用的容器镜像。
  2. 将 Deployment 扩展为 3 个副本

    由于 --replicas 标志已被弃用,我们将改用 kubectl scale 来扩展 Deployment。

    使用 kubectl scale 命令调整副本数量:

    kubectl scale deployment nginx-deployment --replicas=3
    • 这将确保三个 Pod 作为 Deployment 的一部分运行。
  3. 验证 Deployment 及其副本

    检查 Deployment 和 Pod 的状态:

    kubectl get deployments
    kubectl get pods
    • 确保 Deployment 在 READY 列下显示 3 个副本。
    • 验证 kubectl get pods 的输出中列出了三个 Pod。

如果某个 Pod 未处于 Running 状态,可能是由于集群资源不足。可以使用以下命令检查 Pod 事件:

kubectl describe pod <pod-name>

创建一个 Job

Job 用于运行需要成功完成的任务,例如批处理作业或数据处理任务。我们将使用 kubectl run 创建一个 Job 并验证其执行情况。

  1. 创建 Job

运行以下命令以创建一个名为 busybox-job 的 Job:

kubectl run busybox-job --image=busybox --restart=OnFailure -- echo "Hello from Kubernetes"
  • --restart=OnFailure 标志指定这是一个 Job。
  • echo 命令定义了 Job 将执行的任务。
  1. 检查 Job 状态

运行以下命令以验证 Job:

kubectl get jobs

预期输出:

NAME          COMPLETIONS   DURATION   AGE
busybox-job   1/1           5s         10s
  • COMPLETIONS:显示 Job 成功运行了一次(1/1)。
  • 如果未列出 Job,它可能已被自动清理。请继续下一步以检查其 Pod。
  1. 验证 Job 的 Pod

由于 Job 在 Pod 中运行,使用以下命令验证 Pod:

kubectl get pods

预期输出:

NAME               READY   STATUS      RESTARTS   AGE
busybox-job        0/1     Completed   0          30s
  • STATUS 字段应显示 Completed,表示 Job 已完成。
  1. 检查 Job 输出

检查 Job 的 Pod 日志以验证输出:

kubectl logs busybox-job

预期输出:

Hello from Kubernetes

这确认 Job 已成功执行。

清理

为了保持集群的整洁,请删除在实验期间创建的资源。

  1. 删除资源

    运行以下命令:

    kubectl delete pod nginx-pod
    kubectl delete pod busybox-job
    kubectl delete deployment nginx-deployment
  2. 验证清理

    检查是否没有剩余资源:

    kubectl get pods
    kubectl get deployments
    • 确保输出中未列出你创建的资源。

总结

在本实验中,你学习了如何:

  1. 启动并验证 Minikube 集群。
  2. 使用 kubectl run 创建和管理 Pod、Deployment 和 Job。
  3. 清理资源以保持集群的整洁。

kubectl run 命令提供了一种简单而强大的方式来部署应用程序并管理 Kubernetes 中的工作负载。通过练习这些步骤,你可以为更高级的 Kubernetes 工作流打下坚实的基础。