简介
kubectl run 命令是 Kubernetes 中创建 Pod 的一种简单方式。现代 Kubernetes 版本不再使用 kubectl run 来创建 Deployment 或 Job,因此本实验将 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
你将看到如下输出:
Create and run a particular image in a pod.
Examples:
## Start a nginx pod
kubectl run nginx --image=nginx
## Start a hazelcast pod and let the container expose port 5701
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701
## Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
## Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"
## Dry run; print the corresponding API objects without creating them
kubectl run nginx --image=nginx --dry-run=client
## Start a nginx pod, but overload the spec with a partial set of values parsed from JSON
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
## Start a busybox pod and keep it in the foreground, don't restart it if it exits
kubectl run -i -t busybox --image=busybox --restart=Never
## Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>
## Start the nginx pod using a different command and custom arguments
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- 这将确保有 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
在本步骤中,你将创建一个 Kubernetes Job 来运行一个短期的批处理任务。Job 会跟踪任务的成功完成情况,因此当命令需要运行并退出(而不是像长期运行的 Pod 那样持续运行)时,它是最合适的资源。
- 创建 Job
运行以下命令创建一个名为 busybox-job 的 Job:
kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
kubectl create job创建的是 Job 资源,而不是独立的 Pod。echo命令定义了 Job 将要执行的任务。
- 检查 Job 状态
运行以下命令验证 Job:
kubectl get jobs
预期输出:
NAME COMPLETIONS DURATION AGE
busybox-job 1/1 5s 10s
COMPLETIONS:显示 Job 已成功运行一次 (1/1)。- 如果尚未列出 Job,请等待几秒钟并再次运行
kubectl get jobs。
- 验证 Job 的 Pod
由于 Job 在 Pod 内部运行,请使用以下命令验证 Pod:
kubectl get pods
预期输出:
NAME READY STATUS RESTARTS AGE
busybox-job-abcde 0/1 Completed 0 30s
- Pod 名称包含一个生成的后缀,因为它由 Job 所拥有。
STATUS字段应显示Completed,表明 Job 的 Pod 已成功完成。
- 检查 Job 输出
查看 Job 的日志以验证输出:
kubectl logs job/busybox-job
预期输出:
Hello from Kubernetes
这确认了 Job 已成功执行。
清理
为了保持集群整洁,请删除你在实验过程中创建的资源。
删除资源:
运行以下命令:
kubectl delete pod nginx-pod kubectl delete deployment nginx-deployment kubectl delete job busybox-job验证清理结果:
检查是否还有剩余资源:
kubectl get pods kubectl get deployments- 确保输出中不再列出你刚才创建的资源。
总结
在本实验中,你学习了如何:
- 启动并验证 Minikube 集群。
- 使用
kubectl run创建 Pod,并使用专用命令创建 Deployment 和 Job。 - 清理资源以保持集群整洁。
你还了解了 Kubernetes 如何针对不同类型的工作负载使用不同的命令。通过练习这些步骤,你可以为更高级的 Kubernetes 工作流打下坚实的基础。


