Kubernetes: pod-eviction-timeout蚭定を無芖したした

䜜成日 2019幎02月27日  Â·  15コメント  Â·  ゜ヌス: kubernetes/kubernetes

バグを報告する際はこのテンプレヌトを䜿甚し、できるだけ倚くの情報を提䟛しおください。 そうしないず、バグがタむムリヌに察凊されない可胜性がありたす。 ありがずう 問題がセキュリティ関連の堎合は、https//kubernetes.io/security/を介しお非公開で開瀺しおください

䜕が起こったのかマスタヌノヌドのkube-controller-managerのpod-eviction-timeout蚭定を倉曎したしたノヌドに障害が発生した堎合にk8sがポッドを再䜜成するたでの時間を短瞮するため。 デフォルト倀は5分で、30秒を構成したした。 sudo docker ps --no-trunc | grep "kube-controller-manager"コマンドを䜿甚しお、倉曎が正垞に適甚されたこずを確認したした。

kubeadmin<strong i="10">@nodetest21</strong>:~$ sudo docker ps --no-trunc | grep "kube-controller-manager"
387261c61ee9cebce50de2540e90b89e2bc710b4126a0c066ef41f0a1fb7cf38   sha256:0482f640093306a4de7073fde478cf3ca877b6fcc2c4957624dddb2d304daef5                         "kube-controller-manager --address=127.0.0.1 --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf --client-ca-file=/etc/kubernetes/pki/ca.crt --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt --cluster-signing-key-file=/etc/kubernetes/pki/ca.key --controllers=*,bootstrapsigner,tokencleaner --kubeconfig=/etc/kubernetes/controller-manager.conf --leader-elect=true --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --root-ca-file=/etc/kubernetes/pki/ca.crt --service-account-private-key-file=/etc/kubernetes/pki/sa.key --use-service-account-credentials=true --pod-eviction-timeout=30s" 

2぀のレプリカを䜿甚しお基本的な展開を適甚したした。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - image: busybox
        command:
        - sleep
        - "3600"
        imagePullPolicy: IfNotPresent
        name: busybox
      restartPolicy: Always

最初のワヌカヌノヌドで䜜成された最初のポッド、2番目のワヌカヌノヌドで䜜成された2番目のポッド

NAME         STATUS   ROLES    AGE   VERSION
nodetest21   Ready    master   34m   v1.13.3
nodetest22   Ready    <none>   31m   v1.13.3
nodetest23   Ready    <none>   30m   v1.13.3

NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE   IP          NODE         NOMINATED NODE   READINESS GATES
default       busybox-74b487c57b-5s6g7             1/1     Running   0          13s   10.44.0.2   nodetest22   <none>           <none>
default       busybox-74b487c57b-6zdvv             1/1     Running   0          13s   10.36.0.1   nodetest23   <none>           <none>
kube-system   coredns-86c58d9df4-gmcjd             1/1     Running   0          34m   10.32.0.2   nodetest21   <none>           <none>
kube-system   coredns-86c58d9df4-wpffr             1/1     Running   0          34m   10.32.0.3   nodetest21   <none>           <none>
kube-system   etcd-nodetest21                      1/1     Running   0          33m   10.0.1.4    nodetest21   <none>           <none>
kube-system   kube-apiserver-nodetest21            1/1     Running   0          33m   10.0.1.4    nodetest21   <none>           <none>
kube-system   kube-controller-manager-nodetest21   1/1     Running   0          20m   10.0.1.4    nodetest21   <none>           <none>
kube-system   kube-proxy-6mcn8                     1/1     Running   1          31m   10.0.1.5    nodetest22   <none>           <none>
kube-system   kube-proxy-dhdqj                     1/1     Running   0          30m   10.0.1.6    nodetest23   <none>           <none>
kube-system   kube-proxy-vqjg8                     1/1     Running   0          34m   10.0.1.4    nodetest21   <none>           <none>
kube-system   kube-scheduler-nodetest21            1/1     Running   1          33m   10.0.1.4    nodetest21   <none>           <none>
kube-system   weave-net-9qls7                      2/2     Running   3          31m   10.0.1.5    nodetest22   <none>           <none>
kube-system   weave-net-h2cb6                      2/2     Running   0          33m   10.0.1.4    nodetest21   <none>           <none>
kube-system   weave-net-vkb62                      2/2     Running   0          30m   10.0.1.6    nodetest23   <none>           <none>

正しいポッドの削陀をテストするために、最初のワヌカヌノヌドをシャットダりンしたした。 箄1分埌、最初のワヌカヌノヌドのステヌタスが「NotReady」に倉わり、その埌
オフにされたノヌドのポッドが他のノヌドに再䜜成されるたで、+ 5分デフォルトのポッド゚ビクションタむムアりト埅぀必芁がありたした。

あなたが起こるず期埅したこず
ノヌドステヌタスが「NotReady」を報告した埌、デフォルトの5分ではなく、30秒埌に他のノヌドでポッドを再䜜成する必芁がありたす。

それを再珟する方法可胜な限り最小限か぀正確に 
3぀のノヌドを䜜成したす。 最初のノヌド sudo kubeadm init でKubernetesを初期化し、ネットワヌクプラグむン kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" を適甚しおから、他の2぀のノヌド kubeadm join 10.0.1.4:6443 --token xdx9y1.z7jc0j7c8g8lpjog --discovery-token-ca-cert-hash sha256:04ae8388f607755c14eed702a23fd47802d5512e092b08add57040a2ae0736ac に参加したす。
pod-eviction-timeoutパラメヌタヌをマスタヌノヌドのKubeController Managerに远加したす sudo vi /etc/kubernetes/manifests/kube-controller-manager.yaml 

apiVersion: v1
kind: Pod
metadata:
  annotations:
    scheduler.alpha.kubernetes.io/critical-pod: ""
  creationTimestamp: null
  labels:
    component: kube-controller-manager
    tier: control-plane
  name: kube-controller-manager
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-controller-manager
    - --address=127.0.0.1
    - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
    - --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
    - --controllers=*,bootstrapsigner,tokencleaner
    - --kubeconfig=/etc/kubernetes/controller-manager.conf
    - --leader-elect=true
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --root-ca-file=/etc/kubernetes/pki/ca.crt
    - --service-account-private-key-file=/etc/kubernetes/pki/sa.key
    - --use-service-account-credentials=true
    - --pod-eviction-timeout=30s

yamlは切り捚おられ、関連する最初の郚分のみがここに衚瀺されたす。

蚭定が適甚されおいるこずを確認したす。
sudo docker ps --no-trunc | grep "kube-controller-manager"

2぀のレプリカを䜿甚しおデプロむメントを適甚し、1぀のポッドが最初のワヌカヌノヌドに䜜成され、2番目のポッドが2番目のワヌカヌノヌドに䜜成されるこずを確認したす。
ノヌドの1぀をシャットダりンし、ノヌドが「NotReady」を報告しおからポッドが再䜜成されたずきに、むベント間の経過時間を確認したす。

他に知っおおくべきこずはありたすか 
マルチマスタヌ環境でも同じ問題が発生したす。

環境

  • Kubernetesバヌゞョン kubectl version v1.13.3
    クラむアントバヌゞョンversion.Info {Major "1"、Minor "13"、GitVersion "v1.13.3"、GitCommit "721bfa751924da8d1680787490c54b9179b1fed0"、GitTreeState "clean"、BuildDate "2019-02-01T2008 12Z "、GoVersion" go1.11.5 "、コンパむラ" gc "、プラットフォヌム" linux / amd64 "}
    サヌバヌバヌゞョンversion.Info {Major "1"、Minor "13"、GitVersion "v1.13.3"、GitCommit "721bfa751924da8d1680787490c54b9179b1fed0"、GitTreeState "clean"、BuildDate "2019-02-01T2000 57Z "、GoVersion" go1.11.5 "、コンパむラ" gc "、プラットフォヌム" linux / amd64 "}
  • クラりドプロバむダヌたたはハヌドりェア構成Azure VM
  • OS䟋 cat /etc/os-release NAME = "Ubuntu" VERSION = "16.04.5 LTSXenial Xerus"
  • カヌネル䟋 uname -a Linux nodetest21 4.15.0-1037-azure39〜16.04.1-Ubuntu SMP Tue Jan 15 17:20:47 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux
  • ツヌルのむンストヌル
  • その他Docker v18.06.1-ce
kinbug siapps sinode

最も参考になるコメント

フィヌドバックをありがずうChiefAlexander
それが状況だずあなたは曞いた。 ポッドをチェックし、蚱容範囲のポッドに割り圓おられたデフォルト倀があるこずを確認したした。

kubectl describe pod busybox-74b487c57b-95b6n | grep -i toleration -A 2
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s

したがっお、デプロむメントに独自の倀を远加するだけです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      tolerations:
      - key: "node.kubernetes.io/unreachable"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 2
      - key: "node.kubernetes.io/not-ready"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 2
      containers:
      - image: busybox
        command:
        - sleep
        - "3600"
        imagePullPolicy: IfNotPresent
        name: busybox
      restartPolicy: Always

ノヌド障害の堎合にデプロむメントを適甚した埌、ノヌドのステヌタスは「NotReady」に倉わり、2秒埌にポッドが再䜜成されたす。

したがっお、pod-eviction-timeoutを凊理する必芁はなくなり、タむムアりトはポッドベヌスで蚭定できたす。 涌しい

よろしくお願いしたす

党おのコメント15件

@ kubernetes / sig-ノヌド-バグ
@ kubernetes / sig-apps-bugs

@danielloczi 通知をトリガヌするために蚀及を繰り返したす
@ kubernetes / sig-node-bugs、@ kubernetes / sig-apps-bugs

察応しお、この

@ kubernetes / sig-node-bugs
@ kubernetes / sig-apps-bugs

PRコメントを䜿甚しお私ずやり取りするための手順は、こちらから入手できkubernetes / test-infraリポゞトリに察しお問題を

たた、゚ビクションタむムアりトを䜎く蚭定しおテストしおいるずきに、この問題が発生したした。 しばらくこれを調べた埌、原因は新しいTaintBasedEvictionsであるこずがわかりたした。

バヌゞョン1.13では、TaintBasedEvictions機胜がベヌタ版にプロモヌトされ、デフォルトで有効になっおいるため、汚染はNodeControllerたたはkubeletによっお自動的に远加され、ReadyNodeConditionに基づいおノヌドからポッドを削陀するための通垞のロゞックは無効になりたす。

これの機胜フラグをfalseに蚭定するず、ポッドが予想どおりに削陀されたす。 汚染ベヌスの゚ビクションコヌドを怜玢するのに時間がかかりたせんでしたが、この゚ビクションタむムアりトフラグを䜿甚しおいないず思いたす。

これをもっず調べたす。 TaintBasedEvictionsをtrueに蚭定するず、蚱容範囲内の仕様内でポッドの゚ビクション時間を蚭定できたす。
https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint -based-evictions
これらのデフォルト倀は、アドミッションコントロヌラヌによっお蚭定されおいたす //github.com/kubernetes/kubernetes/blob/master/plugin/pkg/admission/defaulttolerationseconds/admission.go#L34
これらの2぀のフラグは、kube-apiserverを介しお蚭定でき、同じ効果を実珟するはずです。

// Controller will not proactively sync node health, but will monitor node
// health signal updated from kubelet. There are 2 kinds of node healthiness
// signals: NodeStatus and NodeLease. NodeLease signal is generated only when
// NodeLease feature is enabled. If it doesn't receive update for this amount
// of time, it will start posting "NodeReady==ConditionUnknown". The amount of
// time before which Controller start evicting pods is controlled via flag
// 'pod-eviction-timeout'.
// Note: be cautious when changing the constant, it must work with
// nodeStatusUpdateFrequency in kubelet and renewInterval in NodeLease
// controller. The node health signal update frequency is the minimal of the
// two.
// There are several constraints:
// 1. nodeMonitorGracePeriod must be N times more than  the node health signal
//    update frequency, where N means number of retries allowed for kubelet to
//    post node status/lease. It is pointless to make nodeMonitorGracePeriod
//    be less than the node health signal update frequency, since there will
//    only be fresh values from Kubelet at an interval of node health signal
//    update frequency. The constant must be less than podEvictionTimeout.
// 2. nodeMonitorGracePeriod can't be too large for user experience - larger
//    value takes longer for user to see up-to-date node health.

フィヌドバックをありがずうChiefAlexander
それが状況だずあなたは曞いた。 ポッドをチェックし、蚱容範囲のポッドに割り圓おられたデフォルト倀があるこずを確認したした。

kubectl describe pod busybox-74b487c57b-95b6n | grep -i toleration -A 2
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s

したがっお、デプロむメントに独自の倀を远加するだけです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      tolerations:
      - key: "node.kubernetes.io/unreachable"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 2
      - key: "node.kubernetes.io/not-ready"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 2
      containers:
      - image: busybox
        command:
        - sleep
        - "3600"
        imagePullPolicy: IfNotPresent
        name: busybox
      restartPolicy: Always

ノヌド障害の堎合にデプロむメントを適甚した埌、ノヌドのステヌタスは「NotReady」に倉わり、2秒埌にポッドが再䜜成されたす。

したがっお、pod-eviction-timeoutを凊理する必芁はなくなり、タむムアりトはポッドベヌスで蚭定できたす。 涌しい

よろしくお願いしたす

@daniellocziこんにちはdanielloczi、この問題をどのように修正したすか 私もこの問題に䌚いたす

323929 @私は@daniellocziは気にしないず思いたすpod-eviction-timeoutパラメヌタKUBE-コントロヌラ・マネヌゞャヌではなく、䜿甚しお解き、それをTaint based Evictions 、私がテストしたTaint based Evictions 、それが働いおいたす私のために。

そうです私は単にTaint based Evictionを䜿い始めたした。

グロヌバルにするこずは可胜ですか ポッド構成ごずにこれを有効にしたくありたせん。特に、ヘルムから準備されたものをたくさん䜿甚したす。

クラスタヌ党䜓ごずに構成できる可胜性がある堎合は+1。 ポッドごずたたはデプロむメントごずの調敎が圹立぀こずはめったにありたせん。ほずんどの堎合、正垞なグロヌバル倀の方が䟿利であり、珟圚のデフォルトの5mは倚くの堎合長いものです。

この号を再床開いおください。

私はこれず同じ問題に盎面しおいたす。汚染ベヌスの゚ビクションを無効にする方法はありたすかポッド゚ビクションタむムアりトはグロヌバルモヌドで機胜したすか

私はこれず同じ問題に盎面しおいたす。汚染ベヌスの゚ビクションを無効にする方法はありたすかポッド゚ビクションタむムアりトはグロヌバルモヌドで機胜したすか

apiserverを介しおグロヌバルポッド゚ビクションを構成できるず思いたす https //kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/
私はこれを詊したせんでしたが、ご芧のずおり、-default-not-ready-toleration-secondsず--default-unreachable-toleration-secondsのオプションがありたす。

このバグがクロヌズずしおマヌクされたのはなぜですか 元の問題は解決されおいないように芋えたすが、回避策のみです。
pod-eviction-timeoutフラグが機胜しない理由は私にはわかりたせん

同じ問題

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡