介绍
欢迎来到你的第一个 Kubernetes 实验!本实验将向你介绍 Kubernetes,这是一个用于管理容器化应用程序的强大系统。通过本实验,你将创建并操作你的第一个 Kubernetes 部署。
如果你对容器或编排(orchestration)还不熟悉,请不要担心——我们会在实验过程中逐一解释每个概念。让我们开始探索 Kubernetes 的世界吧!
注意:本实验需要拉取镜像,但免费用户无法从实验环境中访问互联网。本实验仅限 Pro 用户使用。
欢迎来到你的第一个 Kubernetes 实验!本实验将向你介绍 Kubernetes,这是一个用于管理容器化应用程序的强大系统。通过本实验,你将创建并操作你的第一个 Kubernetes 部署。
如果你对容器或编排(orchestration)还不熟悉,请不要担心——我们会在实验过程中逐一解释每个概念。让我们开始探索 Kubernetes 的世界吧!
注意:本实验需要拉取镜像,但免费用户无法从实验环境中访问互联网。本实验仅限 Pro 用户使用。
我们将从使用 Minikube 创建一个本地 Kubernetes 集群开始。Minikube 允许你在计算机上运行一个单节点的 Kubernetes 集群,非常适合学习和开发。
首先,打开你的终端。你应该位于 /home/labex/project
目录中。如果不确定,可以通过以下命令切换到该目录:
cd /home/labex/project
现在,让我们启动 Minikube 集群:
注意:免费用户无法连接到互联网,因此 Minikube 已预先安装在实验室环境中。你可以跳过此步骤。升级为专业用户 以练习自行启动集群。
minikube start
此命令会在你的本地机器上初始化一个 Kubernetes 集群。以下是背后发生的事情:
这个过程可能需要几分钟。你会看到 Minikube 工作时输出大量信息。如果不理解所有内容,请不要担心——关键是等待最后出现“Done!”的消息。
现在我们的集群已经运行起来了,让我们创建第一个 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。但它具体做了什么呢?
现在我们已经创建了一个 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
你应该会看到 HTML 内容——这是 NGINX 的欢迎页面!
如果你没有看到 HTML:
要停止端口转发,请回到原始终端窗口并按 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 的第一步。你学会了如何:
这些是使用 Kubernetes 的基础技能,它们构成了进一步学习和工作的基石。随着你继续学习,你将基于这些基础知识创建更复杂的应用程序,并理解更高级的 Kubernetes 概念。
请记住,Kubernetes 是一个强大而复杂的系统。如果某些概念仍然不清楚,这是很正常的——学习 Kubernetes 是一个持续的过程。继续练习,你会逐渐建立更深入的理解。祝你在 Kubernetes 学习之旅中一切顺利!