2020-05-15

安裝節(jié)點健康監(jiān)測

在kubernetes集群上,通常我們只是管制集群本身以及容器的穩(wěn)定運行肮疗。但是這些穩(wěn)定性都是強依賴節(jié)點node的穩(wěn)定的漱抓。通過節(jié)點健康監(jiān)測,將節(jié)點的信息通知到apiServer精钮,避免pod調度到異常節(jié)點暴心。node problem detector就是專門來做這件事情。
一般節(jié)點常見的問題主要有

1杂拨、硬件錯誤

  • CPU壞了
  • Memory壞了
  • 磁盤壞了

2、kernel問題

  • kernel deadlock (內核死鎖)
  • corrupted file systems (文件系統(tǒng)崩潰)
  • unresponsive runtime daemons (系統(tǒng)運行后臺進程無響應)

3悯衬、docker問題

  • unresponsive runtime daemons (docker后臺進程無響應)
  • docker image error (docker文件系統(tǒng)錯誤)

K8S集群管理對node的健康狀態(tài)是無法感知的弹沽,pod依舊會調度到有問題的node上,通過DaemonSet部署node-problem-detector筋粗,向apiserver上報node的狀態(tài)信息策橘,使node的健康狀態(tài)對上游管理可見,pod不會再調度到有異常的node上娜亿。

這里剛開始也是踩了坑丽已,k8s官方給的demo比較簡單,版本還是v0.1买决,node-problem-detector這個項目的鏡像版本是v0.8.1沛婴,但是這倆都沒有明確的給出權限這一塊的配置,導致安裝后訪問資源拒絕督赤,可以通過查看log日志發(fā)現(xiàn)嘁灯。

后來在k8s的addon目錄下,找到了npd.yaml文件躲舌,完美的運行了丑婿。
文件地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/node-problem-detector
yaml文件如下:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: node-problem-detector
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: npd-binding
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:node-problem-detector
subjects:
- kind: ServiceAccount
  name: node-problem-detector
  namespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: npd-v0.8.1
  namespace: kube-system
  labels:
    k8s-app: node-problem-detector
    version: v0.8.0
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  selector:
    matchLabels:
      k8s-app: node-problem-detector
      version: v0.8.1
  template:
    metadata:
      labels:
        k8s-app: node-problem-detector
        version: v0.8.1
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: node-problem-detector
        image: registry.cn-hangzhou.aliyuncs.com/speed_containers/node-problem-detector:v0.8.1
        command:
        - "/bin/sh"
        - "-c"
        - "exec /node-problem-detector --logtostderr --config.system-log-monitor=/config/kernel-monitor.json,/config/docker-monitor.json,/config/systemd-monitor.json --config.custom-plugin-monitor=/config/kernel-monitor-counter.json,/config/systemd-monitor-counter.json --config.system-stats-monitor=/config/system-stats-monitor.json >>/var/log/node-problem-detector.log 2>&1"
        securityContext:
          privileged: true
        resources:
          limits:
            cpu: "200m"
            memory: "100Mi"
          requests:
            cpu: "20m"
            memory: "20Mi"
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        volumeMounts:
        - name: log
          mountPath: /var/log
        - name: localtime
          mountPath: /etc/localtime
          readOnly: true
      volumes:
      - name: log
        hostPath:
          path: /var/log/
      - name: localtime
        hostPath:
          path: /etc/localtime
          type: "FileOrCreate"
      serviceAccountName: node-problem-detector
      tolerations:
      - operator: "Exists"
        effect: "NoExecute"
      - key: "CriticalAddonsOnly"
        operator: "Exists"

這里默認的鏡像是谷歌官方倉庫gcr.io的庫,因為外網問題没卸,這里我上傳了一份到阿里云的倉庫羹奉,公開可直接使用的。

可能有點小伙伴會疑惑约计,我安裝完成之后如何查看效果呢诀拭,參考鏈接:https://stackoverflow.com/questions/48134835/how-to-use-k8s-node-problem-detector
里面有相關的介紹,其實 node-problem-detector 是以Event事件的形式病蛉,將信息傳遞給了集群炫加,我肯可以通過 kubectl describe nodes <node-name> -n kube-system 來查看瑰煎,詳細的過程這里簡單的參考上面的stackverflow

安裝之前
Bash# kubectl describe node ip-10-40-22-166.ec2.internal | grep -i condition -A 20 | grep Ready -B 20
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Thu, 20 Jun 2019 12:30:05 -0400   Thu, 20 Jun 2019 12:30:05 -0400   WeaveIsUp                    Weave pod has set this
  OutOfDisk            False   Thu, 20 Jun 2019 18:27:39 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasSufficientDisk     kubelet has sufficient disk space available
  MemoryPressure       False   Thu, 20 Jun 2019 18:27:39 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Thu, 20 Jun 2019 18:27:39 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Thu, 20 Jun 2019 18:27:39 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Thu, 20 Jun 2019 18:27:39 -0400   Thu, 20 Jun 2019 12:30:14 -0400   KubeletReady                 kubelet is posting ready status
安裝之后
Bash# helm upgrade --install npd stable/node-problem-detector -f node-problem-detector.values.yaml 
Bash# kubectl rollout status daemonset npd-node-problem-detector #(wait for up) 
Bash# kubectl describe node ip-10-40-22-166.ec2.internal | grep -i condition -A 20 | grep Ready -B 20 
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  DockerDaemon         False   Thu, 20 Jun 2019 22:06:17 -0400   Thu, 20 Jun 2019 22:04:14 -0400   DockerDaemonHealthy          Docker daemon is healthy
  EBSHealth            False   Thu, 20 Jun 2019 22:06:17 -0400   Thu, 20 Jun 2019 22:04:14 -0400   NoVolumeErrors               Volumes are attaching successfully
  KernelDeadlock       False   Thu, 20 Jun 2019 22:06:17 -0400   Thu, 20 Jun 2019 22:04:14 -0400   KernelHasNoDeadlock          kernel has no deadlock
  ReadonlyFilesystem   False   Thu, 20 Jun 2019 22:06:17 -0400   Thu, 20 Jun 2019 22:04:14 -0400   FilesystemIsNotReadOnly      Filesystem is not read-only
  NetworkUnavailable   False   Thu, 20 Jun 2019 12:30:05 -0400   Thu, 20 Jun 2019 12:30:05 -0400   WeaveIsUp                    Weave pod has set this
  OutOfDisk            False   Thu, 20 Jun 2019 22:07:10 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasSufficientDisk     kubelet has sufficient disk space available
  MemoryPressure       False   Thu, 20 Jun 2019 22:07:10 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Thu, 20 Jun 2019 22:07:10 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Thu, 20 Jun 2019 22:07:10 -0400   Thu, 20 Jun 2019 12:29:44 -0400   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Thu, 20 Jun 2019 22:07:10 -0400   Thu, 20 Jun 2019 12:30:14 -0400   KubeletReady                 kubelet is posting ready status

可以很明顯的看出來,多了好多檢測信息俗孝。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末酒甸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赋铝,更是在濱河造成了極大的恐慌插勤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件革骨,死亡現(xiàn)場離奇詭異农尖,居然都是意外死亡,警方通過查閱死者的電腦和手機良哲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門盛卡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人筑凫,你說我怎么就攤上這事滑沧。” “怎么了巍实?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵滓技,是天一觀的道長。 經常有香客問我棚潦,道長令漂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任丸边,我火速辦了婚禮叠必,結果婚禮上,老公的妹妹穿的比我還像新娘妹窖。我一直安慰自己挠唆,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布嘱吗。 她就那樣靜靜地躺著玄组,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谒麦。 梳的紋絲不亂的頭發(fā)上俄讹,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音绕德,去河邊找鬼患膛。 笑死,一個胖子當著我的面吹牛耻蛇,可吹牛的內容都是我干的踪蹬。 我是一名探鬼主播胞此,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跃捣!你這毒婦竟也來了漱牵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疚漆,失蹤者是張志新(化名)和其女友劉穎酣胀,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體娶聘,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡闻镶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丸升。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铆农。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狡耻,靈堂內的尸體忽然破棺而出顿涣,到底是詐尸還是另有隱情,我是刑警寧澤酝豪,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站精堕,受9級特大地震影響孵淘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜歹篓,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一瘫证、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庄撮,春花似錦背捌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烙如,卻和暖如春么抗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亚铁。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工蝇刀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徘溢。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓吞琐,卻偏偏與公主長得像捆探,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子站粟,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355