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


上次修改日期:2024 年 7 月 18 日:site: 修复错别字 (6c39ab4e5)