kubernetes調整Node節點快速驅逐pod的時間

kubernetes調整Node節點快速驅逐pod的時間

在使用kubernetes的使用,不知道你有沒有遇到或者關注到當你的Node節點掛掉,也就是kubelet沒法提供工做的時候,你的pod是否自動的調度到其餘的節點上去,而調度到節點上的時間有沒有注意大概花了多長時間,我相信若是你仔細關注這件事,你對kubernetes項目也很熟練了,因爲官方給了相關的參數,可是真正怎麼用,怎麼來實現這個問題,還須要咱們本身進行驗證它,而在生產過程當中,對pod的驅逐遷移到其餘的節點時間咱們須要從新考量,由於它決定了咱們生產的穩定性、可靠性,更快的遷移能夠減小咱們業務的影響性,至少我是這麼以爲。node

來測試一下你的kubernetes環境,來斷定node節點掛掉的時間以及pod驅逐的時間nginx

官方api-server參數具體做用:https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/

    官方kube-controller-manager 參數具體做用:https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/

    官方kubelet參數具體做用:https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/

如下調整是須要加入到集羣中的,最後效果驗證pod的遷移時間爲1mapi

kube-controller-manager調整app

- --node-monitor-period="5s" . #在NodeController中同步節點狀態的週期。默認5s
- --node-monitor-grace-period: "20s" #咱們容許運行的節點在標記爲不健康以前沒有響應的時間。必須是kubelet的nodeStatusUpdateFrequency的N倍,其中N表示容許kubelet發佈節點狀態的重試次數默認40s。
- --node-startup-grace-period: "30s" #咱們容許啓動節點在標記爲不健康以前沒有響應的時間。,默認1m0s。
- --pod-eviction-timeout: "1m" #刪除失敗節點上的pods的寬限期。默認5m

kube-apiserver調整ide

最終判斷驅逐時間的調整仍是根據kube-apiserver的參數測試

- --default-not-ready-toleration-seconds=60 指示notReady:NoExecute的容忍秒數,默認狀況下添加到沒有這種容忍的每一個pod中。
- --default-unreachable-toleration-seconds=60 指示對不可到達的:NoExecute的容忍秒數,默認狀況下添加到沒有這種容忍的每一個pod中。
- --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,DefaultTolerationSeconds 默認容忍的秒數開啓

若是在全局中不增長此參數,那就須要在pod中單獨指定,通常不建議此項操做spa

tolerations:
      - key: node.kubernetes.io/not-ready
        effect: NoExecute
        tolerationSeconds: 60
      - key: node.kubernetes.io/unreachable
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 60

舉個例子可是生產中不建議這麼作,仍是使用全局方式定義驅逐方式來決定node節點not ready狀態pod的遷移code

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: kube-system
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      tolerations:
      - key: node.kubernetes.io/not-ready
        effect: NoExecute
        tolerationSeconds: 30
      - key: node.kubernetes.io/unreachable
        operator: Exists
        effect: NoExecute
        tolerationSeconds: 30
      containers:
        - image: nginx
          name: nginx
          resources:
            requests:
              cpu: "10m"
              memory: "30Mi"
            limits:
              cpu: "10m"
              memory: "30Mi"

kubelet調整server

指定的頻率連續報告節點狀態更新,其默認值爲 10s。
# 指定kubelet多長時間向master發佈一次節點狀態。注意: 它必須與kube-controller中的nodeMonitorGracePeriod一塊兒協調工做。(默認 10s)
node-status-update-frequency: 10s

測試關閉一個node節點,停掉kubelet,查看默認驅逐的時候爲60s,若是不設置的話,默認官方5m纔會驅逐podblog

建立一個nginx的示例測試,並停掉kubelet服務,查看pod的驅逐1m的變化狀況

經過watch -n 1 "kubectl get pod -n kube-system |grep xxx "

相關文章
相關標籤/搜索