模块 3 - 探索你的应用

难度:初学者 预计时间: 10 分钟

在这个场景中,你将学习如何使用 kubectl get、describe、logs 和 exec 命令来排查 Kubernetes 应用程序的故障。

步骤 1 - 检查应用程序配置

让我们验证一下我们在上一个场景中部署的应用程序是否正在运行。我们将使用 kubectl get 命令并查找现有的 Pod。

kubectl get pods

接下来,要查看该 Pod 内有哪些容器以及用于构建这些容器的镜像,我们运行 describe pods 命令。

kubectl describe pods

在这里,我们看到了有关 Pod 容器的详细信息:IP 地址、使用的端口以及与 Pod 生命周期相关的事件列表。

describe 命令的输出非常广泛,涵盖了一些我们尚未解释的概念,但请不要担心,在本训练营结束时,它们会变得熟悉。

注意:describe 命令可用于获取有关大多数 Kubernetes 原语的详细信息:节点、Pod、部署。describe 的输出旨在供人类阅读,而不是用于脚本编写。

步骤 2 - 在终端中显示应用程序

回想一下,Pod 是在隔离的私有网络中运行的 - 因此我们需要代理对它们的访问,以便我们可以调试并与它们进行交互。为此,我们将使用 kubectl proxy 命令在第二个终端窗口中运行代理。在新的终端窗口中运行以下命令以运行代理

echo -e "Starting Proxy. After starting it will not output a response. Please return to your original terminal window\n"; kubectl proxy

现在,我们将再次获取 Pod 名称并通过代理直接查询该 Pod。要获取 Pod 名称并将其存储在 POD_NAME 环境变量中

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME

要查看我们应用程序的输出,请运行 curl 请求。

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME

该 URL 是 Pod 的 API 的路由。

步骤 3 - 查看容器日志

应用程序通常发送到 STDOUT 的任何内容都会成为 Pod 内容器的日志。我们可以使用 kubectl logs 命令检索这些日志

kubectl logs $POD_NAME

*注意:我们不需要指定容器名称,因为我们 Pod 内只有一个容器。

步骤 4 - 在容器上执行命令

一旦 Pod 启动并运行,我们就可以直接在容器上执行命令。为此,我们使用 exec 命令,并将 Pod 的名称作为参数。让我们列出环境变量

kubectl exec $POD_NAME -- env

同样,值得一提的是,由于 Pod 中只有一个容器,因此容器本身的名称可以省略。

接下来,让我们在 Pod 的容器中启动一个 bash 会话

kubectl exec -ti $POD_NAME -- bash

我们现在在运行 NodeJS 应用程序的容器上打开了一个控制台。应用程序的源代码在 server.js 文件中

cat server.js

你可以通过运行 curl 命令来检查应用程序是否已启动

curl localhost:8080

注意:这里我们使用 localhost 是因为我们在 NodeJS Pod 内执行了命令。如果无法连接到 localhost:8080,请检查以确保你已运行 kubectl exec 命令并且正在从 Pod 内部启动该命令

要关闭容器连接,请键入 exit


上次修改时间为 2024 年 7 月 18 日: site: Fix typo (6c39ab4e5)