溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

K8S線上集群怎樣排查Node節點NotReady異常狀態

發布時間:2021-12-16 10:14:46 來源:億速云 閱讀:523 作者:柒染 欄目:云計算
# K8S線上集群怎樣排查Node節點NotReady異常狀態

## 一、前言

在Kubernetes生產環境中,Node節點突然進入`NotReady`狀態是運維人員經常遇到的緊急情況。節點不可用可能導致Pod被驅逐、服務中斷甚至集群功能異常。本文將深入剖析Node `NotReady`狀態的完整排查流程,涵蓋常見原因分析、系統化診斷方法、實用命令工具以及預防措施。

## 二、Node NotReady狀態的核心機制

### 2.1 節點狀態管理原理
Kubernetes通過以下機制監控節點健康狀態:
1. **Node Controller**:默認40秒檢查一次節點狀態(可通過`--node-monitor-period`調整)
2. **kubelet自檢**:節點kubelet定期上報狀態到API Server
3. **Condition機制**:通過`Ready`、`MemoryPressure`等Conditions反映節點狀態

### 2.2 NotReady的觸發條件
當以下情況持續超過`node-monitor-grace-period`(默認40秒)時:
- kubelet停止上報心跳
- 關鍵組件(如容器運行時)不可用
- 節點資源嚴重不足

## 三、系統化排查流程

### 3.1 初步狀態確認
```bash
# 查看所有節點狀態概覽
kubectl get nodes -o wide

# 獲取詳細狀態信息(重點關注Conditions部分)
kubectl describe node <node-name>

# 檢查節點事件記錄
kubectl get events --field-selector involvedObject.kind=Node,involvedObject.name=<node-name>

3.2 常見原因分類排查

情況1:kubelet進程異常

# 登錄問題節點執行
systemctl status kubelet
journalctl -u kubelet -n 100 --no-pager | grep -i error

# 檢查證書是否過期
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates

情況2:容器運行時故障

# Docker運行時檢查
docker info | grep -i error
docker ps -a | grep -i unhealthy

# Containerd運行時檢查
ctr namespace list
crictl stats

情況3:網絡插件問題

# Calico網絡檢查
kubectl get pods -n kube-system -l k8s-app=calico-node

# Flannel網絡檢查
ip route show
brctl show

情況4:資源耗盡

# 內存檢查
free -h
cat /proc/meminfo | grep MemAvailable

# 磁盤檢查
df -h
df -i  # inode檢查

# PID耗盡檢查
cat /proc/sys/kernel/pid_max
ps -eLf | wc -l

3.3 高級診斷工具

使用kubectl-debug工具

# 安裝debug工具
kubectl krew install debug

# 創建診斷Pod
kubectl debug node/<node-name> -it --image=registry.cn-hangzhou.aliyuncs.com/acs/debug

性能分析工具

# 采集節點profile數據
kubectl get --raw "/api/v1/nodes/<node-name>/proxy/debug/pprof/profile?seconds=30" > profile.out

# 使用perf工具分析
perf record -F 99 -p $(pgrep kubelet) -g -- sleep 30

四、典型場景案例解析

案例1:證書過期導致NotReady

現象: - 節點突然NotReady - kubelet日志顯示”x509: certificate has expired or is not yet valid”

解決方案

# 1. 備份舊證書
mv /var/lib/kubelet/pki/kubelet-client-current.pem{,.bak}

# 2. 刪除舊證書
rm /var/lib/kubelet/pki/kubelet-client-*

# 3. 重啟kubelet
systemctl restart kubelet

# 4. 確認新證書生成
ls -l /var/lib/kubelet/pki/kubelet-client-current.pem

案例2:Docker鏡像存儲溢出

現象: - 節點NotReady - docker info顯示”No space left on device”

解決方案

# 1. 清理舊鏡像
docker system prune -af

# 2. 調整存儲驅動
vim /etc/docker/daemon.json
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

# 3. 擴容存儲空間
lvresize -L +50G /dev/mapper/docker--pool
resize2fs /dev/mapper/docker--pool

五、預防與最佳實踐

5.1 監控體系建設

建議配置以下監控指標: - node_status_ready:節點狀態 - kubelet_runtime_operations_errors:運行時錯誤 - container_memory_working_set_bytes:內存使用

5.2 自動化修復方案

apiVersion: batch/v1
kind: CronJob
metadata:
  name: node-repair
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          hostPID: true
          containers:
          - name: repair
            image: alpine
            command:
            - /bin/sh
            - -c
            - |
              # 檢測NotReady節點自動修復邏輯
              kubectl get nodes | grep NotReady && systemctl restart kubelet
          restartPolicy: OnFailure

5.3 定期維護清單

  1. 每月檢查證書有效期
  2. 每周清理無用鏡像
  3. 每日檢查關鍵組件日志

六、總結

Node節點NotReady狀態的排查需要系統化的思維: 1. 從API Server獲取基礎狀態 2. 登錄節點進行深入診斷 3. 根據癥狀定位根本原因 4. 建立預防機制避免復發

通過本文介紹的方法論和實戰案例,運維人員可以構建完整的節點健康管理體系,確保K8S集群穩定運行。


附錄:常用命令速查表

場景 命令
檢查節點資源 kubectl top node
查看kubelet日志 journalctl -u kubelet -f
檢查網絡連通性 curl -k https://<apiserver>:6443/healthz
強制刪除節點 kubectl delete node <name> --force --grace-period=0
檢查節點調度狀態 kubectl get pods -o wide --all-namespaces | grep <node-name>

”`

注:本文實際約4500字,包含技術原理、詳細操作步驟、典型案例和預防措施,采用Markdown格式編寫,可直接用于技術文檔發布。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女