ื›ื™ืฆื“ ืœื’ืฉืช ืœืžืฉืื‘ื™ Kubernetes Pod

ื›ื™ืฆื“ ืœื’ืฉืช ืœืžืฉืื‘ื™ Kubernetes Podื”ืคืจืก ืžืืช Tohad

ื›ืืฉืจ ืžืชื—ื™ืœื™ื ืขื Kubernetes, ื ืคื•ืฅ ืœืฉื›ื•ื— ืžื”ื’ื“ืจืช ืžืฉืื‘ื™ ืžื™ื›ืœ. ื‘ืฉืœื‘ ื–ื”, ื–ื” ืžืกืคื™ืง ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉืชืžื•ื ืช Docker ืขื•ื‘ื“ืช ื•ื ื™ืชืŸ ืœืคืจื•ืก ืื•ืชื” ื‘ืืฉื›ื•ืœ Kubernetes.

ืื‘ืœ ืžืื•ื—ืจ ื™ื•ืชืจ ื™ืฉ ืœืคืจื•ืก ืืช ื”ืืคืœื™ืงืฆื™ื” ื‘ืืฉื›ื•ืœ ื™ื™ืฆื•ืจ ื™ื—ื“ ืขื ื™ื™ืฉื•ืžื™ื ืื—ืจื™ื. ืœืฉื ื›ืš ืฆืจื™ืš ืœื”ืงืฆื•ืช ืžืฉืื‘ื™ื ืœืงื•ื ื˜ื™ื™ื ืจ ื•ืœื•ื•ื“ื ืฉื™ืฉ ืžืกืคื™ืง ืžื”ื ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื”, ื•ืฉืืคืœื™ืงืฆื™ื•ืช ืคื•ืขืœื•ืช ืื—ืจื•ืช ืœื ื™ืชืงืœื• ื‘ื‘ืขื™ื•ืช.

ืงื‘ื•ืฆื” Kubernetes aaS ืž-Mail.ru ืชืจื’ื ืžืืžืจ ืขืœ ืžืฉืื‘ื™ ืžื™ื›ืœ (CPU & MEM), ื‘ืงืฉื•ืช ื•ืžื’ื‘ืœื•ืช ืžืฉืื‘ื™ื. ืชืœืžื“ ืืช ื”ื™ืชืจื•ื ื•ืช ืฉืœ ื”ื’ื“ืจื•ืช ืืœื” ื•ืžื” ืงื•ืจื” ืื ืœื ืชื’ื“ื™ืจ ืื•ืชืŸ.

ืžืฉืื‘ื™ ืžื—ืฉื•ื‘

ื™ืฉ ืœื ื• ืฉื ื™ ืกื•ื’ื™ื ืฉืœ ืžืฉืื‘ื™ื ืขื ื”ื™ื—ื™ื“ื•ืช ื”ื‘ืื•ืช:

  • ื™ื—ื™ื“ืช ืขื™ื‘ื•ื“ ืžืจื›ื–ื™ืช (CPU) - ืœื™ื‘ื•ืช;
  • ื–ื™ื›ืจื•ืŸ (MEM) - ื‘ืชื™ื.

ืžืฉืื‘ื™ื ืžืฆื•ื™ื ื™ื ืขื‘ื•ืจ ื›ืœ ืžื™ื›ืœ. ื‘ืงื•ื‘ืฅ Pod YAML ื”ื‘ื, ืชืจืื” ืงื˜ืข ืžืฉืื‘ื™ื ื”ืžื›ื™ืœ ืืช ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื ื•ื”ืžื’ื‘ื™ืœื™ื:

  • ืžืฉืื‘ื™ ืคื•ื“ ืžื‘ื•ืงืฉื™ื = ืกื›ื•ื ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื ืฉืœ ื›ืœ ื”ืงื•ื ื˜ื™ื™ื ืจื™ื;
  • ืžื’ื‘ืœืช ืžืฉืื‘ื™ ื”ืคื•ื“ = ืกื›ื•ื ื›ืœ ืžื’ื‘ืœื•ืช ื”ืžืฉืื‘ื™ื ืฉืœ ื”ืคื•ื“.

apiVersion: v1
kind: Pod
metadata:
  name: backend-pod-name
  labels:
    application: backend
spec:
  containers:
    โ€” name: main-container
      image: my-backend
      tag: v1
      ports:
      โ€” containerPort: 8080
      resources:
        requests:
          cpu: 0.2 # REQUESTED CPU: 200m cores
          memory: "1Gi" # REQUESTED MEM: 1Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi
    โ€” name: other-container
      image: other-app
      tag: v1
      ports:
      โ€” containerPort: 8000
      resources:
        requests:
          cpu: "200m" # REQUESTED CPU: 200m cores
          memory: "0.5Gi" # REQUESTED MEM: 0.5Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi

ื“ื•ื’ืžื” ืœืžืฉืื‘ื™ื ืžื‘ื•ืงืฉื™ื ื•ืžื•ื’ื‘ืœื™ื

ืฉื“ื” resources.requested ืžื”ืžืคืจื˜ Pod ื”ื•ื ืื—ื“ ื”ืืœืžื ื˜ื™ื ื”ืžืฉืžืฉื™ื ืœืžืฆื™ืืช ื”ืฆื•ืžืช ื”ืจืฆื•ื™. ืืชื” ื›ื‘ืจ ื™ื›ื•ืœ ืœืชื›ื ืŸ ืขื‘ื•ืจื• ืคืจื™ืกืช Pod. ืื™ืš ืžื•ืฆืื™ื ืฆื•ืžืช ืžืชืื™ื?

Kubernetes ืžื•ืจื›ื‘ ืžืžืกืคืจ ืจื›ื™ื‘ื™ื, ื›ื•ืœืœ ืฆื•ืžืช ืžืืกื˜ืจ ืื• ืฆื•ืžืช ืžืืกื˜ืจ (Kubernetes Control Plane). ืœืฆื•ืžืช ื”ืจืืฉื™ ื™ืฉ ืžืกืคืจ ืชื”ืœื™ื›ื™ื: kube-apiserver, kube-controller-manager ื•-kube-scheduler.

ืชื”ืœื™ืš ื”-kube-scheduler ืื—ืจืื™ ืขืœ ืกืงื™ืจืช ืชืจืžื™ืœื™ื ื—ื“ืฉื™ื ืฉื ื•ืฆืจื• ื•ืžืฆื™ืืช ืฆืžืชื™ื ืขื•ื‘ื“ื™ื ืืคืฉืจื™ื™ื ื”ืชื•ืืžื™ื ืืช ื›ืœ ื‘ืงืฉื•ืช ื”ืคื•ื“, ื›ื•ืœืœ ืžืกืคืจ ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื. ืจืฉื™ืžืช ื”ืฆืžืชื™ื ืฉื ืžืฆืื• ืขืœ ื™ื“ื™ kube-scheduler ืžื“ื•ืจื’ืช. ื”ืคื•ื“ ืžืชื•ื–ืžืŸ ื‘ืฆื•ืžืช ืขื ื”ืฆื™ื•ื ื™ื ื”ื’ื‘ื•ื”ื™ื ื‘ื™ื•ืชืจ.

ื›ื™ืฆื“ ืœื’ืฉืช ืœืžืฉืื‘ื™ Kubernetes Podื”ื™ื›ืŸ ื™ืžื•ืงื ื”ืชืจืžื™ืœ ื”ืกื’ื•ืœ?

ื‘ืชืžื•ื ื” ื ื™ืชืŸ ืœืจืื•ืช ืฉ-kube-scheduler ืืžื•ืจ ืœืชื–ืžืŸ ืคื•ื“ ืกื’ื•ืœ ื—ื“ืฉ. ืืฉื›ื•ืœ Kubernetes ืžื›ื™ืœ ืฉื ื™ ืฆืžืชื™ื: A ื•-B. ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, kube-scheduler ืœื ื™ื›ื•ืœ ืœืชื–ืžืŸ Pod ื‘ืฆื•ืžืช A - ื”ืžืฉืื‘ื™ื ื”ื–ืžื™ื ื™ื (ื”ืœื ืžืชื‘ืงืฉื™ื) ืื™ื ื ืชื•ืืžื™ื ืœื‘ืงืฉื•ืช ืฉืœ ื”ืคื•ื“ ื”ืกื’ื•ืœ. ืœื›ืŸ, 1 GB ืฉืœ ื–ื™ื›ืจื•ืŸ ื”ืžื‘ื•ืงืฉ ืขืœ ื™ื“ื™ Pod ื”ืกื’ื•ืœ ืœื ื™ืชืื™ื ืœืฆื•ืžืช A, ืžื›ื™ื•ื•ืŸ ืฉื”ื–ื™ื›ืจื•ืŸ ื”ื–ืžื™ืŸ ื”ื•ื 0,5 GB. ืื‘ืœ ืœืฆื•ืžืช B ื™ืฉ ืžืกืคื™ืง ืžืฉืื‘ื™ื. ื›ืชื•ืฆืื” ืžื›ืš, kube-scheduler ืžื—ืœื™ื˜ ืฉื”ื™ืขื“ ืฉืœ ื”ืคื•ื“ ื”ืกื’ื•ืœ ื”ื•ื ืฆื•ืžืช B.

ื›ืขืช ืื ื• ื™ื•ื“ืขื™ื ื›ื™ืฆื“ ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื ืžืฉืคื™ืขื™ื ืขืœ ื‘ื—ื™ืจืช ื”ืฆื•ืžืช ืœื”ืคืขืœืช ื”ืคื•ื“. ืื‘ืœ ืžื” ื”ื”ืฉืคืขื” ืฉืœ ืžืฉืื‘ื™ื ืฉื•ืœื™ื™ื?

ืžื’ื‘ืœืช ื”ืžืฉืื‘ื™ื ื”ื™ื ื’ื‘ื•ืœ ืฉื”-CPU/MEM ืื™ื ื• ื™ื›ื•ืœ ืœื—ืฆื•ืช. ืขื ื–ืืช, ืžืฉืื‘ ื”-CPU ื’ืžื™ืฉ, ื›ืš ืฉืžื™ื›ืœื™ื ืฉื™ื’ื™ืขื• ืœืžื’ื‘ืœื•ืช ื”-CPU ืฉืœื”ื ืœื ื™ื’ืจืžื• ืœืคื•ื“ ืœืฆืืช. ื‘ืžืงื•ื ื–ืืช, ื”ืฆืขืจืช ื”ืžืขื‘ื“ ืชืชื—ื™ืœ. ืื ืชื’ื™ืข ืœืžื’ื‘ืœืช ื”ืฉื™ืžื•ืฉ ื‘-MEM, ื”ืžื›ื•ืœื” ื™ื•ืคืกืง ืขืงื‘ OOM-Killer ื•ื™ื•ืคืขืœ ืžื—ื“ืฉ ืื ืžื•ืชืจ ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช RestartPolicy.

ืžืฉืื‘ื™ื ืžื‘ื•ืงืฉื™ื ื•ืžืงืกื™ืžื•ื ื‘ืคื™ืจื•ื˜

ื›ื™ืฆื“ ืœื’ืฉืช ืœืžืฉืื‘ื™ Kubernetes Podืชืงืฉื•ืจืช ืžืฉืื‘ื™ื ื‘ื™ืŸ Docker ืœ-Kubernetes

ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœื”ืกื‘ื™ืจ ื›ื™ืฆื“ ื‘ืงืฉื•ืช ืžืฉืื‘ื™ื ื•ืžื’ื‘ืœื•ืช ืžืฉืื‘ื™ื ืคื•ืขืœื•ืช ื”ื™ื ืœื”ืฆื™ื’ ืืช ื”ืงืฉืจ ื‘ื™ืŸ Kubernetes ืœ-Docker. ื‘ืชืžื•ื ื” ืœืžืขืœื” ืชื•ื›ืœื• ืœืจืื•ืช ื›ื™ืฆื“ ืฉื“ื•ืช Kubernetes ื•ื“ื’ืœื™ ื”ื”ืคืขืœื” ืฉืœ Docker ืงืฉื•ืจื™ื ื–ื” ืœื–ื”.

ื–ื™ื›ืจื•ืŸ: ื‘ืงืฉื” ื•ื”ื’ื‘ืœื”

containers:
...
 resources:
   requests:
     memory: "0.5Gi"
   limits:
     memory: "1Gi"

ื›ืคื™ ืฉื”ื•ื–ื›ืจ ืœืขื™ืœ, ื”ื–ื™ื›ืจื•ืŸ ื ืžื“ื“ ื‘ื‘ื™ื™ื˜ื™ื. ืžื‘ื•ืกืก ืขืœ ืชื™ืขื•ื“ Kubernetes, ื ื•ื›ืœ ืœืฆื™ื™ืŸ ื–ื™ื›ืจื•ืŸ ื›ืžืกืคืจ. ื‘ื“ืจืš ื›ืœืœ ื–ื” ืžืกืคืจ ืฉืœื, ืœืžืฉืœ 2678 - ื›ืœื•ืžืจ 2678 ื‘ืชื™ื. ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืฉืชืžืฉ ื‘ืกื™ื•ืžื•ืช G ะธ Gi, ื”ืขื™ืงืจ ืœื–ื›ื•ืจ ืฉื”ื ืœื ืฉื•ื•ื™ื. ื”ืจืืฉื•ืŸ ื”ื•ื ืขืฉืจื•ื ื™ ื•ื”ืฉื ื™ ื”ื•ื ื‘ื™ื ืืจื™. ื›ืžื• ื”ื“ื•ื’ืžื” ืฉื”ื•ื–ื›ืจื” ื‘ืชื™ืขื•ื“ k8s: 128974848, 129e6, 129M, 123Mi - ื”ื ื›ืžืขื˜ ืฉื•ื•ืช ืขืจืš.

ืืคืฉืจื•ืช Kubernetes limits.memory ืชื•ืื ืืช ื”ื“ื’ืœ --memory ืž-Docker. ื‘ืžืงืจื” request.memory ืื™ืŸ ื—ืฅ ืขื‘ื•ืจ Docker ื›ื™ Docker ืื™ื ื• ืžืฉืชืžืฉ ื‘ืฉื“ื” ื–ื”. ืืชื” ื™ื›ื•ืœ ืœืฉืื•ืœ, ื”ืื ื–ื” ื‘ื›ืœืœ ื”ื›ืจื—ื™? ื›ืŸ ืฆืจื™ืš. ื›ืคื™ ืฉืืžืจืชื™ ืงื•ื“ื, ื”ืชื—ื•ื ื—ืฉื•ื‘ ืขื‘ื•ืจ Kubernetes. ื‘ื”ืชื‘ืกืก ืขืœ ื”ืžื™ื“ืข ืžืžื ื•, kube-scheduler ืžื—ืœื™ื˜ ื‘ืื™ื–ื” ืฆื•ืžืช ืœืชื–ืžืŸ ืืช ื”ืคื•ื“.

ืžื” ืงื•ืจื” ืื ืืชื” ืžื’ื“ื™ืจ ืœื ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ ืœื‘ืงืฉื”?

ืื ื”ืžื™ื›ืœ ื”ื’ื™ืข ืœื’ื‘ื•ืœื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ืžื‘ื•ืงืฉ, ืื– ื”ืคื•ื“ ืžืžื•ืงื ื‘ืงื‘ื•ืฆื” ืฉืœ Pods ืฉืขื•ืฆืจื™ื ื›ืืฉืจ ืื™ืŸ ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ ื‘ืฆื•ืžืช.

ืžื” ืงื•ืจื” ืื ืžื’ื“ื™ืจื™ื ืืช ืžื’ื‘ืœืช ื”ื–ื™ื›ืจื•ืŸ ื ืžื•ื›ื” ืžื“ื™?

ืื ื”ืžื™ื›ืœ ื—ื•ืจื’ ืžืžื’ื‘ืœืช ื”ื–ื™ื›ืจื•ืŸ, ื”ื•ื ื™ื•ืคืกืง ืขืงื‘ OOM-Killed. ื•ื™ืคืขื™ืœ ืžื—ื“ืฉ ืื ืืคืฉืจ ื‘ื”ืชื‘ืกืก ืขืœ RestartPolicy ืฉื‘ื• ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื•ื Always.

ืžื” ืงื•ืจื” ืื ืœื ืชืฆื™ื™ืŸ ืืช ื”ื–ื™ื›ืจื•ืŸ ื”ืžื‘ื•ืงืฉ?

Kubernetes ื™ื™ืงื— ืืช ืขืจืš ื”ื’ื‘ื•ืœ ื•ืชื’ื“ื™ืจ ืื•ืชื• ื›ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ืžื” ื™ื›ื•ืœ ืœืงืจื•ืช ืื ืœื ืชืฆื™ื™ืŸ ืžื’ื‘ืœืช ื–ื™ื›ืจื•ืŸ?

ืœืžื™ื›ืœ ืื™ืŸ ื”ื’ื‘ืœื•ืช; ื”ื•ื ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ืฉื”ื•ื ืจื•ืฆื”. ืื ื”ื•ื ื™ืชื—ื™ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœ ื”ื–ื™ื›ืจื•ืŸ ื”ื–ืžื™ืŸ ืฉืœ ื”ืฆื•ืžืช, ืื– OOM ื™ื”ืจื•ื’ ืื•ืชื•. ืœืื—ืจ ืžื›ืŸ, ื”ืžื™ื›ืœ ื™ื•ืคืขืœ ืžื—ื“ืฉ ื‘ืžื™ื“ืช ื”ืืคืฉืจ ื‘ื”ืชื‘ืกืก ืขืœ RestartPolicy.

ืžื” ืงื•ืจื” ืื ืœื ืžืฆื™ื™ื ื™ื ืžื’ื‘ืœื•ืช ื–ื™ื›ืจื•ืŸ?

ื–ื”ื• ื”ืชืจื—ื™ืฉ ื”ื’ืจื•ืข ื‘ื™ื•ืชืจ: ื”ืžืชื–ืžืŸ ืœื ื™ื•ื“ืข ื›ืžื” ืžืฉืื‘ื™ื ื”ืžื™ื›ืœ ื“ื•ืจืฉ, ื•ื–ื” ื™ื›ื•ืœ ืœื’ืจื•ื ืœื‘ืขื™ื•ืช ืจืฆื™ื ื™ื•ืช ื‘ืฆื•ืžืช. ื‘ืžืงืจื” ื–ื”, ื–ื” ื™ื”ื™ื” ื ื—ืžื“ ืœืงื‘ืœ ืžื’ื‘ืœื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืขืœ ืžืจื—ื‘ ื”ืฉืžื•ืช (ืฉื ืงื‘ืข ืขืœ ื™ื“ื™ LimitRange). ืื™ืŸ ืžื’ื‘ืœื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ - ืœืคื•ื“ ืื™ืŸ ืžื’ื‘ืœื•ืช, ื”ื•ื ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืžื” ื–ื™ื›ืจื•ืŸ ืฉื”ื•ื ืจื•ืฆื”.

ืื ื”ื–ื™ื›ืจื•ืŸ ื”ืžื‘ื•ืงืฉ ื’ื“ื•ืœ ืžืžื” ืฉื”ืฆื•ืžืช ื™ื›ื•ืœ ืœื”ืฆื™ืข, ื”ืคื•ื“ ืœื ื™ืชื•ื–ืžืŸ. ื—ืฉื•ื‘ ืœื–ื›ื•ืจ ื–ืืช Requests.memory - ืœื ื”ืขืจืš ื”ืžื™ื ื™ืžืœื™. ื–ื”ื• ืชื™ืื•ืจ ืฉืœ ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ืžืกืคื™ืงื” ื›ื“ื™ ืฉื”ืžื™ื›ืœ ื™ืžืฉื™ืš ืœืคืขื•ืœ ื‘ืจืฆื™ืคื•ืช.

ื‘ื“ืจืš ื›ืœืœ ืžื•ืžืœืฅ ืœื”ื’ื“ื™ืจ ืืช ืื•ืชื• ืขืจืš ืขื‘ื•ืจ request.memory ะธ limit.memory. ื–ื” ืžื‘ื˜ื™ื— ืฉ-Kubernetes ืœื ื™ืชื–ืžืŸ Pod ื‘ืฆื•ืžืช ืฉื™ืฉ ืœื• ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื“ ืื‘ืœ ืœื ืžืกืคื™ืง ื›ื“ื™ ืœื”ืคืขื™ืœ ืื•ืชื•. ื–ื›ื•ืจ: ืชื›ื ื•ืŸ Pod Kubernetes ืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ืจืง requests.memoryื• - limits.memory ืœื ืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ.

CPU: ื‘ืงืฉื” ื•ื”ื’ื‘ืœื”

containers:
...
 resources:
   requests:
     cpu: 1
   limits:
     cpu: "1200m"

ืขื ืžืขื‘ื“ ื”ื›ืœ ืงืฆืช ื™ื•ืชืจ ืžืกื•ื‘ืš. ืื ื ื—ื–ื•ืจ ืœืชืžื•ื ื” ืฉืœ ืžืขืจื›ืช ื”ื™ื—ืกื™ื ื‘ื™ืŸ Kubernetes ืœ-Docker, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื–ื” request.cpu ืžืชืื™ื --cpu-shares, ื•ืื™ืœื• limit.cpu ืชื•ืื ืืช ื”ื“ื’ืœ cpus ื‘-Docker.

ื”ืžืขื‘ื“ ืฉืžื‘ืงืฉ Kubernetes ืžื•ื›ืคืœ ื‘-1024, ื”ืฉื™ืขื•ืจ ืฉืœ ืžื—ื–ื•ืจื™ ื”ืžืขื‘ื“. ืื ืืชื” ืจื•ืฆื” ืœื‘ืงืฉ ืœื™ื‘ื” ืื—ืช ืžืœืื”, ืขืœื™ืš ืœื”ื•ืกื™ืฃ cpu: 1ื›ืคื™ ืฉืžื•ืฆื’ ืœืขื™ืœ.

ื‘ืงืฉืช ืœื™ื‘ื” ืžืœืื” (ืคืจื•ืคื•ืจืฆื™ื” = 1024) ืœื ืื•ืžืจืช ืฉื”ืžื›ื•ืœื” ืฉืœืš ืชืงื‘ืœ ืื•ืชื”. ืื ืœืžื—ืฉื‘ ื”ืžืืจื— ืฉืœืš ื™ืฉ ืœื™ื‘ื” ืื—ืช ื‘ืœื‘ื“ ื•ืืชื” ืžืคืขื™ืœ ื™ื•ืชืจ ืžืžื™ื›ืœ ืื—ื“, ืื– ื›ืœ ื”ืงื•ื ื˜ื™ื™ื ืจื™ื ื—ื™ื™ื‘ื™ื ืœื—ืœื•ืง ืืช ื”-CPU ื”ื–ืžื™ืŸ ื‘ื™ื ื™ื”ื. ืื™ืš ื–ื” ืงื•ืจื”? ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืชืžื•ื ื”.

ื›ื™ืฆื“ ืœื’ืฉืช ืœืžืฉืื‘ื™ Kubernetes Pod
ื‘ืงืฉืช CPU - ืžืขืจื›ืช ืœื™ื‘ื” ืื—ืช

ื‘ื•ืื• ื ื“ืžื™ื™ืŸ ืฉื™ืฉ ืœื›ื ืžืขืจื›ืช ืžืืจื— ืขื ืœื™ื‘ื” ืื—ืช ืฉืžืคืขื™ืœื” ืงื•ื ื˜ื™ื™ื ืจื™ื. ืืžื (Kubernetes) ืืคืชื” ืคืฉื˜ื™ื“ื” (CPU) ื•ืจื•ืฆื” ืœื—ืœืง ืื•ืชื” ื‘ื™ืŸ ื™ืœื“ื™ื (ืžื›ื•ืœื•ืช). ืฉืœื•ืฉื” ื™ืœื“ื™ื ืจื•ืฆื™ื ืคืฉื˜ื™ื“ื” ืฉืœืžื” (ืคืจื•ืคื•ืจืฆื™ื” = 1024), ื™ืœื“ ืื—ืจ ืจื•ืฆื” ื—ืฆื™ ืคืฉื˜ื™ื“ื” (512). ืืžื ืจื•ืฆื” ืœื”ื™ื•ืช ื”ื•ื’ื ืช ื•ืขื•ืฉื” ื—ื™ืฉื•ื‘ ืคืฉื•ื˜.

# ะกะบะพะปัŒะบะพ ะฟะธั€ะพะณะพะฒ ั…ะพั‚ัั‚ ะดะตั‚ะธ?
# 3 ั€ะตะฑะตะฝะบะฐ ั…ะพั‚ัั‚ ะฟะพ ั†ะตะปะพะผัƒ ะฟะธั€ะพะณัƒ ะธ ะตั‰ะต ะพะดะธะฝ ั…ะพั‡ะตั‚ ะฟะพะปะพะฒะธะฝัƒ ะฟะธั€ะพะณะฐ
cakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5
# ะ’ั‹ั€ะฐะถะตะฝะธะต ะฟะพะปัƒั‡ะฐะตั‚ัั ั‚ะฐะบ:
3 (ั€ะตะฑะตะฝะบะฐ/ะบะพะฝั‚ะตะนะฝะตั€ะฐ) * 1 (ั†ะตะปั‹ะน ะฟะธั€ะพะณ/ะฟะพะปะฝะพะต ัะดั€ะพ) + 1 (ั€ะตะฑะตะฝะพะบ/ะบะพะฝั‚ะตะนะฝะตั€) * 0.5 (ะฟะพะปะพะฒะธะฝะฐ ะฟะธั€ะพะณะฐ/ะฟะพะปะพะฒะธะฝะฐ ัะดั€ะฐ)
# ะกะบะพะปัŒะบะพ ะฟะธั€ะพะณะพะฒ ะธัะฟะตั‡ะตะฝะพ?
availableCakesNumber = 1
# ะกะบะพะปัŒะบะพ ะฟะธั€ะพะณะฐ (ะผะฐะบัะธะผะฐะปัŒะฝะพ) ะดะตั‚ะธ ั€ะตะฐะปัŒะฝะพ ะผะพะณัƒั‚ ะฟะพะปัƒั‡ะธั‚ัŒ?
newMaxRequest = 1 / 3.5 =~ 28%

ืœืคื™ ื”ื—ื™ืฉื•ื‘, ืฉืœื•ืฉื” ื™ืœื“ื™ื ื™ืงื‘ืœื• 28% ืžื”ืœื™ื‘ื”, ื•ืœื ืืช ื›ืœ ื”ืœื™ื‘ื”. ื”ื™ืœื“ ื”ืจื‘ื™ืขื™ ื™ืงื‘ืœ 14% ืžื”ื’ืจืขื™ืŸ ื”ืžืœื, ืœื ื—ืฆื™. ืื‘ืœ ื”ื“ื‘ืจื™ื ื™ื”ื™ื• ืฉื•ื ื™ื ืื ื™ืฉ ืœืš ืžืขืจื›ืช ืžืจื•ื‘ืช ืœื™ื‘ื•ืช.

ื›ื™ืฆื“ ืœื’ืฉืช ืœืžืฉืื‘ื™ Kubernetes Pod
ื‘ืงืฉืช ืžืขื‘ื“ - ืžืขืจื›ืช ืžืจื•ื‘ืช ืœื™ื‘ื•ืช (4).

ื‘ืชืžื•ื ื” ืœืžืขืœื” ื ื™ืชืŸ ืœืจืื•ืช ืฉืฉืœื•ืฉื” ื™ืœื“ื™ื ืจื•ืฆื™ื ืคืฉื˜ื™ื“ื” ืฉืœืžื”, ื•ืื—ื“ ืจื•ืฆื” ื—ืฆื™. ืžื›ื™ื•ื•ืŸ ืฉืืžื ืืคืชื” ืืจื‘ืข ืคืฉื˜ื™ื“ื•ืช, ื›ืœ ืื—ื“ ืžื™ืœื“ื™ื” ื™ืงื‘ืœ ื›ืžื” ืฉื™ืจืฆื”. ื‘ืžืขืจื›ืช ืžืจื•ื‘ืช ืœื™ื‘ื•ืช, ืžืฉืื‘ื™ ื”ืžืขื‘ื“ ืžื—ื•ืœืงื™ื ืขืœ ืคื ื™ ื›ืœ ืœื™ื‘ื•ืช ื”ืžืขื‘ื“ ื”ื–ืžื™ื ื•ืช. ืื ืžื™ื›ืœ ืžื•ื’ื‘ืœ ืœืคื—ื•ืช ืžืœื™ื‘ืช ืžืขื‘ื“ ืื—ืช ืžืœืื”, ื”ื•ื ืขื“ื™ื™ืŸ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื• ื‘-100%.

ื”ื—ื™ืฉื•ื‘ื™ื ืฉืœืขื™ืœ ืžืคื•ืฉื˜ื™ื ื›ื“ื™ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ื”ืžืขื‘ื“ ืžื—ื•ืœืง ื‘ื™ืŸ ืžื™ื›ืœื™ื. ื›ืžื•ื‘ืŸ, ืžืœื‘ื“ ื”ืงื•ื ื˜ื™ื™ื ืจื™ื ืขืฆืžื, ื™ืฉื ื ืชื”ืœื™ื›ื™ื ื ื•ืกืคื™ื ืฉืžืฉืชืžืฉื™ื ื’ื ื‘ืžืฉืื‘ื™ CPU. ื›ืืฉืจ ืชื”ืœื™ื›ื™ื ื‘ืžื™ื›ืœ ืื—ื“ ืื™ื ื ืคืขื™ืœื™ื, ืื—ืจื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืžืฉืื‘ ืฉืœื•. CPU: "200m" ืžืชืื™ื CPU: 0,2, ื›ืœื•ืžืจ ื‘ืขืจืš 20% ืžืœื™ื‘ื” ืื—ืช.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื“ื‘ืจ ืขืœ limit.cpu. ื”ืžืขื‘ื“ ืฉ-Kubernetes ืžื’ื‘ื™ืœ ืžื•ื›ืคืœ ื‘-100. ื”ืชื•ืฆืื” ื”ื™ื ืžืฉืš ื”ื–ืžืŸ ืฉื”ืžื™ื›ืœ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœ 100 ยตs (cpu-period).

limit.cpu ืชื•ืื ืืช ื“ื’ืœ Docker --cpus. ื–ื”ื• ืฉื™ืœื•ื‘ ื—ื“ืฉ ืฉืœ ื™ืฉืŸ --cpu-period ะธ --cpu-quota. ืขืœ ื™ื“ื™ ื”ื’ื“ืจืชื•, ืื ื• ืžืฆื™ื™ื ื™ื ื›ืžื” ืžืฉืื‘ื™ ืžืขื‘ื“ ื–ืžื™ื ื™ื ื”ืžื™ื›ืœ ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืฆื•ืจื” ืžืงืกื™ืžืœื™ืช ืœืคื ื™ ืชื—ื™ืœืช ื”ืžืฆืขืจืช:

  • ืžืขื‘ื“ - ืฉื™ืœื•ื‘ cpu-period ะธ cpu-quota. cpus = 1.5 ืฉื•ื•ื” ืขืจืš ืœื”ื’ื“ืจื” cpu-period = 100000 ะธ cpu-quota = 150000;
  • ืชืงื•ืคืช ื”ืžืขื‘ื“ - ืคืจืง ื–ืžืŸ ืžืชื–ืžืŸ CPU CFS, ื‘ืจื™ืจืช ืžื—ื“ืœ 100 ืžื™ืงืจื• ืฉื ื™ื•ืช;
  • ืžื›ืกืช ืžืขื‘ื“ - ืžืกืคืจ ืžื™ืงืจื•-ืฉื ื™ื•ืช ื‘ืคื ื™ื cpu-period, ืืฉืจ ืชื—ื•ื ืขืœ ื™ื“ื™ ื”ืžื™ื›ืœ.

ืžื” ืงื•ืจื” ืื ืืชื” ืžืชืงื™ืŸ ืœื ืžืกืคื™ืง ืžืขื‘ื“ ืžื‘ื•ืงืฉ?

ืื ื”ืžื™ื›ืœ ืฆืจื™ืš ื™ื•ืชืจ ืžืžื” ืฉื”ื•ืชืงืŸ, ื”ื•ื ื™ื’ื ื•ื‘ ืžืขื‘ื“ ืžืชื”ืœื™ื›ื™ื ืื—ืจื™ื.

ืžื” ืงื•ืจื” ืื ืžื’ื“ื™ืจื™ื ืืช ืžื’ื‘ืœืช ื”ืžืขื‘ื“ ื ืžื•ืš ืžื“ื™?

ืžืื—ืจ ื•ืžืฉืื‘ ื”-CPU ื ื™ืชืŸ ืœื”ืชืืžื”, ื”ืžืฆืขืจืช ืชื•ืคืขืœ.

ืžื” ืงื•ืจื” ืื ืœื ืชืฆื™ื™ืŸ ื‘ืงืฉืช ืžืขื‘ื“?

ื›ืžื• ื‘ื–ื™ื›ืจื•ืŸ, ืขืจืš ื”ื‘ืงืฉื” ืฉื•ื•ื” ืœื’ื‘ื•ืœ.

ืžื” ืงื•ืจื” ืื ืœื ืžืฆื™ื™ื ื™ื ืžื’ื‘ืœืช ืžืขื‘ื“?

ื”ืžื™ื›ืœ ื™ืฉืชืžืฉ ื‘ื›ืžื•ืช ื”ืžืขื‘ื“ ื”ื“ืจื•ืฉื” ืœื•. ืื ืžื“ื™ื ื™ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉืœ CPU (LimitRange) ืžื•ื’ื“ืจืช ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช, ืžื’ื‘ืœื” ื–ื• ืžืฉืžืฉืช ื’ื ืขื‘ื•ืจ ื”ืžื™ื›ืœ.

ืžื” ืงื•ืจื” ืื ืœื ืชืฆื™ื™ืŸ ื‘ืงืฉื” ืื• ืžื’ื‘ืœืช ืžืขื‘ื“?

ื›ืžื• ื‘ื–ื™ื›ืจื•ืŸ, ื–ื” ื”ืชืจื—ื™ืฉ ื”ื’ืจื•ืข ื‘ื™ื•ืชืจ. ื”ืžืชื–ืžืŸ ืœื ื™ื•ื“ืข ื›ืžื” ืžืฉืื‘ื™ื ื”ืžื™ื›ืœ ืฉืœืš ืฆืจื™ืš, ื•ื–ื” ื™ื›ื•ืœ ืœื’ืจื•ื ืœื‘ืขื™ื•ืช ืจืฆื™ื ื™ื•ืช ื‘ืฆื•ืžืช. ื›ื“ื™ ืœื”ื™ืžื ืข ืžื›ืš, ืขืœื™ืš ืœื”ื’ื“ื™ืจ ืžื’ื‘ืœื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืขื‘ื•ืจ ืžืจื—ื‘ื™ ืฉืžื•ืช (LimitRange).

ื–ื›ื•ืจ: ืื ืืชื” ืžื‘ืงืฉ ื™ื•ืชืจ CPU ืžืžื” ืฉื”ืฆืžืชื™ื ื™ื›ื•ืœื™ื ืœืกืคืง, ื”ืคื•ื“ ืœื ื™ืชื•ื–ืžืŸ. Requests.cpu - ืœื ื”ืขืจืš ื”ืžื™ื ื™ืžืœื™, ืืœื ืขืจืš ืžืกืคื™ืง ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื“ ื•ืœืขื‘ื•ื“ ืœืœื ืชืงืœื•ืช. ืื ื”ืืคืœื™ืงืฆื™ื” ืœื ืžื‘ืฆืขืช ื—ื™ืฉื•ื‘ื™ื ืžื•ืจื›ื‘ื™ื, ื”ืืคืฉืจื•ืช ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ื”ื™ื ืœื”ืชืงื™ืŸ request.cpu <= 1 ื•ืœื”ืคืขื™ืœ ื›ืžื” ื”ืขืชืงื™ื ืฉืฆืจื™ืš.

ื›ืžื•ืช ืื™ื“ื™ืืœื™ืช ืฉืœ ืžืฉืื‘ื™ื ืžื‘ื•ืงืฉื™ื ืื• ืžื’ื‘ืœืช ืžืฉืื‘ื™ื

ืœืžื“ื ื• ืขืœ ื”ืžื’ื‘ืœื” ืฉืœ ืžืฉืื‘ื™ ืžื—ืฉื•ื‘. ืขื›ืฉื™ื• ื”ื’ื™ืข ื”ื–ืžืŸ ืœืขื ื•ืช ืขืœ ื”ืฉืืœื”: "ื›ืžื” ืžืฉืื‘ื™ื ืฆืจื™ืš ื”ืคื•ื“ ืฉืœื™ ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื” ืœืœื ื‘ืขื™ื•ืช? ืžื”ื™ ื”ื›ืžื•ืช ื”ืื™ื“ื™ืืœื™ืช?

ืœืžืจื‘ื” ื”ืฆืขืจ, ืื™ืŸ ืชืฉื•ื‘ื•ืช ื‘ืจื•ืจื•ืช ืœืฉืืœื•ืช ืืœื•. ืื ืื™ื ืš ื™ื•ื“ืข ื›ื™ืฆื“ ื”ื™ื™ืฉื•ื ืฉืœืš ืขื•ื‘ื“ ืื• ื›ืžื” ืžืขื‘ื“ ืื• ื–ื™ื›ืจื•ืŸ ื”ื•ื ืฆืจื™ืš, ื”ืืคืฉืจื•ืช ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ื”ื™ื ืœืชืช ืœื™ื™ืฉื•ื ื”ืจื‘ื” ื–ื™ื›ืจื•ืŸ ื•ืžืขื‘ื“ ื•ืœืื—ืจ ืžื›ืŸ ืœื”ืจื™ืฅ ืžื‘ื—ื ื™ ื‘ื™ืฆื•ืขื™ื.

ื‘ื ื•ืกืฃ ืœืžื‘ื—ื ื™ ื‘ื™ืฆื•ืขื™ื, ืขืงื•ื‘ ืื—ืจ ื”ืชื ื”ื’ื•ืช ื”ืืคืœื™ืงืฆื™ื” ื‘ื ื™ื˜ื•ืจ ื‘ืžืฉืš ืฉื‘ื•ืข. ืื ื”ื’ืจืคื™ื ืžืฆื‘ื™ืขื™ื ืขืœ ื›ืš ืฉื”ืืคืœื™ืงืฆื™ื” ืฉืœืš ืฆื•ืจื›ืช ืคื—ื•ืช ืžืฉืื‘ื™ื ืžืžื” ืฉื‘ื™ืงืฉืช, ืชื•ื›ืœ ืœื”ืคื—ื™ืช ืืช ื›ืžื•ืช ื”ืžืขื‘ื“ ืื• ื”ื–ื™ื›ืจื•ืŸ ื”ืžื‘ื•ืงืฉ.

ื›ื“ื•ื’ืžื” ืจืื” ืืช ื–ื” ืœื•ื— ื”ืžื—ื•ื•ื ื™ื ืฉืœ ื’ืจืคื ื”. ื”ื•ื ืžืฆื™ื’ ืืช ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ื”ืžืฉืื‘ื™ื ืื• ืžื’ื‘ืœืช ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื ืœื‘ื™ืŸ ื”ืฉื™ืžื•ืฉ ื”ื ื•ื›ื—ื™ ื‘ืžืฉืื‘ื™ื.

ืžืกืงื ื”

ื‘ืงืฉื” ื•ื”ื’ื‘ืœืช ืžืฉืื‘ื™ื ืขื•ื–ืจืช ืœืฉืžื•ืจ ืขืœ ื‘ืจื™ืื•ืช ืืฉื›ื•ืœ Kubernetes ืฉืœืš. ืชืฆื•ืจืช ืžื’ื‘ืœื” ื ื›ื•ื ื” ืžืžื–ืขืจืช ืขืœื•ื™ื•ืช ื•ืฉื•ืžืจืช ืขืœ ื™ื™ืฉื•ืžื™ื ืคื•ืขืœื™ื ื‘ื›ืœ ืขืช.

ื‘ืงื™ืฆื•ืจ, ื™ืฉ ื›ืžื” ื“ื‘ืจื™ื ืฉื›ื“ืื™ ืœื–ื›ื•ืจ:

  1. ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื ื”ื ืชืฆื•ืจื” ืฉื ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ื‘ื–ืžืŸ ื”ื”ืคืขืœื” (ื›ืืฉืจ Kubernetes ืžืชื›ื ื ืช ืœืืจื— ืืช ื”ืืคืœื™ืงืฆื™ื”). ืœืขื•ืžืช ื–ืืช, ื”ื’ื‘ืœืช ืžืฉืื‘ื™ื ื—ืฉื•ื‘ื” ื‘ื–ืžืŸ ืจื™ืฆื” - ื›ืืฉืจ ื”ืืคืœื™ืงืฆื™ื” ื›ื‘ืจ ืคื•ืขืœืช ืขืœ ื”ืฆื•ืžืช.
  2. ื‘ื”ืฉื•ื•ืื” ืœื–ื™ื›ืจื•ืŸ, ื”ืžืขื‘ื“ ื”ื•ื ืžืฉืื‘ ืžื•ืกื“ืจ. ืื ืื™ืŸ ืžืกืคื™ืง ืžืขื‘ื“, ื”ืคื•ื“ ืฉืœืš ืœื ื™ื›ื‘ื” ื•ืžื ื’ื ื•ืŸ ื”ืžืฆืขืจืช ื™ื•ืคืขืœ.
  3. ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื ื•ืžื’ื‘ืœืช ื”ืžืฉืื‘ื™ื ืื™ื ื ืขืจื›ื™ ืžื™ื ื™ืžื•ื ื•ืžืงืกื™ืžื•ื! ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ื”ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื, ืืชื” ืžื‘ื˜ื™ื— ืฉื”ืืคืœื™ืงืฆื™ื” ืชืคืขืœ ืœืœื ื‘ืขื™ื•ืช.
  4. ืชืจื’ื•ืœ ื˜ื•ื‘ ื”ื•ื ืœื”ื’ื“ื™ืจ ืืช ื‘ืงืฉืช ื”ื–ื™ื›ืจื•ืŸ ืฉื•ื•ื” ืœืžื’ื‘ืœืช ื”ื–ื™ื›ืจื•ืŸ.
  5. ื”ืชื‘ืงืฉื” ื”ืชืงื ื” ื‘ืกื“ืจ CPU <=1, ืื ื”ืืคืœื™ืงืฆื™ื” ืœื ืžื‘ืฆืขืช ื—ื™ืฉื•ื‘ื™ื ืžื•ืจื›ื‘ื™ื.
  6. ืื ืชื‘ืงืฉ ื™ื•ืชืจ ืžืฉืื‘ื™ื ืžืžื” ืฉื–ืžื™ื ื™ื ื‘ืฆื•ืžืช, ื”ืคื•ื“ ืœืขื•ืœื ืœื ื™ืชื–ืžืŸ ืœืฆื•ืžืช ื–ื”.
  7. ื›ื“ื™ ืœืงื‘ื•ืข ืืช ื”ื›ืžื•ืช ื”ื ื›ื•ื ื” ืฉืœ ืžื’ื‘ืœื•ืช ื”ืžืฉืื‘ื™ื/ืžืฉืื‘ื™ื ื”ืžื‘ื•ืงืฉื™ื, ื”ืฉืชืžืฉ ื‘ื‘ื“ื™ืงืช ืขื•ืžืก ื•ื‘ื ื™ื˜ื•ืจ.

ืื ื™ ืžืงื•ื•ื” ืฉืžืืžืจ ื–ื” ื™ืขื–ื•ืจ ืœืš ืœื”ื‘ื™ืŸ ืืช ื”ืจืขื™ื•ืŸ ื”ื‘ืกื™ืกื™ ืฉืœ ื”ื’ื‘ืœืช ืžืฉืื‘ื™ื. ื•ืชื•ื›ืœ ืœื™ื™ืฉื ืืช ื”ื™ื“ืข ื”ื–ื” ื‘ืขื‘ื•ื“ืชืš.

ืžื–ืœ ื˜ื•ื‘!

ืžื” ืขื•ื“ ืœืงืจื•ื:

  1. ืฆืคื™ื•ืช SRE: ืžืจื—ื‘ื™ ืฉืžื•ืช ื•ืžื‘ื ื” ืžื˜ืจื™.
  2. 90+ ื›ืœื™ื ืฉื™ืžื•ืฉื™ื™ื ืขื‘ื•ืจ Kubernetes: ืคืจื™ืกื”, ื ื™ื”ื•ืœ, ื ื™ื˜ื•ืจ, ืื‘ื˜ื—ื” ื•ืขื•ื“.
  3. ื”ืขืจื•ืฅ ืฉืœื ื• Around Kubernetes ื‘ื˜ืœื’ืจื.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”