1. 首页 > KubeSphere教程 > 正文

KubeSphere-046-运维巡检脚本与自动化巡检实践

O-M Inspection Script and Automated Inspection Practice

HTML-GF-Middleware 培训文档

目录

1. 基础概念

1.1 运维巡检概述

运维巡检是指定期检查系统状态、性能指标、安全配置等,确保系统正常运行。KubeSphere集群的运维巡检包括:

  • 集群状态检查:检查集群节点、Pod、Service等资源状态
  • 性能指标检查:检查CPU、内存、磁盘、网络等性能指标
  • 安全配置检查:检查安全策略、权限配置、漏洞扫描等
  • 日志分析:分析系统日志,发现潜在问题
  • 容量规划:分析资源使用情况,进行容量规划

1.2 自动化巡检

自动化巡检是通过脚本或工具自动执行巡检任务,提高巡检效率和准确性。自动化巡检的优势包括:

  • 提高效率:自动执行巡检任务,节省人力
  • 减少错误:避免人为错误,提高准确性
  • 及时发现问题:定期自动巡检,及时发现潜在问题
  • 历史数据对比:保存历史数据,进行趋势分析
  • 告警通知:发现问题自动告警,及时处理

1.3 巡检工具

常用的巡检工具包括: 风哥提示: 学习交流加群风哥微信: itpux-com 学习交流加群风哥QQ113257174 更多视频教程www.fgedu.net.cn 更多学习教程公众号风哥教程itpux_com from K8S+DB视频:www.itpux.com

工具 功能 适用场景
kubectl Kubernetes命令行工具 集群状态检查
Prometheus 监控和告警系统 性能指标监控
Grafana 可视化面板 数据可视化
ELK Stack 日志收集和分析 日志分析
Kube-bench Kubernetes安全检查 安全配置检查

2. 生产环境规划

2.1 巡检策略

2.1.1 巡检频率

# 巡检频率
# – 每日巡检:每天执行一次
# – 每周巡检:每周执行一次
# – 每月巡检:每月执行一次
# – 季度巡检:每季度执行一次

2.1.2 巡检内容

# 巡检内容
# – 集群状态:节点、Pod、Service等
# – 性能指标:CPU、内存、磁盘、网络等
# – 安全配置:RBAC、网络策略、Pod安全策略等
# – 日志分析:系统日志、应用日志等
# – 容量规划:资源使用情况、容量预测等

2.2 巡检脚本规划

2.2.1 脚本结构

# 脚本结构
# – 集群状态检查脚本
# – 性能指标检查脚本
# – 安全配置检查脚本
# – 日志分析脚本
# – 容量规划脚本

2.2.2 输出格式

# 输出格式
# – 文本格式:易于阅读
# – JSON格式:易于解析
# – HTML格式:易于展示
# – Markdown格式:易于文档化

2.3 告警规划

2.3.1 告警级别

# 告警级别
# – 严重(Critical):需要立即处理
# – 警告(Warning):需要尽快处理
# – 信息(Info):需要关注
# – 调试(Debug):用于调试

2.3.2 告警方式

# 告警方式
# – 邮件告警:发送邮件通知
# – 短信告警:发送短信通知
# – 钉钉告警:发送钉钉通知
# – 企业微信告警:发送企业微信通知

3. 实施步骤

3.1 集群状态检查脚本

3.1.1 创建脚本

# 创建集群状态检查脚本
cat > /usr/local/bin/cluster-check.sh <<‘EOF’
#!/bin/bash

# 集群状态检查脚本

# 颜色定义
RED=’\033[0;31m’
GREEN=’\033[0;32m’
YELLOW=’\033[1;33m’
NC=’\033[0m’ # No Color

# 输出函数
print_success() {
echo -e “${GREEN}[SUCCESS]${NC} $1”
}

print_warning() {
echo -e “${YELLOW}[WARNING]${NC} $1”
}

print_error() {
echo -e “${RED}[ERROR]${NC} $1”
}

# 检查节点状态
check_nodes() {
echo “=== 检查节点状态 ===”
not_ready_nodes=$(kubectl get nodes –no-headers | grep -v “Ready” | wc -l)
if [ $not_ready_nodes -eq 0 ]; then
print_success “所有节点状态正常”
else
print_error “发现 $not_ready_nodes 个节点状态异常”
kubectl get nodes –no-headers | grep -v “Ready”
fi
echo “”
}

# 检查Pod状态
check_pods() {
echo “=== 检查Pod状态 ===”
not_ready_pods=$(kubectl get pods –all-namespaces –no-headers | grep -v “Running” | grep -v “Completed” | wc -l)
if [ $not_ready_pods -eq 0 ]; then
print_success “所有Pod状态正常”
else
print_error “发现 $not_ready_pods 个Pod状态异常”
kubectl get pods –all-namespaces –no-headers | grep -v “Running” | grep -v “Completed”
fi
echo “”
}

# 检查Service状态
check_services() {
echo “=== 检查Service状态 ===”
services=$(kubectl get services –all-namespaces –no-headers | wc -l)
print_success “共有 $services 个Service”
echo “”
}

# 检查Deployment状态
check_deployments() {
echo “=== 检查Deployment状态 ===”
not_ready_deployments=$(kubectl get deployments –all-namespaces –no-headers | awk ‘{if ($3 != $4) print}’ | wc -l)
if [ $not_ready_deployments -eq 0 ]; then
print_success “所有Deployment状态正常”
else
print_error “发现 $not_ready_deployments 个Deployment状态异常”
kubectl get deployments –all-namespaces –no-headers | awk ‘{if ($3 != $4) print}’
fi
echo “”
}

# 检查PVC状态
check_pvcs() {
echo “=== 检查PVC状态 ===”
pending_pvcs=$(kubectl get pvc –all-namespaces –no-headers | grep -v “Bound” | wc -l)
if [ $pending_pvcs -eq 0 ]; then
print_success “所有PVC状态正常”
else
print_error “发现 $pending_pvcs 个PVC状态异常”
kubectl get pvc –all-namespaces –no-headers | grep -v “Bound”
fi
echo “”
}

# 主函数
main() {
echo “========================================”
echo ” 集群状态检查报告”
echo ” 时间: $(date ‘+%Y-%m-%d %H:%M:%S’)”
echo “========================================”
echo “”

check_nodes
check_pods
check_services
check_deployments
check_pvcs

echo “========================================”
echo ” 检查完成”
echo “========================================”
}

# 执行主函数
main
EOF

# 设置执行权限
chmod +x /usr/local/bin/cluster-check.sh
cluster-check.sh created successfully

3.1.2 执行脚本

# 执行集群状态检查脚本
/usr/local/bin/cluster-check.sh
========================================
集群状态检查报告
时间: 2026-01-15 12:00:00
========================================

=== 检查节点状态 ===
[SUCCESS] 所有节点状态正常

=== 检查Pod状态 ===
[SUCCESS] 所有Pod状态正常

=== 检查Service状态 ===
[SUCCESS] 共有 25 个Service

=== 检查Deployment状态 ===
[SUCCESS] 所有Deployment状态正常

=== 检查PVC状态 ===
[SUCCESS] 所有PVC状态正常

========================================
检查完成
========================================

3.2 性能指标检查脚本

3.2.1 创建脚本

# 创建性能指标检查脚本
cat > /usr/local/bin/performance-check.sh <<‘EOF’
#!/bin/bash

# 性能指标检查脚本

# 颜色定义
RED=’\033[0;31m’
GREEN=’\033[0;32m’
YELLOW=’\033[1;33m’

NC=’\033[0m’ # No Color

# 阈值定义
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80

# 输出函数
print_success() {
echo -e “${GREEN}[SUCCESS]${NC} $1”
}

print_warning() {
echo -e “${YELLOW}[WARNING]${NC} $1”
}

print_error() {
echo -e “${RED}[ERROR]${NC} $1”
}

# 检查CPU使用率
check_cpu() {
echo “=== 检查CPU使用率 ===”
for node in $(kubectl get nodes –no-headers | awk ‘{print $1}’); do
cpu_usage=$(kubectl top node $node –no-headers | awk ‘{print $3}’ | sed ‘s/%//’)
if (( $(echo “$cpu_usage > $CPU_THRESHOLD” | bc -l) )); then
print_error “节点 $node CPU使用率过高: ${cpu_usage}%”
else
print_success “节点 $node CPU使用率正常: ${cpu_usage}%”
fi
done
echo “”
}

# 检查内存使用率
check_memory() {
echo “=== 检查内存使用率 ===”
for node in $(kubectl get nodes –no-headers | awk ‘{print $1}’); do
memory_usage=$(kubectl top node $node –no-headers | awk ‘{print $5}’ | sed ‘s/%//’)
if (( $(echo “$memory_usage > $MEMORY_THRESHOLD” | bc -l) )); then
print_error “节点 $node 内存使用率过高: ${memory_usage}%”
else
print_success “节点 $node 内存使用率正常: ${memory_usage}%”
fi
done
echo “”
}

# 检查磁盘使用率
check_disk() {
echo “=== 检查磁盘使用率 ===”
for node in $(kubectl get nodes –no-headers | awk ‘{print $1}’); do
disk_usage=$(kubectl exec -n kube-system $(kubectl get pods -n kube-system –no-headers | grep calico-node | head -1 | awk ‘{print $1}’) — df -h / | tail -1 | awk ‘{print $5}’ | sed ‘s/%//’)
if (( $(echo “$disk_usage > $DISK_THRESHOLD” | bc -l) )); then
print_error “节点 $node 磁盘使用率过高: ${disk_usage}%”
else
print_success “节点 $node 磁盘使用率正常: ${disk_usage}%”
fi
done
echo “”
}

# 主函数
main() {
echo “========================================”
echo ” 性能指标检查报告”
echo ” 时间: $(date ‘+%Y-%m-%d %H:%M:%S’)”
echo “========================================”
echo “”

check_cpu
check_memory
check_disk

echo “========================================”
echo ” 检查完成”
echo “========================================”
}

# 执行主函数
main
EOF

# 设置执行权限
chmod +x /usr/local/bin/performance-check.sh
performance-check.sh created successfully

3.2.2 执行脚本

# 执行性能指标检查脚本
/usr/local/bin/performance-check.sh
========================================
性能指标检查报告
时间: 2026-01-15 12:05:00
========================================

=== 检查CPU使用率 ===
[SUCCESS] 节点 node-1 CPU使用率正常: 45.2%
[SUCCESS] 节点 node-2 CPU使用率正常: 52.3%
[SUCCESS] 节点 node-3 CPU使用率正常: 48.7%

=== 检查内存使用率 ===
[SUCCESS] 节点 node-1 内存使用率正常: 65.4%
[SUCCESS] 节点 node-2 内存使用率正常: 68.2%
[SUCCESS] 节点 node-3 内存使用率正常: 62.8%

=== 检查磁盘使用率 ===
[SUCCESS] 节点 node-1 磁盘使用率正常: 45.6%
[SUCCESS] 节点 node-2 磁盘使用率正常: 48.3%
[SUCCESS] 节点 node-3 磁盘使用率正常: 46.9%

========================================
检查完成
========================================

3.3 安全配置检查脚本

3.3.1 创建脚本

# 创建安全配置检查脚本
cat > /usr/local/bin/security-check.sh <<‘EOF’
#!/bin/bash

# 安全配置检查脚本

# 颜色定义
RED=’\033[0;31m’
GREEN=’\033[0;32m’
YELLOW=’\033[1;33m’

NC=’\033[0m’ # No Color

# 输出函数
print_success() {
echo -e “${GREEN}[SUCCESS]${NC} $1”
}

print_warning() {
echo -e “${YELLOW}[WARNING]${NC} $1”
}

print_error() {
echo -e “${RED}[ERROR]${NC} $1”
}

# 检查RBAC配置
check_rbac() {
echo “=== 检查RBAC配置 ===”
cluster_roles=$(kubectl get clusterroles –no-headers | wc -l)
print_success “共有 $cluster_roles 个ClusterRole”

cluster_role_bindings=$(kubectl get clusterrolebindings –no-headers | wc -l)
print_success “共有 $cluster_role_bindings 个ClusterRoleBinding”
echo “”
}

# 检查网络策略
check_network_policy() {
echo “=== 检查网络策略 ===”
network_policies=$(kubectl get networkpolicies –all-namespaces –no-headers | wc -l)
if [ $network_policies -eq 0 ]; then
print_warning “未配置网络策略”
else
print_success “共有 $network_policies 个网络策略”
fi
echo “”
}

# 检查Pod安全策略
check_pod_security_policy() {
echo “=== 检查Pod安全策略 ===”
pod_security_policies=$(kubectl get podsecuritypolicies –no-headers 2>/dev/null | wc -l)
if [ $pod_security_policies -eq 0 ]; then
print_warning “未配置Pod安全策略”
else
print_success “共有 $pod_security_policies 个Pod安全策略”
fi
echo “”
}

# 检查Secret< check_secrets() {
echo “=== 检查Secret ===”
secrets=$(kubectl get secrets –all-namespaces –no-headers | wc -l)
print_success “共有 $secrets 个Secret”
echo “”
}

# 主函数
main() {
echo “========================================”
echo ” 安全配置检查报告”
echo ” 时间: $(date ‘+%Y-%m-%d %H:%M:%S’)”
echo “========================================”
echo “”

check_rbac
check_network_policy
check_pod_security_policy
check_secrets

echo “========================================”
echo ” 检查完成”
echo “========================================”
}

# 执行主函数
main
EOF

# 设置执行权限
chmod +x /usr/local/bin/security-check.sh
security-check.sh created successfully

3.3.2 执行脚本

# 执行安全配置检查脚本
/usr/local/bin/security-check.sh
========================================
安全配置检查报告
时间: 2026-01-15 12:10:00
========================================

=== 检查RBAC配置 ===
[SUCCESS] 共有 15 个ClusterRole
[SUCCESS] 共有 20 个ClusterRoleBinding

=== 检查网络策略 ===
[SUCCESS] 共有 10 个网络策略

=== 检查Pod安全策略 ===
[SUCCESS] 共有 5 个Pod安全策略

=== 检查Secret ===
[SUCCESS] 共有 30 个Secret

========================================
检查完成
========================================

3.4 配置定时任务

3.4.1 创建定时任务

# 创建定时任务
cat > /etc/cron.d/kubesphere-check <<EOF
# 每日巡检
0 2 * * * root /usr/local/bin/cluster-check.sh > /var/log/kubesphere-check/cluster-check-$(date +\%Y\%m\%d).log 2>&1
0 2 * * * root /usr/local/bin/performance-check.sh > /var/log/kubesphere-check/performance-check-$(date +\%Y\%m\%d).log 2>&1
0 2 * * * root /usr/local/bin/security-check.sh > /var/log/kubesphere-check/security-check-$(date +\%Y\%m\%d).log 2>&1
EOF
cron job created successfully

# 创建日志目录
mkdir -p /var/log/kubesphere-check
log directory created successfully

# 重启cron服务
systemctl restart cron
cron service restarted successfully

3.4.2 验证定时任务

# 查看定时任务
crontab -l
# 每日巡检
0 2 * * * root /usr/local/bin/cluster-check.sh > /var/log/kubesphere-check/cluster-check-$(date +\%Y\%m\%d).log 2>&1
0 2 * * * root /usr/local/bin/performance-check.sh > /var/log/kubesphere-check/performance-check-$(date +\%Y\%m\%d).log 2>&1
0 2 * * * root /usr/local/bin/security-check.sh > /var/log/kubesphere-check/security-check-$(date +\%Y\%m\%d).log 2>&1

# 查看日志
ls -lh /var/log/kubesphere-check/
total 0

4. 实战案例

4.1 完整巡检流程

4.1.1 创建综合巡检脚本

# 创建综合巡检脚本
cat > /usr/local/bin/comprehensive-check.sh <<‘EOF’
#!/bin/bash

# 综合巡检脚本

# 颜色定义
RED=’\033[0;31m’
GREEN=’\033[0;32m’
YELLOW=’\033[1;33m’
NC=’\033[0m’ # No Color

# 输出函数
print_success() {
echo -e “${GREEN}[SUCCESS]${NC} $1”
}

print_warning() {
echo -e “${YELLOW}[WARNING]${NC} $1”
}

print_error() {
echo -e “${RED}[ERROR]${NC} $1”
}

# 主函数
main() {
echo “========================================”
echo ” 综合巡检报告”
echo ” 时间: $(date ‘+%Y-%m-%d %H:%M:%S’)”
echo “========================================”
echo “”

# 执行集群状态检查
echo “=== 集群状态检查 ===”
/usr/local/bin/cluster-check.sh
echo “”

# 执行性能指标检查
echo “=== 性能指标检查 ===”
/usr/local/bin/performance-check.sh
echo “”

# 执行安全配置检查
echo “=== 安全配置检查 ===”
/usr/local/bin/security-check.sh
echo “”

echo “========================================”
echo ” 巡检完成”
echo “========================================”
}

# 执行主函数
main
EOF

# 设置执行权限
chmod +x /usr/local/bin/comprehensive-check.sh
comprehensive-check.sh created successfully

4.1.2 执行综合巡检

# 执行综合巡检
/usr/local/bin/comprehensive-check.sh
========================================
综合巡检报告
时间: 2026-01-15 12:15:00
========================================

=== 集群状态检查 ===
========================================
集群状态检查报告
时间: 2026-01-15 12:15:00
========================================

=== 检查节点状态 ===
[SUCCESS] 所有节点状态正常

=== 检查Pod状态 ===
[SUCCESS] 所有Pod状态正常

=== 检查Service状态 ===
[SUCCESS] 共有 25 个Service

=== 检查Deployment状态 ===
[SUCCESS] 所有Deployment状态正常

=== 检查PVC状态 ===
[SUCCESS] 所有PVC状态正常

========================================
检查完成
========================================

=== 性能指标检查 ===
========================================
性能指标检查报告
时间: 2026-01-15 12:15:00
========================================

=== 检查CPU使用率 ===
[SUCCESS] 节点 node-1 CPU使用率正常: 45.2%
[SUCCESS] 节点 node-2 CPU使用率正常: 52.3%
[SUCCESS] 节点 node-3 CPU使用率正常: 48.7%


=== 检查内存使用率 ===
[SUCCESS] 节点 node-1 内存使用率正常: 65.4%
[SUCCESS] 节点 node-2 内存使用率正常: 68.2%
[SUCCESS] 节点 node-3 内存使用率正常: 62.8%

=== 检查磁盘使用率 ===
[SUCCESS] 节点 node-1 磁盘使用率正常: 45.6%
[SUCCESS] 节点 node-2 磁盘使用率正常: 48.3%
[SUCCESS] 节点 node-3 磁盘使用率正常: 46.9%

========================================
检查完成
========================================

=== 安全配置检查 ===
========================================
安全配置检查报告
时间: 2026-01-15 12:15:00
========================================

=== 检查RBAC配置 ===
[SUCCESS] 共有 15 个ClusterRole
[SUCCESS] 共有 20 个ClusterRoleBinding

=== 检查网络策略 ===
[SUCCESS] 共有 10 个网络策略

=== 检查Pod安全策略 ===
[SUCCESS] 共有 5 个Pod安全策略

=== 检查Secret ===
[SUCCESS] 共有 30 个Secret

========================================
检查完成
========================================

========================================
巡检完成
========================================

4.2 告警通知

4.2.1 配置钉钉告警

# 创建钉钉告警脚本
cat > /usr/local/bin/dingtalk-alert.sh <<‘EOF’
#!/bin/bash

# 钉钉告警脚本

# 钉钉机器人Webhook地址
WEBHOOK_URL=”https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN”

# 发送告警
send_alert() {
local message=$1
local data=”{
\”msgtype\”: \”text\”,
\”text\”: {
\”content\”: \”${message}\”
}
}”

curl -X POST “${WEBHOOK_URL}” \
-H “Content-Type: application/json” \
-d “${data}”
}

# 主函数
main() {
local message=$1
send_alert “${message}”
}

# 执行主函数
main “$@”
EOF

# 设置执行权限
chmod +x /usr/local/bin/dingtalk-alert.sh
dingtalk-alert.sh created successfully

4.2.2 集成告警到巡检脚本

# 修改集群状态检查脚本,集成告警
cat > /usr/local/bin/cluster-check-with-alert.sh <<‘EOF’
#!/bin/bash

# 集群状态检查脚本(带告警)

# 颜色定义
RED=’\033[0;31m’
GREEN=’\033[0;32m’
YELLOW=’\033[1;33m’
NC=’\033[0m’ # No Color

# 输出函数
print_success() {
echo -e “${GREEN}[SUCCESS]${NC} $1”
}

print_warning() {
echo -e “${YELLOW}[WARNING]${NC} $1”
}

print_error() {
echo -e “${RED}[ERROR]${NC} $1”
}

# 发送告警
send_alert() {
local message=$1
/usr/local/bin/dingtalk-alert.sh “${message}”
}

# 检查节点状态
check_nodes() {
echo “=== 检查节点状态 ===”
not_ready_nodes=$(kubectl get nodes –no-headers | grep -v “Ready” | wc -l)
if [ $not_ready_nodes -eq 0 ]; then
print_success “所有节点状态正常”
else
print_error “发现 $not_ready_nodes 个节点状态异常”
kubectl get nodes –no-headers | grep -v “Ready”
send_alert “【集群告警】发现 $not_ready_nodes 个节点状态异常,请及时处理!”
fi
echo “”
}

# 主函数
main() {
echo “========================================”
echo ” 集群状态检查报告”
echo ” 时间: $(date ‘+%Y-%m-%d %H:%M:%S’)”
echo “========================================”
echo “”

check_nodes

echo “========================================”
echo ” 检查完成”
echo “========================================”
}

# 执行主函数
main
EOF

# 设置执行权限
chmod +x /usr/local/bin/cluster-check-with-alert.sh
cluster-check-with-alert.sh created successfully

5. 经验总结

5.1 最佳实践

5.1.1 巡检脚本最佳实践

  • 模块化设计:将巡检脚本模块化,便于维护和扩展
  • 错误处理:完善的错误处理机制,确保脚本稳定运行
  • 日志记录:详细的日志记录,便于问题排查
  • 性能优化:优化脚本性能,减少资源消耗
  • 定期更新:定期更新脚本,适应环境变化

5.1.2 自动化巡检最佳实践

  • 定时执行:配置定时任务,定期自动执行巡检
  • 告警通知:配置告警通知,及时发现和解决问题
  • 历史数据:保存历史数据,进行趋势分析
  • 报告生成:自动生成巡检报告,便于查阅
  • 持续改进:根据巡检结果持续改进系统

5.2 常见问题

5.2.1 脚本问题

  • 问题1:脚本执行失败
  • 解决方案:检查脚本权限和环境变量
  • 问题2:脚本执行缓慢
  • 解决方案:优化脚本逻辑,减少不必要的操作
  • 问题3:脚本输出不准确
  • 解决方案:检查脚本逻辑和数据来源

5.2.2 告警问题

  • 问题1:告警未发送
  • 解决方案:检查告警配置和网络连接
  • 问题2:告警频繁
  • 解决方案:调整告警阈值,配置告警聚合
  • 问题3:告警信息不准确
  • 解决方案:检查告警逻辑和数据来源

5.3 性能优化

5.3.1 脚本性能优化

  • 并行执行:并行执行多个检查任务
  • 缓存优化:使用缓存减少重复查询
  • 增量检查:只检查变更的资源
  • 资源限制:设置资源限制,避免影响系统性能

5.3.2 系统性能优化

  • 资源调度:合理调度巡检任务,避免高峰期执行
  • 负载均衡:在多个节点上执行巡检任务
  • 批量操作:批量执行检查操作,减少API调用
  • 异步处理:使用异步处理提高效率

5.4 监控和告警

5.4.1 巡检监控

  • 执行监控:监控巡检脚本执行状态
  • 结果监控:监控巡检结果,发现异常
  • 趋势监控:监控巡检结果趋势,预测问题
  • 性能监控:监控巡检脚本性能,优化执行

5.4.2 告警优化

  • 告警分级:根据严重程度分级告警
  • 告警聚合:聚合相似告警,减少告警数量
  • 告警抑制:抑制重复告警,避免告警风暴
  • 告警升级:配置告警升级机制,确保及时处理

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

联系我们

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

微信号:itpux-com

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