你的第一个 Kubernetes 实验

KubernetesKubernetesBeginner
立即练习

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

介绍

欢迎来到你的第一个 Kubernetes 实验!本实验将向你介绍 Kubernetes,这是一个用于管理容器化应用程序的强大系统。通过本实验,你将创建并操作你的第一个 Kubernetes 部署。

如果你对容器或编排(orchestration)还不熟悉,请不要担心——我们会在实验过程中逐一解释每个概念。让我们开始探索 Kubernetes 的世界吧!

注意:本实验需要拉取镜像,但免费用户无法从实验环境中访问互联网。本实验仅限 Pro 用户使用。


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/create("`Create`") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("`Delete`") kubernetes/BasicCommandsGroup -.-> kubernetes/run("`Run`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("`Exec`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("`Logs`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/port_forward("`Port-Forward`") subgraph Lab Skills kubernetes/initialization -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/get -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/create -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/delete -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/run -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/describe -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/exec -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/logs -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} kubernetes/port_forward -.-> lab-391133{{"`你的第一个 Kubernetes 实验`"}} end

启动你的 Kubernetes 集群

我们将从使用 Minikube 创建一个本地 Kubernetes 集群开始。Minikube 允许你在计算机上运行一个单节点的 Kubernetes 集群,非常适合学习和开发。

首先,打开你的终端。你应该位于 /home/labex/project 目录中。如果不确定,可以通过以下命令切换到该目录:

cd /home/labex/project

现在,让我们启动 Minikube 集群:

注意:免费用户无法连接到互联网,因此 Minikube 已预先安装在实验室环境中。你可以跳过此步骤。升级为专业用户 以练习自行启动集群。

Pro Users Only
minikube start
Minikube 集群初始化

此命令会在你的本地机器上初始化一个 Kubernetes 集群。以下是背后发生的事情:

  1. Minikube 在你的计算机上创建一个虚拟机(VM)。
  2. 它在这个虚拟机中安装并配置 Kubernetes。
  3. 它设置网络,以便你的计算机可以与集群通信。

这个过程可能需要几分钟。你会看到 Minikube 工作时输出大量信息。如果不理解所有内容,请不要担心——关键是等待最后出现“Done!”的消息。

创建你的第一个 Deployment

现在我们的集群已经运行起来了,让我们创建第一个 Kubernetes Deployment。Deployment 是一个 Kubernetes 对象,用于管理一组相同的 Pod。(别担心,我们很快就会解释什么是 Pod!)

我们将创建一个运行单个 NGINX Web 服务器容器的 Deployment。NGINX 是一个流行的 Web 服务器,我们将在这个示例中使用它。

运行以下命令:

kubectl create deployment hello-kubernetes --image=nginx:latest --port=80

让我们分解一下这个命令:

  • kubectl 是与 Kubernetes 交互的命令行工具。
  • create deployment 告诉 Kubernetes 创建一个新的 Deployment。
  • hello-kubernetes 是我们为 Deployment 指定的名称。
  • --image=nginx:latest 指定我们希望使用最新版本的 NGINX Docker 镜像。
  • --port=80 告诉 Kubernetes 容器将监听 80 端口(Web 流量的标准端口)。

运行此命令后,你应该会看到:

deployment.apps/hello-kubernetes created

这意味着 Kubernetes 已成功创建了你的 Deployment。但它具体做了什么呢?

  1. Kubernetes 下载了 NGINX Docker 镜像。
  2. 它创建了一个 Pod(一个或多个容器的组),并在其中启动了 NGINX 容器。
  3. 它设置了网络,以便可以通过 80 端口访问该 Pod。

检查你的 Deployment

现在我们已经创建了一个 Deployment,让我们仔细看看 Kubernetes 为我们设置了什么。

首先,检查我们的 Deployment 状态:

kubectl get deployments

你应该会看到类似以下内容:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
hello-kubernetes   1/1     1            1           2m

这个输出告诉我们:

  • READY: 1/1 表示一个 Pod 已准备就绪,符合期望的一个 Pod。
  • UP-TO-DATE: 1 表示一个 Pod 正在运行最新的配置。
  • AVAILABLE: 1 表示一个 Pod 可以处理流量。

接下来,让我们看看 Deployment 创建的 Pod:

kubectl get pods

你应该会看到类似以下内容:

NAME                                READY   STATUS    RESTARTS   AGE
hello-kubernetes-6b89d599b9-x7tpv   1/1     Running   0          3m

确切的 Pod 名称会有所不同,但你应该会看到一个状态为“Running”的 Pod。这个 Pod 包含了我们的 NGINX 容器。

如果你没有看到运行中的 Pod,请等待一分钟再试一次。Kubernetes 可能仍在创建 Pod 或下载 NGINX 镜像。

要获取有关 Pod 的更多详细信息,请运行:

kubectl describe pod hello-kubernetes-6b89d599b9-x7tpv

注意: 将 hello-kubernetes-6b89d599b9-x7tpv 替换为 kubectl get pods 输出中显示的你的 Pod 名称。

此命令会输出大量信息。现在不必担心理解所有内容。需要注意的关键点包括:

  • Status: 应该是“Running”
  • IP: Pod 的内部 IP 地址
  • Containers: 有关 Pod 中运行的 NGINX 容器的信息

如果你在此输出中看到任何错误,它们可以帮助诊断 Pod 的问题。

访问你的应用程序

现在我们的 Deployment 已经运行起来了,让我们访问我们部署的 NGINX Web 服务器。

在典型的 Kubernetes 环境中,我们会创建一个 Service 来将我们的 Deployment 暴露到网络中。为了简化本地环境中的操作,我们将使用端口转发(port forwarding)来代替。

运行以下命令:

kubectl port-forward $(kubectl get pods -o name) 8080:80

这个命令的作用如下:

  • $(kubectl get pods -o name) 获取我们的 Pod 名称。
  • 8080:80 告诉 Kubernetes 将本地机器的 8080 端口流量转发到 Pod 的 80 端口。

你不会看到任何输出,但命令会持续运行。这是正常的!

现在,打开一个新的终端窗口并运行:

curl http://localhost:8080
NGINX 欢迎页面显示

你应该会看到 HTML 内容——这是 NGINX 的欢迎页面!

如果你没有看到 HTML:

  • 确保端口转发命令仍在另一个终端中运行。
  • 检查你是否正确输入了 curl 命令。
  • 如果 curl 不起作用,尝试在 Web 浏览器中访问 http://localhost:8080

要停止端口转发,请回到原始终端窗口并按 Ctrl+C

清理资源

干得漂亮!你已经成功在 Kubernetes 上部署并访问了一个应用程序。现在,让我们清理我们的资源。

首先,删除我们的 Deployment:

kubectl delete deployment hello-kubernetes

你应该会看到:

deployment.apps "hello-kubernetes" deleted

这个命令告诉 Kubernetes 删除 Deployment 及其所有相关资源,包括 Pod。

验证 Deployment 和 Pod 是否已被删除:

kubectl get deployments
kubectl get pods

这两个命令都应该返回“No resources found in default namespace.”(在默认命名空间中没有找到资源)。

如果你仍然看到资源,请稍等片刻再试一次。Kubernetes 可能仍在删除过程中。

最后,停止 Minikube 集群:

minikube stop

这会停止 Minikube 虚拟机,但会保留集群的状态。你可以稍后使用 minikube start 重新启动它。

如果你想完全删除 Minikube 集群,可以运行 minikube delete。不过,目前没有必要这样做。

总结

恭喜你!在这个实验中,你已经迈出了使用 Kubernetes 的第一步。你学会了如何:

  1. 使用 Minikube 启动一个本地 Kubernetes 集群
  2. 使用 kubectl 创建一个 Deployment
  3. 检查你的 Deployment 及其创建的 Pod
  4. 使用端口转发访问你部署的应用程序
  5. 清理资源并停止集群

这些是使用 Kubernetes 的基础技能,它们构成了进一步学习和工作的基石。随着你继续学习,你将基于这些基础知识创建更复杂的应用程序,并理解更高级的 Kubernetes 概念。

请记住,Kubernetes 是一个强大而复杂的系统。如果某些概念仍然不清楚,这是很正常的——学习 Kubernetes 是一个持续的过程。继续练习,你会逐渐建立更深入的理解。祝你在 Kubernetes 学习之旅中一切顺利!

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