介绍
kubectl run 命令是在 Kubernetes 中创建资源的最简单且最通用的方式之一。它允许你快速部署容器、创建用于批处理的任务(job),或设置部署(deployment)以管理应用程序的多个副本。本实验旨在帮助初学者理解 kubectl run 命令的基础知识以及如何有效地使用它。
在本实验结束时,你将学习如何:
- 启动并验证 Minikube 集群。
- 使用
kubectl run创建一个 Pod。 - 创建具有多个副本的部署(deployment)。
- 运行一个用于批处理的任务(job)。
- 清理资源以维护你的集群。
启动 Minikube 集群
在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。
导航到工作目录:
打开终端并导航到默认的项目文件夹:
cd /home/labex/project启动 Minikube:
启动 Minikube 以初始化一个 Kubernetes 集群:
minikube start- 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
- 根据系统性能,Minikube 可能需要几分钟才能启动。
验证 Minikube 是否正在运行:
检查 Minikube 集群的状态:
minikube status- 查找
kubelet和apiserver等组件是否显示为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。
创建 Pod:
运行以下命令以创建一个名为
nginx-pod的 Pod:kubectl run nginx-pod --image=nginx--image选项指定要使用的容器镜像。这里我们使用官方的 Nginx 镜像。
验证 Pod:
检查 Pod 是否正在运行:
kubectl get pods- 在输出中查找
nginx-pod。 - 当 Pod 准备就绪时,
STATUS列应显示为Running。
- 在输出中查找
如果 Pod 状态显示为 Pending,Kubernetes 可能仍在拉取容器镜像。请稍等片刻,然后重新运行 kubectl get pods。
创建 Deployment 并扩展副本
Deployment 管理一组 Pod 并确保它们按预期运行。它对于扩展和更新应用程序非常有用。
创建 Deployment:
运行以下命令以创建一个名为
nginx-deployment的 Deployment:kubectl create deployment nginx-deployment --image=nginx--image选项指定要使用的容器镜像。
将 Deployment 扩展为 3 个副本:
由于
--replicas标志已被弃用,我们将改用kubectl scale来扩展 Deployment。使用
kubectl scale命令调整副本数量:kubectl scale deployment nginx-deployment --replicas=3- 这将确保三个 Pod 作为 Deployment 的一部分运行。
验证 Deployment 及其副本:
检查 Deployment 和 Pod 的状态:
kubectl get deployments kubectl get pods- 确保 Deployment 在
READY列下显示 3 个副本。 - 验证
kubectl get pods的输出中列出了三个 Pod。
- 确保 Deployment 在
如果某个 Pod 未处于 Running 状态,可能是由于集群资源不足。可以使用以下命令检查 Pod 事件:
kubectl describe pod <pod-name>
创建一个 Job
Job 用于运行需要成功完成的任务,例如批处理作业或数据处理任务。我们将使用 kubectl run 创建一个 Job 并验证其执行情况。
- 创建 Job
运行以下命令以创建一个名为 busybox-job 的 Job:
kubectl run busybox-job --image=busybox --restart=OnFailure -- echo "Hello from Kubernetes"
--restart=OnFailure标志指定这是一个 Job。echo命令定义了 Job 将执行的任务。
- 检查 Job 状态
运行以下命令以验证 Job:
kubectl get jobs
预期输出:
NAME COMPLETIONS DURATION AGE
busybox-job 1/1 5s 10s
COMPLETIONS:显示 Job 成功运行了一次(1/1)。- 如果未列出 Job,它可能已被自动清理。请继续下一步以检查其 Pod。
- 验证 Job 的 Pod
由于 Job 在 Pod 中运行,使用以下命令验证 Pod:
kubectl get pods
预期输出:
NAME READY STATUS RESTARTS AGE
busybox-job 0/1 Completed 0 30s
STATUS字段应显示Completed,表示 Job 已完成。
- 检查 Job 输出
检查 Job 的 Pod 日志以验证输出:
kubectl logs busybox-job
预期输出:
Hello from Kubernetes
这确认 Job 已成功执行。
清理
为了保持集群的整洁,请删除在实验期间创建的资源。
删除资源:
运行以下命令:
kubectl delete pod nginx-pod kubectl delete pod busybox-job kubectl delete deployment nginx-deployment验证清理:
检查是否没有剩余资源:
kubectl get pods kubectl get deployments- 确保输出中未列出你创建的资源。
总结
在本实验中,你学习了如何:
- 启动并验证 Minikube 集群。
- 使用
kubectl run创建和管理 Pod、Deployment 和 Job。 - 清理资源以保持集群的整洁。
kubectl run 命令提供了一种简单而强大的方式来部署应用程序并管理 Kubernetes 中的工作负载。通过练习这些步骤,你可以为更高级的 Kubernetes 工作流打下坚实的基础。


