1. 首页 > KubeSphere教程 > 正文

KubeSphere教程FG038-KubeSphere常见启动异常与故障排查实战

本教程详细介绍KubeSphere中常见启动异常与故障排查的实战操作,包括基础概念、生产环境规划、具体实施方案和实战案例。风哥教程参考KubeSphere官方文档KubeSphere容器平台使用指南、KubeSphere故障排查指南、Kubernetes故障排查指南等相关内容。

目录大纲

Part01-基础概念与理论知识

1.1 启动异常核心概念

启动异常是指Pod或服务启动过程中出现的异常,它包括:

  • ImagePullBackOff:镜像拉取失败
  • CrashLoopBackOff:容器启动失败
  • RunContainerError:容器运行错误
  • ContainerCreating:容器创建中
  • Pending:Pod等待调度

1.2 故障排查核心概念

故障排查是指排查和解决系统故障的过程,它包括:

  • 问题定位:定位问题的根本原因
  • 问题分析:分析问题的原因
  • 问题解决:解决出现的问题
  • 问题验证:验证问题是否解决
  • 问题总结:总结问题和解决方案

1.3 日志分析核心概念

日志分析是指分析系统日志以定位问题,它包括:

  • 应用日志:应用程序的日志
  • 系统日志:系统级别的日志
  • 容器日志:容器的日志
  • Kubernetes日志:Kubernetes的日志
  • KubeSphere日志:KubeSphere的日志

Part02-生产环境规划与建议

2.1 监控规划

在实施常见启动异常与故障排查时,监控规划是非常重要的:

  • 监控指标选择:选择合适的监控指标
  • 监控数据采集:规划监控数据的采集
  • 监控数据存储:规划监控数据的存储
  • 监控数据展示:规划监控数据的展示
  • 监控数据分析:规划监控数据的分析

2.2 告警规划

告警规划对于常见启动异常与故障排查也非常重要:

  • 告警规则设计:设计合理的告警规则
  • 告警级别设置:设置合理的告警级别
  • 告警通知方式:选择合适的告警通知方式
  • 告警处理流程:设计合理的告警处理流程
  • 告警优化:定期优化告警规则

2.3 故障处理规划

故障处理规划是常见启动异常与故障排查的重要组成部分: 风哥提示:

  • 故障分类:对故障进行分类
  • 故障级别:设置故障级别
  • 故障处理流程:设计故障处理流程
  • 故障恢复策略:设计故障恢复策略
  • 故障演练:定期进行故障演练

Part03-生产环境项目实施方案

3.1 监控配置

监控的配置步骤:

  • 部署监控组件:部署Prometheus、Grafana等监控组件
  • 配置监控采集:配置监控数据的采集
  • 配置监控存储:配置监控数据的存储
  • 配置监控展示:配置监控数据的展示
  • 配置监控告警:配置监控数据的告警

3.2 告警配置

告警的配置步骤:

  • 创建告警规则:创建告警规则
  • 配置告警通知:配置告警通知方式
  • 配置告警路由:配置告警路由
  • 测试告警:测试告警是否正常工作
  • 优化告警:优化告警规则

3.3 故障处理配置

故障处理的配置步骤:

  • 创建故障处理流程:创建故障处理流程
  • 配置故障恢复策略:配置故障恢复策略
  • 配置故障通知:配置故障通知方式
  • 测试故障处理:测试故障处理流程
  • 优化故障处理:优化故障处理流程

Part04-生产案例与实战讲解

4.1 Pod启动异常实战

下面我们来实战演示Pod启动异常的排查: 学习交流加群风哥微信: itpux-com

# 查看Pod状态
kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-6b8d9b8c7f-abcde 0/1 ImagePullBackOff 0 5m
# 查看Pod详细信息
kubectl describe pod nginx-6b8d9b8c7f-abcde -n default
Name: nginx-6b8d9b8c7f-abcde
Namespace: default
Priority: 0
Node: node1/192.168.1.10
Start Time: Mon, 01 Jan 2024 00:00:00 +0000
Labels: app=nginx
Annotations: <none>
Status: Pending
IP: 10.244.1.20
IPs:
IP: 10.244.1.20
Containers:
nginx:
Container ID:
Image: nginx:latest
Image ID:
Port: 80/TCP
Host Port: 0/TCP
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Environment: <none>
Mounts: <none>
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Events:

Type Reason Age From Message
—- —— —- —- ——-
Normal Scheduled 5m default-scheduler Successfully assigned default/nginx-6b8d9b8c7f-abcde to node1
Normal Pulling 4m kubelet Pulling image “nginx:latest”
Warning Failed 3m kubelet Failed to pull image “nginx:latest”: rpc error: code = Unknown desc = Error response from daemon: pull access denied for nginx, repository does not exist or may require ‘docker login’
# 查看Pod日志
kubectl logs nginx-6b8d9b8c7f-abcde -n default
Error from server (BadRequest): container “nginx” in pod “nginx-6b8d9b8c7f-abcde” is waiting to start: ImagePullBackOff
# 检查镜像是否存在
docker pull nginx:latest
Using default tag: latest
Error response from daemon: pull access denied for nginx, repository does not exist or may require ‘docker login’
# 检查Docker配置
cat /etc/docker/daemon.json
{
“registry-mirrors”: [“https://registry.docker-cn.com”]
}
# 修改Docker配置
cat <<EOF > /etc/docker/daemon.json
{
“registry-mirrors”: [“https://mirror.ccs.tencentyun.com”]
}
EOF
# 重启Docker
systemctl restart docker
# 重新拉取镜像
docker pull nginx:latest
latest: Pulling from library/nginx
abc123def456: Pull complete

Digest: sha256:abc123def456…
Status: Downloaded newer image for nginx:latest
# 删除失败的Pod
kubectl delete pod nginx-6b8d9b8c7f-abcde -n default
pod “nginx-6b8d9b8c7f-abcde” deleted
# 验证Pod状态
kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
nginx-6b8d9b8c7f-fghij 1/1 Running 0 10s

4.2 服务异常实战

下面我们来实战演示服务异常的排查: 学习交流加群风哥QQ113257174

# 查看Service状态
kubectl get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 30d
nginx NodePort 10.96.123.45 <none> 80:30080/TCP 5m
# 测试Service访问
curl http://10.96.123.45:80
curl: (7) Failed to connect to 10.96.123.45 port 80: Connection refused
# 查看Service详细信息
kubectl describe svc nginx -n default
Name: nginx
Namespace: default
Labels: app=nginx
Annotations: <none>
Selector: app=nginx
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.123.45
Port: http 80/TCP
TargetPort: 80/TCP
NodePort: http 30080/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
# 查看Pod标签
kubectl get pods -n default –show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-6b8d9b8c7f-fghij 1/1 Running 0 10m app=web
# 修改Pod标签
kubectl label pod nginx-6b8d9b8c7f-fghij app=nginx –overwrite -n default
pod/nginx-6b8d9b8c7f-fghij labeled
# 验证Service Endpoints
kubectl get endpoints nginx -n default
NAME ENDPOINTS AGE
nginx 10.244.1.20:80 10s
# 测试Service访问
curl http://10.96.123.45:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

4.3 存储异常实战

下面我们来实战演示存储异常的排查: 更多视频教程www.fgedu.net.cn

# 查看PVC状态
kubectl get pvc -n default
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nginx-pvc Pending standard 5m
# 查看PVC详细信息
kubectl describe pvc nginx-pvc -n default
Name: nginx-pvc
Namespace: default
StorageClass: standard
Status: Pending
Volume:
Labels: <none>
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Used By: nginx-deployment-6b8d9b8c7f-abcde
Events:
Type Reason Age From Message
—- —— —- —- ——-
Normal FailedBinding 5m persistentvolume-controller no persistent volumes available for this claim
# 查看PV状态
kubectl get pv
No resources found
# 查看StorageClass
kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
standard (default) kubernetes.io/aws-ebs Delete Immediate false 30d
# 检查AWS EBS插件
kubectl get pods -n kube-system | grep ebs
NAME READY STATUS RESTARTS AGE
ebs-csi-controller-6b8d9b8c7f-abcde 0/1 ImagePullBackOff 0 5m
# 查看Pod详细信息
kubectl describe pod ebs-csi-controller-6b8d9b8c7f-abcde -n kube-system
Name: ebs-csi-controller-6b8d9b8c7f-abcde
Namespace: kube-system
Priority: 0
Node: master/192.168.1.1
Start Time: Mon, 01 Jan 2024 00:00:00 +0000
Labels: app=ebs-csi-controller
Annotations: <none>
Status: Pending
IP: 10.244.0.10
IPs:
IP: 10.244.0.10
Containers:
ebs-plugin:
Container ID:
Image: amazon/aws-ebs-csi-driver:v1.14.0
Image ID:
Port: <none>
Host Port: <none>
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Environment: <none>
Mounts: <none>
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Events:
Type Reason Age From Message
—- —— —- —- ——-
Normal Scheduled 5m default-scheduler Successfully assigned kube-system/ebs-csi-controller-6b8d9b8c7f-abcde to master
Normal Pulling 4m kubelet Pulling image “amazon/aws-ebs-csi-driver:v1.14.0”
Warning Failed 3m kubelet Failed to pull image “amazon/aws-ebs-csi-driver:v1.14.0”: rpc error: code = Unknown desc = Error response from daemon: pull access denied for amazon/aws-ebs-csi-driver, repository does not exist or may require ‘docker login’
# 修改镜像仓库
kubectl set image deployment/ebs-csi-controller ebs-plugin=public.ecr.aws/ebs-csi-driver/aws-ebs-csi-driver:v1.14.0 -n kube-system
deployment.apps/ebs-csi-controller image updated
# 验证Pod状态
kubectl get pods -n kube-system | grep ebs
NAME READY STATUS RESTARTS AGE
ebs-csi-controller-6b8d9b8c7f-abcde 1/1 Running 0 10s
# 验证PVC状态
kubectl get pvc -n default
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nginx-pvc Bound pvc-abc123def456789012345678901234567890 10Gi RWO standard 10m

Part05-风哥经验总结与分享

5.1 常见问题与解决方案

问题1:Pod一直处于Pending状态

现象:Pod长时间处于Pending状态 更多学习教程公众号风哥教程itpux_com

原因:资源不足或调度失败

解决方案:

# 查看Pod事件
kubectl describe pod nginx-6b8d9b8c7f-abcde -n default | grep -A 10 Events
Events:
Type Reason Age From Message
—- —— —- —- ——-
Normal Scheduled 5m default-scheduler Successfully assigned default/nginx-6b8d9b8c7f-abcde to node1
Warning FailedScheduling 4m default-scheduler 0/3 nodes are available: 1 Insufficient cpu, 2 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn’t tolerate.
# 查看节点资源
kubectl describe nodes | grep -A 5 “Allocated resources”
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
——– ——– ——
cpu 3900m (97%) 8000m (200%)
memory 6Gi (75%) 12Gi (150%)

问题2:Pod频繁重启

现象:Pod频繁重启,状态为CrashLoopBackOff

原因:应用程序错误或健康检查失败

解决方案:

# 查看Pod日志
kubectl logs nginx-6b8d9b8c7f-abcde -n default –previous
2024/01/01 00:00:00 [emerg] 1#1: invalid number of arguments in “worker_processes” directive in /etc/nginx/nginx.conf:2
# 检查配置文件
kubectl exec -it nginx-6b8d9b8c7f-abcde -n default — cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto; # error here
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;

问题3:Service无法访问

现象:Service创建成功,但无法访问

原因:Service配置错误或Pod标签不匹配

解决方案:

# 检查Service配置
kubectl get svc nginx -n default -o yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
ports:
– name: http
port: 80
protocol: TCP
targetPort: 8080
selector:
app: nginx
type: ClusterIP
# 检查Pod端口
kubectl get pods nginx-6b8d9b8c7f-abcde -n default -o yaml | grep -A 5 “containerPort”
– containerPort: 80
name: http
protocol: TCP

5.2 最佳实践建议

建议1:建立完善的监控体系

在建立监控体系时,应该: from K8S+DB视频:www.itpux.com

  • 监控关键指标
  • 设置合理的告警阈值
  • 配置多种告警通知方式
  • 定期审查和优化监控规则
  • 建立故障响应机制

建议2:建立完善的日志体系

在建立日志体系时,应该:

  • 收集所有关键日志
  • 建立日志索引和搜索
  • 设置日志保留策略
  • 定期分析日志
  • 建立日志告警机制

建议3:建立完善的故障处理流程

在建立故障处理流程时,应该:

  • 建立故障分类机制
  • 建立故障级别机制
  • 建立故障响应机制
  • 建立故障恢复机制
  • 定期进行故障演练

5.3 性能优化技巧

技巧1:优化Pod启动速度

Pod启动速度的优化可以通过以下方式实现:

  • 使用更小的镜像
  • 使用镜像缓存
  • 优化启动脚本
  • 使用init容器
  • 优化健康检查

技巧2:优化故障排查效率

故障排查效率的优化可以通过以下方式实现:

  • 使用自动化工具
  • 建立故障知识库
  • 使用日志分析工具
  • 建立故障排查流程
  • 定期进行故障演练

技巧3:优化系统稳定性

系统稳定性的优化可以通过以下方式实现:

  • 使用高可用架构
  • 设置合理的资源限制
  • 使用自动扩缩容
  • 建立备份机制
  • 定期进行系统检查

常见启动异常与故障排查是KubeSphere运维的重要组成部分,需要根据实际业务需求进行合理规划和配置。在生产环境中,建议建立完善的监控、日志和故障处理体系,以便快速定位和解决问题。同时,定期进行故障演练,提高故障处理能力。

本教程由风哥提供,更多KubeSphere实战教程请关注风哥课堂

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息