模块 3 - 探索你的应用
难度:初级 预计时间: 10 分钟
在本场景中,你将学习如何使用 kubectl 的 get、describe、logs 和 exec 命令来排除 Kubernetes 应用程序的故障。
步骤 1 - 检查应用程序配置
我们来验证一下在上一场景中部署的应用是否正在运行。我们将使用 kubectl get
命令并查找现有的 Pods。
kubectl get pods
接下来,要查看 Pod 中包含哪些容器以及用于构建这些容器的镜像是哪些,我们运行 describe pods
命令。
kubectl describe pods
我们在这里看到了 Pod 容器的详细信息:IP 地址、使用的端口以及与 Pod 生命周期相关的事件列表。
describe
命令的输出内容很广泛,涵盖了一些我们尚未解释的概念,但别担心,在本训练营结束时你会熟悉它们。
注意:describe
命令可用于获取大多数 Kubernetes 原语的详细信息:node、pods、deployments。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 https://: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
。