Kubernetes: рдлрд▓реА-рдмреЗрджрдЦрд▓реА-рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдлрд╝рд░ре░ 2019  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: kubernetes/kubernetes

рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдХреГрдкрдпрд╛ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рдРрд╕рд╛ рди рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЗ рдмрдЧ рдХреЛ рд╕рдордп рдкрд░ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж! рдпрджрд┐ рдорд╛рдорд▓рд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ https://kubernetes.io/security/ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдЬреА рд░реВрдк рд╕реЗ рдмрддрд╛рдПрдВ

рдХреНрдпрд╛ рд╣реБрдЖ : рдореИрдВрдиреЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдкрд░ pod-eviction-timeout рдХреНрдпреВрдм-рдХрдВрдЯреНрд░реЛрд▓рд░-рдореИрдиреЗрдЬрд░ рдХреА 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" 

рдореИрдВрдиреЗ рджреЛ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓ рддреИрдирд╛рддреА рд▓рд╛рдЧреВ рдХреА:

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

рдкрд╣рд▓рд╛ рдкреЙрдб рд╡рд░реНрдХрд░ рдиреЛрдб рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рджреВрд╕рд░рд╛ рдкреЙрдб рджреВрд╕рд░реЗ рд╡рд░реНрдХрд░ рдиреЛрдб рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛:

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" рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдмрд╛рдж, рдкреЙрдб 30 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рджреВрд╕рд░реЗ рдиреЛрдб рдкрд░ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдмрдЬрд╛рдп рдЕрдЧрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ 5 рдорд┐рдирдЯ!

рдЗрд╕реЗ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ (рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдиреНрдпреВрдирддрдо рдФрд░ рдареАрдХ рд╣реИ) :
рддреАрди рдиреЛрдб рдмрдирд╛рдПрдВред рдкрд╣рд▓реЗ рдиреЛрдб ( sudo kubeadm init ) рдкрд░ рдЗрдирдмрд┐рдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд▓рдЧрдЗрди ( kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" ) рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдлрд┐рд░ рдЕрдиреНрдп рджреЛ рдиреЛрдбреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ (рдЬреИрд╕реЗ: kubeadm join 10.0.1.4:6443 --token xdx9y1.z7jc0j7c8g8lpjog --discovery-token-ca-cert-hash sha256:04ae8388f607755c14eed702a23fd47802d5512e092b08add57040a2ae0736ac )ред
рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдкрд░ рдХреНрдпреВрдм рдирд┐рдпрдВрддреНрд░рдХ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд▓рд┐рдП рдлрд▓реА-рдирд┐рд╖реНрдХрд╛рд╕рди-рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ: 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

(рдпрд╛рдореНрд▓ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╣рд▓рд╛ рднрд╛рдЧ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕реЗрдЯрд┐рдВрдЧ рд▓рд╛рдЧреВ рд╣реИ:
sudo docker ps --no-trunc | grep "kube-controller-manager"

рджреЛ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддреИрдирд╛рддреА рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдПрдХ рдкреЙрдб рдкрд╣рд▓реЗ рд╢реНрд░рдорд┐рдХ рдиреЛрдб рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдиреЛрдб рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╢рдЯ рдбрд╛рдЙрди рдХрд░реЗрдВ, рдФрд░ рдиреЛрдб рдХреЗ "рдиреЙрдЯреНрд░реЗрдбреА" рдФрд░ рдкреЙрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдмреАрдЪ, рдмреАрддреЗ рд╕рдордп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП? :
рдореИрдВ рдорд▓реНрдЯреА-рдорд╛рд╕реНрдЯрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рднреА рдЗрд╕реА рдореБрджреНрджреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реВрдВред

рдкрд░реНрдпрд╛рд╡рд░рдг :

  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕реНрдХрд░рдг ( kubectl version ): v1.13.3
    рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрд╕реНрдХрд░рдг: version.Info {рдореЗрдЬрд░: "1", рдорд╛рдЗрдирд░: "13", GitVersion: "v1.13.3", GitCommit: "721bfa751924da8d1680787490454b9179b1fed0", GitTreeState: "clean", 2019: 2019ред 12Z ", GoVersion:" go1.11.5 ", рд╕рдВрдХрд▓рдХ:" gc ", рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо:" linux / am6464 "}
    рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг: version.Info {рдореЗрдЬрд░: "1", рдорд╛рдЗрдирд░: "13", GitVersion: "v1.13.3", GitCommit: "721bfa751924da8d1680787490454b9179b1fed0", GitTreeState: "clean", 2019: 2019ред 57Z ", GoVersion:" go1.11.5 ", рдХрдВрдкрд╛рдЗрд▓рд░:" gc ", рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо:" linux / am6464 "}
  • рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдпрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: Azure VM
  • OS (рдЙрджрд╛рд╣рд░рдг: cat /etc/os-release ): NAME = "рдЙрдмрдВрдЯреВ" рд╕рдВрд╕реНрдХрд░рдг = "16.04.5 LTS (Xenial Xerus)"
  • рдХрд░реНрдиреЗрд▓ (рдЬреИрд╕реЗ uname -a ): рд▓рд┐рдирдХреНрд╕ nodetest21 4.15.0-1037-azure # 39 ~ 16.04.1-Ubuntu SMP Tue 15 рдЬрдирд╡рд░реА 17:20:47 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux
  • рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
  • рдЕрдиреНрдп: рдбреЙрдХрд░ v18.06.1-ce
kinbug siapps sinode

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЪреАрдл рдПрд▓реЗрдХреНрдЬреЗрдВрдбрд░!
рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЖрдкрдиреЗ рд▓рд┐рдЦрд╛ред рдореИрдВрдиреЗ рдкреЙрдбреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдлрд▓реА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рд╣реИрдВ:

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 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдкреЙрдб рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдм рдкреЙрдб-рдЗрд╡реЗрд╢рди-рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдкреЙрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдардВрдбрд╛!

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 15 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ / рд╕рд┐рдЧ-рдиреЛрдб-рдмрдЧреНрд╕
@ kubernetes / sig-apps-рдмрдЧреНрд╕

@danielloczi : рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд▓реНрд▓реЗрдЦ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП:
@ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ / рд╕рд┐рдЧ-рдиреЛрдб-рдмрдЧреНрд╕, @ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ / рд╕рд┐рдЧ-рдПрдкреНрд╕-рдмрдЧреНрд╕

рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдпрд╣ :

@ Kubernetes / sig рдиреЛрдб-рдХреАрдбрд╝реЗ
@ Kubernetes / sig-рдХреНрд╖реБрдзрд╛-рдХреАрдбрд╝реЗ

рдкреАрдЖрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░реЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ / рдЯреЗрд╕реНрдЯ-рдЗрдиреНрдлреНрд░рд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред

рдмреЗрджрдЦрд▓реА рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрдо рдХрд░рддреЗ рд╣реБрдП рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рднрд╛рдЧ рдЧрдпрд╛ред рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдШреВрдордиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдирдпрд╛ рдЯреЗрдВрдЯрдмреЗрдб рдИрд╡рд┐рдХреНрд╢рди рд╣реИред

рд╕рдВрд╕реНрдХрд░рдг 1.13 рдореЗрдВ, TaintBasedEvictions рдлрд╝реАрдЪрд░ рдХреЛ рдмреАрдЯрд╛ рдореЗрдВ рдмрдврд╝рд╛рд╡рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП Todets рд╕реНрд╡рддрдГ NodeController (рдпрд╛ kubelet) рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд░реЗрдбреА рдиреЛрдбрдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдкреЙрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдЕрдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдлреАрдЪрд░ рдлреНрд▓реИрдЧ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЭреВрдареА рдкреЙрдбреНрд╕ рдХреЛ рдЙрдореНрдореАрдж рдХреА рддрд░рд╣ рдмреЗрджрдЦрд▓ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЯреЗрдВрдЯ рдЖрдзрд╛рд░рд┐рдд рдмреЗрджрдЦрд▓реА рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд╛рд╕рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕реЗ рдФрд░ рджреЗрдЦрдирд╛ред TaintBasedEvictions рд╕рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдк рд╕рд╣рди рдХреЗ рддрд╣рдд рдЕрдкрдиреА рдХрд▓реНрдкрдирд╛ рдХреЗ рднреАрддрд░ рдЕрдкрдиреЗ рдлрд▓реА рдмреЗрджрдЦрд▓реА рд╕рдордп рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#taint -based-evictions
рдЗрдирдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ: https://github.com/kubernetes/kubernetes/blob/master/plugin/pkg/admission/defaulttolerationseconds/pmission.go#L34
рдЙрди рджреЛ рдЭрдВрдбреЛрдВ рдХреЛ рдХреНрдпреВрдм-рдЕрдкреАрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

// 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.

рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЪреАрдл рдПрд▓реЗрдХреНрдЬреЗрдВрдбрд░!
рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЖрдкрдиреЗ рд▓рд┐рдЦрд╛ред рдореИрдВрдиреЗ рдкреЙрдбреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд▓рд┐рдП рдлрд▓реА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рд╣реИрдВ:

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 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдкреЙрдб рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдм рдкреЙрдб-рдЗрд╡реЗрд╢рди-рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдкреЙрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдардВрдбрд╛!

рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

@danielloczi рд╣рд╛рдп рдбреИрдирд┐рдпреЛрд▓реЛрдХреА, рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рднреА рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реВрдВ

@ 323929 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @danielloczi рдХреНрдпреВрдм-рдХрдВрдЯреНрд░реЛрд▓рд░-рдореИрдиреЗрдЬрд░ рдореЗрдВ pod-eviction-timeout рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Taint based Evictions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ Taint based Evictions рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ рдореЗрд░реЗ рд▓рд┐рдПред

рдпрд╣ рд╕рд╣реА рд╣реИ: рдореИрдВрдиреЗ рдмрд╕ Taint based Eviction рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреЙрдб рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдХрд┐ рдореИрдВ рд╣реЗрд▓реНрдо рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рддреИрдпрд╛рд░ рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ

+1 рдкреНрд░рддрд┐ рдкреВрд░реНрдг рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдкреНрд░рддрд┐ рдлрд▓реА рдпрд╛ рдкреНрд░рддрд┐ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдирд┐рдВрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрдкрдпреЛрдЧреА рд╣реИ: рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд╕рдордЭрджрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рдореВрд▓реНрдп рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ 5 рдореАрдЯрд░ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╡рд╛рдпрд╛ рд╣реЛрддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред

рдореИрдВ рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЯреЗрди рдЖрдзрд╛рд░рд┐рдд рдмреЗрджрдЦрд▓рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкреЙрдб-рдмреЗрджрдЦрд▓реА-рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡реИрд╢реНрд╡рд┐рдХ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореИрдВ рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдЯреЗрди рдЖрдзрд╛рд░рд┐рдд рдмреЗрджрдЦрд▓рд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкреЙрдб-рдмреЗрджрдЦрд▓реА-рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡реИрд╢реНрд╡рд┐рдХ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡реИрд╢реНрд╡рд┐рдХ рдлрд▓реА рдмреЗрджрдЦрд▓реА рдХреЛ apiserver рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/
рдореИрдВрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: --default-not-ready-toleration-seconds рдФрд░ --default-unreachable-toleration-secondsред

рдЗрд╕ рдмрдЧ рдХреЛ рдмрдВрдж рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓ рдореБрджреНрджрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХрд╛рдо-рдЖрд╕-рдкрд╛рд╕ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд▓реА-рдмреЗрджрдЦрд▓реА-рдЯрд╛рдЗрдордЖрдЙрдЯ рдзреНрд╡рдЬ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ

рд╡рд╣реА рдореБрджреНрджрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

arun-gupta picture arun-gupta  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

broady picture broady  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jadhavnitind picture jadhavnitind  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

errordeveloper picture errordeveloper  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alexferl picture alexferl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ