Kubernetes可观测性与监控指南
立即解锁
发布时间: 2025-08-25 02:12:35 阅读量: 2 订阅数: 6 

### Kubernetes 可观测性与监控指南
在 Kubernetes 环境中,确保应用程序的可观测性和有效监控是至关重要的。这不仅有助于及时发现和解决问题,还能保障应用程序的稳定运行。下面将详细介绍如何处理 Pod 的不同状态问题以及如何使用不同的工具进行监控。
#### 1. 处理 Pod 不同状态问题
##### 1.1 解决 Pending 状态的 Pod
当 Pod 处于 Pending 状态时,可通过以下命令查看 Pod 列表:
```bash
$ kubectl get pods
```
示例输出:
```plaintext
NAME READY STATUS RESTARTS AGE
mongo-0 2/2 Running 0 2m18s
mongo-1 2/2 Running 0 88s
mongo-2 2/2 Running 0 50s
```
通过此操作,你可以确认之前处于 Pending 状态的 Pod 现在是否已正常运行。
##### 1.2 处理 ImagePullBackOff 状态的 Pod
有时候,由于镜像名称拼写错误或镜像位置改变,Pod 会陷入 ImagePullBackOff 状态。以下是解决此问题的步骤:
1. 在 `/src/chapter8` 文件夹中,查看 `mongo-image.yaml` 文件内容并部署:
```bash
$ cat debug/mongo-image.yaml
$ kubectl apply -f debug/mongo-image.yaml
```
2. 列出 Pod,查看状态:
```bash
$ kubectl get pods
```
示例输出:
```plaintext
NAME READY STATUS RESTARTS AGE
mongo-0 0/2 ImagePullBackOff 0 32s
```
3. 使用 `kubectl describe pod` 命令获取更多信息:
```bash
$ kubectl describe pod mongo-0
```
从输出的 Events 部分可以看到错误信息,例如:
```plaintext
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Failed 25s (x3 over 68s) kubelet,
ip-172-20-32-169.ec2.internal Error: ErrImagePull
Warning Failed 25s (x3 over 68s) kubelet,
ip-172-20-32-169.ec2.internal Failed to pull image "mongi": rpc
error: code = Unknown desc = Error response from daemon: pull
access denied for mongi, repository does not exist or may require
'docker login'
Normal Pulling 25s (x3 over 68s) kubelet,
ip-172-20-32-169.ec2.internal Pulling image "mongi"
Normal BackOff 14s (x4 over 67s) kubelet,
ip-172-20-32-169.ec2.internal Back-off pulling image "mongi"
Warning Failed 14s (x4 over 67s) kubelet,
ip-172-20-32-169.ec2.internal Error: ImagePullBackOff
```
4. 确认正确的镜像名称为 `mongo`,编辑 `mongo-image.yaml` 文件:
```yaml
...
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongo
image: mongo
command:
...
```
5. 删除并重新部署资源:
```bash
$ kubectl delete -f mongo-image.yaml
$ kubectl apply -f mongo-image.yaml
```
6. 再次列出 Pod,确认状态:
```bash
$ kubectl get pods
```
示例输出:
```plaintext
NAME READY STATUS RESTARTS AGE
mongo-0 2/2 Running 0 4m55s
mongo-1 2/2 Running 0 4m55s
mongo-2 2/2 Running 0 4m55s
```
##### 1.3 处理 CrashLoopBackOff 状态的 Pod
当 Pod 处于 CrashLoopBackOff 状态时,可能是由于容器内应用程序不断崩溃、Pod 参数配置错误、存活探针失败或 Kubernetes 部署时出错。以下是解决步骤:
1. 在 `/src/chapter8` 文件夹中,查看 `mongo-config.yaml` 文件内容并部署:
```bash
$ cat debug/mongo-config.yaml
$ kubectl apply -f debug/mongo-config.yaml
```
2. 列出 Pod,查看状态:
```bash
$ kubectl get pods
```
示例输出:
```plaintext
NAME READY STATUS RESTARTS AGE
mongo-0 1/2 CrashLoopBackOff 3 58s
```
3. 使用 `kubectl describe pod` 命令获取更多信息,但有时 Events 部分可能没有有用信息:
```bash
$ kubectl describe pod mongo-0
```
4. 使用 `kubectl logs` 命令查看 Pod 日志:
```bash
$ kubectl logs mongo-0 mongo
```
示例输出:
```plaintext
/bin/sh: 1: cannot open : No such file
```
5. 检查 `mongo-config.yaml` 文件,发现
0
0
复制全文
相关推荐










