Kubernetes Run 命令

KubernetesBeginner
立即练习

简介

kubectl run 命令是 Kubernetes 中创建 Pod 的一种简单方式。现代 Kubernetes 版本不再使用 kubectl run 来创建 Deployment 或 Job,因此本实验将 kubectl run 与这些资源专用的创建命令结合起来讲解。本实验旨在帮助初学者理解针对不同工作负载类型应使用哪种命令。

通过本实验,你将学习如何:

  1. 启动并验证 Minikube 集群。
  2. 使用 kubectl run 创建 Pod。
  3. 创建包含多个副本的 Deployment。
  4. 创建并检查用于批处理任务的 Job。
  5. 清理资源以维护集群环境。

启动 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

你将看到如下输出:

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。

  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
    
    • 这将确保有 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

在本步骤中,你将创建一个 Kubernetes Job 来运行一个短期的批处理任务。Job 会跟踪任务的成功完成情况,因此当命令需要运行并退出(而不是像长期运行的 Pod 那样持续运行)时,它是最合适的资源。

  1. 创建 Job

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

kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
  • kubectl create job 创建的是 Job 资源,而不是独立的 Pod。
  • echo 命令定义了 Job 将要执行的任务。
  1. 检查 Job 状态

运行以下命令验证 Job:

kubectl get jobs

预期输出:

NAME          COMPLETIONS   DURATION   AGE
busybox-job   1/1           5s         10s
  • COMPLETIONS:显示 Job 已成功运行一次 (1/1)。
  • 如果尚未列出 Job,请等待几秒钟并再次运行 kubectl get jobs
  1. 验证 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 已成功完成。
  1. 检查 Job 输出

查看 Job 的日志以验证输出:

kubectl logs job/busybox-job

预期输出:

Hello from Kubernetes

这确认了 Job 已成功执行。

清理

为了保持集群整洁,请删除你在实验过程中创建的资源。

  1. 删除资源

    运行以下命令:

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

    检查是否还有剩余资源:

    kubectl get pods
    kubectl get deployments
    
    • 确保输出中不再列出你刚才创建的资源。

总结

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

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

你还了解了 Kubernetes 如何针对不同类型的工作负载使用不同的命令。通过练习这些步骤,你可以为更高级的 Kubernetes 工作流打下坚实的基础。