模块 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
。