ááŸááºáá»ááºá áá¬áá¬ááŒááº- á¥áá±á¬áááá®ážááœá¬ážá á¯á ááºážááŸá¯ááŒá áºáá±á¬ Omio á á€áá»ááºá áááœáá·áºááŸááºáááºážááẠá á¬áááºáá°áá»á¬ážááᯠá¡ááŒá±áá¶áá®á¡áá¯áá®á០Kubernetes ááœá²á·á ááºážááŸá¯áá¯á¶á á¶á á áááºáááºá á¬ážááœááºáááºááœá±á·áá»áá±á¬ ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážá¡áá áá°áá±á¬ááºááœá¬ážáá«áááºá ááá¯ááá¯á·áá±á¬ááá á¹á áá»á¬ážááŸáá·áº áááºážááŸá®ážáá»áœááºážáááºááŸá¯á ááá·áºá ááºááá¯ááºážáá»á¬ážááᯠáá»ááºááŒáá·áºá á±áá¯á¶áá¬áá á¡áá±ážá¡ááœá²ááá¯ááºáá±á¬ ááŒá¿áá¬áá»á¬ážááá¯áá« áá¬ááœááºáá±ážáá«áááºá
ááá·áºááœáẠá¡ááºááá®áá±ážááŸááºážáá
áºáᯠááááºáááá±ááŒááºážá áá»ááºážáá¬áá±ážá
á
áºáá±ážááŸá¯áá»á¬ážááᯠáá¯á¶á·ááŒááºááŒááºážááᯠáááºááá·áºáᬠá¡áááºááŒá±á¬áá·áºááá¯áááºááᯠá¡ááŒá±ááŸá¬áááá²á·áá«á ááŒá
áºááá¯ááºáá»á±ááŸááá±á¬ ááŸááºážáááºážáá»ááºáá
áºáá¯ááŸá¬ CPU á¡áááºážá¡ááŒá
áºááœá²áááºážááá·áºáááºáá»ááºáá»á¬ážááŸáá·áº áááºááá¯ááºáá«áááºá á€áááºááŸá¬ á€áá±á¬ááºážáá«ážááœáẠáá»áœááºá¯ááºááá¯á·ááŒá±á¬ááá·áºá¡áá¬ááŒá
áºáááºá
TL; DR:
áááºááẠCFS ááœá²áááºáž áá»áœááºááœááºážáá»ááºááŸááá±á¬ Linux kernel áá¬ážááŸááºážááᯠá¡áá¯á¶ážááŒá¯áá±áá«á Kubernetes (ááá¯á·ááá¯áẠKubelet ááœáẠCFS ááœá²áááºážáá»á¬ážááᯠááááºááŒááºáž) ááœáẠCPU ááá·áºáááºáá»ááºáá»á¬ážááᯠááááºááẠáá»áœááºá¯ááºááá¯á· ááŒááºážááŒááºážáááºááẠá¡ááŒá¶ááŒá¯á¡ááºáá«áááºá á¡á°ááá¯ááºá
Omio ááŸá¬ á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá áºáá¯áá¯á¶ážááᯠKubernetes á០á á®áá¶ááá·áºááœá²áá«áááºá. áá»áœááºá¯ááºááá¯á·á ááá¯ááºáá¶ááá¯ááºááŸáá·áº ááá¯ááºáá¶áá²á·á¡áá¯ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠKubernetes ááœáẠáá®ážááá·áºáá¯ááºáá±á¬ááºááẠ(áá»áœááºá¯ááºááá¯á·ááẠGoogle Kubernetes Engine ááá¯á¡áá¯á¶ážááŒá¯áááº)á ááŒá®ážáá²á·ááá·áº ááŒá±á¬ááºáá¡ááœááºážá áá»áœááºá¯ááºááá¯á·ááẠáá»áááºážááŸá±ážááœá±ážááŸá¯áá»á¬ážááᯠá áááºááœá±á·ááŸááá²á·áááºá á¡ááá®áá±ážááŸááºážáá»á¬ážááẠáá»ááºážáá¬áá±ážá á áºáá±ážááŸá¯áá»á¬ážááᯠáá¯á¶á·ááŒááºááŸá¯ áááºááœá¬ážááŒááºážá ááœááºáááºáá»áááºáááºááŸá¯ ááŒááºáá±á¬ááºááŒááºáž á ááẠá€á¡ááŒá¯á¡áá°ááẠáá»áœááºá¯ááºááá¯á·ááᯠá¡áá»áááºá¡áá±á¬áºááŒá¬ á áááºááŸá¯ááºááœá±ážá á±áá²á·ááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠááŒá¿áá¬ááᯠá¡áá±ážá¡áááºáá¬ážááẠáá¯á¶ážááŒááºáá²á·áááºá
áá±á¬ááºážáá«ážá¡áá»ááºážáá»á¯áẠ-
- ááœááºááááºáá¬áá»á¬ážááŸáá·áº Kubernetes á¡ááŒá±á¬ááºáž á áá¬ážá¡áááºážáááºá
- CPU áá±á¬ááºážááá¯áá»ááºáá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¯á¶á
- Multi-core áááºáááºážáá»ááºáá»á¬ážááœáẠCPU ááá·áºáááºáá»áẠáááºááá¯á·á¡áá¯ááºáá¯ááºáááºá
- CPU throttling ááá¯ááŒá±áá¬áá¶áááºáž
- ááŒá¿áá¬ááŒá±ááŸááºážáá»ááºááŸáá·áº ááœá²ááŒá¬ážááŸá¯áá»á¬ážá
ááœááºááááºáá¬áá»á¬ážááŸáá·áº Kubernetes á¡ááŒá±á¬ááºáž á áá¬ážá¡áááºážáááº
Kubernetes ááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá±á¬áááŸá áá±ááºáá®á á¶áááºááŸááºáá»ááºááŒá áºáááºá áááºážáá¡ááááá¬áááºááŸá¬ááœááºááááºáᬠorchestration ááŒá áºáááºá
кПМÑейМеÑÑ
ááááºáá áá»áœááºá¯ááºááá¯á·ááẠJava JARs/WARsá Python Eggs ááá¯á·ááá¯áẠáá¬áá¬áá»á¬ážáá±á«áºááœááºáááºáááºááẠexecutable áá»á¬ážáá²á·ááá¯á·áá±á¬ ááŸá±ážáá±á¬ááºážáá á¹á ááºážáá»á¬ážááᯠáááºáá®ážáá²á·ááá«áááºá ááá¯á·áá±á¬áºáááºáž áááºážááá¯á·ááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±áááºá á¡ááá¯á¡áá¯ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá«áááº- runtime áááºáááºážáá»áẠ(Java/Python) ááᯠááá·áºááœááºážááŒááºážá ááá¯á¡ááºáá±á¬ááá¯ááºáá»á¬ážááᯠááŸááºáááºáá±á¬áá±áá¬áá»á¬ážááœáẠáá¬ážááŸáááŒááºážá áááºáááºááŸá¯á áá áºá áá®ážááŒá¬ážáá¬ážááŸááºážááŸáá·áº ááá¯ááºáááºááŸá¯ááŸáá á±áááºá á áááºááá¯á·ááŒá áºáááºá áá áºáááºážááá¯ááá±á¬áºá ááœá²á·á ááºážááŸá¯á á®áá¶ááá·áºááœá²ááŸá¯ááᯠááá¯áá áá¯áẠá¡á¬áá¯á¶á áá¯ááºáááẠ(áááºážááẠáá±á¬á·ááºáá²á¡ááºáá»ááºáá®áá¬áá»á¬ážááŸáá·áº á áá áºá á®áá¶ááá·áºááœá²áá°áá»á¬ážááŒá¬ážááœáẠáááŒá¬áá ááŒááºážáá¯á¶ááŸá¯ááŒá áºáááºáááº)á
ááœááºááááºáá¬áá»á¬ážááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒá±á¬ááºážáá²áá²á·áááºá ááᯠáááºáá¬ááẠááœááºááááºáá¬áá¯á¶ááŒá áºáááºá áááºážááᯠáááá¯ááááºáá¬áááá² ááŒáá·áºá á¯á¶áá±á¬ áááºáááºááŸá¯áááºáááºážáá»áẠ(Java/Python/...) á¡áá«á¡ááẠááá¯á¡ááºáá±á¬ ááá¯ááºáá»á¬áž/áááºáá±á·ááºá»áá»á¬ážá ááŒáá¯áááºááá·áºááœááºážááŒá®áž á¡áááºááá·áºáá«ááŸááá±á¬ ááá¯ážáá»á²á·áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ ááá¯ááºá¡áá»áá¯ážá¡á á¬ážá¡ááŒá Ạááá¯ááºá á¬ážááŒá¯ááá¯ááºáá«áááºá ááŒá±áž ááœááºááááºáá¬áá»á¬ážááᯠá¡ááá¯á¡ááá·áºáá»á¬áž áááá¯á¡ááºáá² ááá°áá®áá±á¬ áá¬áá¬áá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
ááá¯á·á¡ááŒááºá ááœááºááááºáá¬áá»á¬ážááẠáááºážááá¯á·áááá¯ááºááá¯áẠsandbox áááºáááºážáá»ááºááœáẠáá¯ááºáá±á¬ááºáááºá áááºážááá¯á·ááœáẠáááºážááá¯á·á ááá¯ááºááá¯áẠvirtual network adapterá á¡ááá·áºá¡áááºááŒáá·áº áááºáá±á¬ááºááá¯ááºáá±á¬ áááºážááá¯á·á ááá¯ááºááá¯áẠááá¯ááºá áá áºá áááºážááá¯á·á ááá¯ááºááá¯áẠá¡áááºáááºáž áá¯ááºáááºážá ááºáá»á¬ážá CPU ááŸáá·áº memory ááœáẠáááºážááá¯á·á ááá¯ááºááá¯áẠááá·áºáááºáá»ááºáá»á¬áž á áááºááá¯á· ááŸááááºá á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠLinux kernel á á¡áá°ážá áá áºááœá²áá áºáá¯ááŒá áºááá·áº namespaces ááŒá±á¬áá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒá áºáááºá
Kubernetes
á¡á á±á¬ááá¯ááºážááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž Kubernetes ááẠááœááºááááºáá¬áá®ážááŸá¯ááºáá°ááŒá áºáááºá áááºážááẠá€áá²á·ááá¯á·á¡áá¯ááºáá¯ááºáááº- áááºááẠáááºážá¡á¬áž á ááºáá±á«ááºážáááºáá áºáá¯áá±ážáᬠ"áá±áž Kubernetesá áááá¯áááºáᬠ2 áá¯ááŸáá·áº 3 GB áááºááá¯áá®áá áºáá¯á á®áá«ááŸááá±á¬ áá»áœááºá¯ááºáááœááºááááºáá¬áááºáá¯ááᯠááœáá·áºááŒáá·áºáá¡á±á¬ááºá áááºážááá¯á·ááᯠáááºáááºáááºáááºááŒáá«á áá¯á·á" Kubernetes ááẠáá»ááºá¡áá¬áá»á¬ážááᯠááá¯á áá¯ááºáá«áááºá áááºážááẠá¡ááá²á·á áœááºážáááºááᯠááŸá¬ááœá±á·áááºááŒá áºááŒá®áž ááá¯á¡ááºáá«á áááºážááá¯á·ááᯠááŒááºáááºá áááºáá«á áá¬ážááŸááºážááŒá±á¬ááºážááá·áºá¡áá« á¡ááºááááºáá áºáá¯á á áááºááá¯á·ááᯠáá¯ááºáá±ážáááºááŒá áºáááºá á¡ááŒá±áá¶á¡á¬ážááŒáá·áºá Kubernetes ááẠááá·áºá¡á¬áž áá¬á·ááºáá²á¡á áááºá¡ááá¯ááºážááᯠáááºáá¯ááºááá¯ááºá á±ááŒá®áž á¡ááá®áá±ážááŸááºážáá»á¬áž ááŒáá·áºáá»ááºá¡áá¯á¶ážááŒá¯áááºááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠááá·áºáá»á±á¬áºáá±á¬ á áá áºáá»á¬ážá áœá¬ááᯠááŒá¯áá¯ááºáá±ážáááºá
áá°ááŒáááºážáá¡ááŒááºá០Kubernetes
Kubernetes ááŸá áá±á¬ááºážááá¯áá»ááºáá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážáá¬áž á¡áááºáááºáž
áá±á¬ááºážááŒá®á áá»áœááºá¯ááºááá¯á·ááẠááœááºááááºáá¬áá»á¬ážááŸáá·áº Kubernetes ááᯠáá¯á¶ážá¡á¯ááºáá¬ážáá«áááºá ááœááºááááºáá¬á¡áá»á¬ážá¡ááŒá¬ážááẠá ááºáá áºáá¯áááºážááœáẠáááºááŸáááá¯ááºááŒá±á¬ááºážááá¯áááºáž áá»áœááºá¯ááºááá¯á·áááá«áááºá
á¡áá»á¬ážáá°ááŸá¬ ááá¯ááºáááºážáá áºáá¯ááŸáá·áº ááŸáá¯ááºážááŸááºááŒáá·áºááá¯ááºáááºá áá»ááºáááºážáá±á¬ áááá¯ááºáá»á¬áž (á ááº/áá°áá áºáá»á¬áž) ááᯠá¡áááºááŸá¬ážáá° (ááœááºááááºáá¬áá»á¬áž) á¡áá»á¬ážá¡ááŒá¬ážááᯠáá±á«áºáá±á¬ááºááŒá®áž ááŸá¬ážáááºážáááºá Kubernetes ááẠá¡áááºááŒá¶ááŒá±á¡áá»áá¯ážáá±á¬ááºá¡ááŒá Ạáá±á¬ááºááœááºáááºá áá±ážá áá¬ááŸááá¬áá¬á á¡áááºááŸá¬ážááœá±ááᯠá¡áá»ááºážáá»ááºáž áááááá¹áááœá±ááá± áááºááá¯áá¬ááœááºááá²á áá°ááá¯á·áá²á áá áºáá±á¬ááºáá±á¬ááºá á¡áááºáá¬ááᯠáá±á·áá áºáááºáá±á¬áẠááŸá¬ážááá¯á· áá¯á¶ážááŒááºááẠáá¬ááŒá áºááá²á
á€áá±áá¬ááœáẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬áž áá«áááºáá¬áá«áááºá á á®áá®áá° áá±á¬ááºážááá¯áá»ááºááᯠá¡á á®á¡á á¥áºáááºááœááºáá»ááºá¡ááœááºáᬠááá¯á¡ááºáá«áááºá áááºážááẠááœááºááááºáá¬á "ááá¹áá á¬áááºáž" áá²á·ááá¯á· áá áºáá¯áá¯ááŒá áºááŒá®áž á¡ááá·áºáá±á¬áºáá¯á¶áž áá¯ááºááᯠááœá±ážáá»ááºááẠá¡áá¯á¶ážááŒá¯áááºá áá áºáá»áááºáááºážááŸá¬ááẠCPU ááᯠááá·áºááẠááŸá¬ážáááºážááŸá¯ááá±á¬áá°áá®áá»ááºáá áºáá¯ááŸáá·áº ááŸáá¯ááºážááŸááºááá¯ááºááẠ- áá»áœááºá¯ááºááá¯á·ááẠááœááºááááºáá¬á¡ááœáẠáá°áá áºáá áºáá¯ááᯠááœá±ážáá»ááºááŒá®ážáááºááŸáá·áºá áááá«á áááºááŸááºáá¬ážáá±á¬ ááá·áºáááºáá»ááºáá»á¬ážááᯠáá»á±á¬áºááœááºááœá¬ážáá«á ááŒá®ážâáá±á¬á· áá®âáá±áá¬ááŸá¬ ááŒá¿áá¬áááºâáááºâ...
Kubernetes ááœáẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¯á¶
Kubernetes ááẠCPU ááá·áºáááºáá»ááºáá»á¬ážááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá¡ááœáẠkernel ááœááºáááºáá±á¬ááºáá¬ážáá±á¬ á¡ááá·áºá¡áá¬ážááŒá¯áá¯ááºááá·áºááá¹ááá¬áž (áá¬áá®áááºáááºááŸá¯áá»á¬ážááᯠáá»á±á¬áºááœá¬ážááŒááºáž) ááá¯á¡áá¯á¶ážááŒá¯áááºá á¡ááá®áá±ážááŸááºážáá áºáá¯ááẠááá·áºáááºáá»ááºáááºáá»á±á¬áºááœááºáá«áá á¡áá¬ážá¡áá®ážááŒá¯áá¯ááºááŒááºážááᯠááœáá·áºáá¬ážáá«ááẠ(ááá¯ááá¯áááºááŸá¬ áááºážááẠCPU áááºáááºááŸá¯áááºážáá«ážááœá¬ážáááº)á áááºááá¯áá®á¡ááœáẠáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážááᯠááœá²ááŒá¬ážá áœá¬ á á®á á¥áºáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠááááŸáááẠááá¯ááá¯ááœááºáá°áá«áááºá áááºážááá¯áá¯ááºáá±á¬ááºáááºá áááºážááẠâOOMKilledâ áá¯ááºááá¯áẠpod ááá±á¬ááºáá¯á¶ážááŒááºáááºá áááºááŸá¯á¡ááŒá±á¡áá±ááá¯á á áºáá±ážáá«á K8s ááẠcgroups áá»á¬ážááá¯ááºáá² á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áºáᬠáááŸáááá¯ááºáá±á¬ áááºááá áºáá»á¬ážááá¯áᬠááŒá¯áá¯ááºáá±ážáá±á¬ááŒá±á¬áá·áº CPU á¡áá¬ážá¡áá®ážááŒá¯áá¯ááºááŒááºážááẠáááá¯ážááŸááºážáá«á
CPU áá±á¬ááºážááá¯ááŸá¯
CPU áá±á¬ááºážááá¯áá»ááºááᯠáááºááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááá²á
ááá¯ážááŸááºážá á±áááºá¡ááœáẠá¥ááá¬áá áºáá¯á¡áá±ááŒáá·áº 4-core CPU ááŸááá±á¬ á ááºááá¯á¡áá¯á¶ážááŒá¯ááá·áº áá¯ááºáááºážá ááºááᯠááŒáá·áºááŒáá«á áá¯á·á
K8s ááẠá¡áááºážá¡ááŒá
áºáá»á¬ážááœá²áá±ááŸá¯ (ááŸááºáá¬ááºááŸáá·áº áááá¯áááºáá¬) ááᯠááááºážáá»á¯ááºááẠááááºážáá»á¯ááºá¡á¯ááºá
á¯ááá¹ááá¬áž (cgroups) ááᯠá¡áá¯á¶ážááŒá¯áááºá áááºážá¡ááœáẠá¡áááºá¡á±á¬ááºáá¯á¶á
á¶ááᯠáááá¯ááºáááº- ááá±ážááẠáááá¡á¯ááºá
á¯á ááá·áºáááºáá»ááºáá»á¬ážááᯠá¡ááœá±áááºáá¶áááºá ááŒáá·áºááŒá°ážááŸá¯á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠvirtual ááá¯ááºá
áá
áºááœáẠááááºážáááºážáá¬ážáá«ááẠ(/sys/fs/cgroup
) áááá¯áááºáá¬ááŸá¬ áá®ááá¯áá«á /sys/fs/cgroup/cpu,cpuacct/*
.
K8s ááẠááá¯ááºááᯠá¡áá¯á¶ážááŒá¯áááºá cpu.share
áááá¯áááºáá¬á¡áááºážá¡ááŒá
áºáá»á¬ážááá¯ááœá²áá±áá±ážáááºá áá»áœááºá¯ááºááá¯á·áááá
á¹á
ááœááºá root cgroup ááẠCPU áááºážááŒá
áºáá»á¬ážá ááŸááºáᬠ4096 ááá¯áááŸáááẠ- áááŸáááá¯ááºáá±á¬áááá¯áááºáá¬áá«áá«á 100% (1 core = 1024; á€áááºááŸá¬ áá¯á¶áá±áááºááá¯ážááŒá
áºáááº)á áááºážááŒá
áºá¡á¯ááºá
á¯ááẠá
á¬áááºážááœááºážáá¬ážáá±á¬ áá¬ážá
ááºááŒá±ážáááºáá»á¬ážá ááŸááºáá¬áá»á¬ážáá±á«áºáá°áááºá á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠá¡áá»áá¯ážáá»ááœá²áá±áá±ážáá«áááºá cpu.share
ááááºá áá°ááá¯á·ááẠáá°ááá¯á·ááá¬ážá
ááºááŒá±ážááẠá
áááºááá¯á·ááᯠá¡áá¬ážáá°ááŒá¯áá áá¯á¶ááŸáẠKubernetes node ááœááºá root cgroup ááœáẠááá±áž áá¯á¶ážáŠážááŸááááº- system.slice
, user.slice
О kubepods
. áááá¡á¯ááºá
á¯ááœá²ááŸá
áºáá¯ááᯠá¡áá±ážááŒá®ážáá±á¬á
áá
Ạloads áá»á¬ážááŸáá·áº K8s ááŒááºáá¡áá¯á¶ážááŒá¯áá°áááá¯ááááºáá»á¬ážá¡ááŒá¬áž á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááŒáá·áºáá±áááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá áá±á¬ááºáá¯á¶ážáá
áºáᯠ- kubepods
â pods áá»á¬ážá¡ááŒá¬áž á¡áááºážá¡ááŒá
áºáá»á¬ážááᯠááŒáá·áºáá±ááẠKubernetes á០áááºáá®ážáá¬ážáááºá
á¡áááºáá±á¬áºááŒáá« áá¯á¶ááœáẠáááááŸáá·áº áá¯áááá¡á¯ááºá á¯ááœá²áá»á¬ážááẠáá áºáá¯á á®ááᯠáááºáá¶áááŸáááŒá±á¬ááºáž ááŒááááºá 1024 kuberpod á¡á¯ááºá á¯ááœá²ááœá²áá±áá±ážáá¬ážáá±á¬ ááŸááºáá¬áá»á¬áž 4096 ááŸááºáá¬áá»á¬áž áá«á áááºááá¯ááŒá áºááá¯ááºááá²- áá±á¬ááºáá¯á¶ážáá±á¬á·á root group ááŸá¬áᬠáááºáá±á¬ááºááœáá·áºááŸááá«áááºá 4096 ááŸááºáá¬áá»á¬ážááŸáá·áº áá°áááá¬ážá ááºááŒá±ážáááºáá»á¬ážá á¡á á¯ááŸááºáá¬áá»á¬áž ááẠá€á¡áá±á¡ááœááºááẠáááááá¬áᬠáá»á±á¬áºááœááºáá±ááẠ(6144)? ááá¯ááá¯áááºááŸá¬ áááºááá¯ážááẠáá¯áá¹ááááá±á¬ááŸááá±á¬ááŒá±á¬áá·áºá Linux á¡áá»áááºááá¬áž (CFS) ááẠCPU á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡áá»áá¯ážáá»ááœá²áá±ááẠáááºážááá¯á¡áá¯á¶ážááŒá¯áááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœáẠáááá¡á¯ááºá á¯ááŸá áºá á¯á áááºáá¶ááá°áááºá 680 ááŸááºáá¬á¡á á áºá¡ááŸááºáá»á¬áž (16,6 á 4096%) ááŸáá·áº kubepod ááẠáááºáá»ááºááᯠáááŸááááºá 2736 ááŸááºáá¬áá»á¬áž á ááºáááºááá·áºá¡áá« áááá¡á¯ááºá á¯ááŸá áºá á¯ááẠááœá²áá±áá±ážáá¬ážáá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡áá¯á¶ážáááŒá¯áá«á
áá¶áá±á¬ááºážáá±á¬ááºáá áœá¬á á¡á á®á¡á ááºááœá²áá°ááœáẠá¡áá¯á¶ážáááŒá¯áá±á¬ CPU á¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡ááá¿áááŒá áºá á±ááẠááá¹ááá¬ážáá áºáá¯ááŸááááºá áááºážááẠ"idle" á áœááºážáááºááᯠglobal pool áá áºáá¯ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáᬠáááºážááẠá¡ááá¯áááá¯áááºáá¬áá«áá«ááá¯á¡ááºáá±á¬á¡á¯ááºá á¯áá»á¬ážááá¯á· ááŒáá·áºáá±áá±ážááẠ(ááœáŸá²ááŒá±á¬ááºážááŸá¯ááŸá¬ á¡ááá¯ááºážáá¯á¶ážááŸá¯á¶ážááŸá¯ááá¯ááŸá±á¬ááºááŸá¬ážááẠá¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºááŒá áºáá±á«áºáááº)á á¡áá¬ážáá°áááºážáááºážááᯠáá¬ážá ááºááŒá±ážáááºá¡á¬ážáá¯á¶ážááœáẠáá»áá·áºáá¯á¶ážáááºá
á€ááá¹ááá¬ážááẠáááá¯áááºáá¬áá«áá«ááᯠááá¬ážáá»áŸáá áœá¬ ááœá²áá±áá±ážááŒá±á¬ááºáž áá±áá»á¬á á±ááŒá®áž á¡ááŒá¬ážáá°áá»á¬ážáá¶á០á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááºáá°á០âááá¯ážáá°ááŒááºážâ ááá¯ááºáá±á¬ááºááŒá±á¬ááºáž áá±áá»á¬á á±áááºá
CPU ááá·áºáááºáá»ááº
K8s ááŸá ááá·áºáááºáá»ááºáá»á¬ážááŸáá·áº áá±á¬ááºážááá¯áá»ááºáá»á¬ážá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááẠáááºáá°áá±á¬áºáááºážá áááºážááá¯á·á á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŸá¬ á¡ááœááºááœá¬ááŒá¬ážáááº- á¡áááºááŸá¬ážáá¯á¶áž ááŸááºáááºážááŸááºáᬠá¡áááºážáá¯á¶ážá¡ááá¯ááºážá
K8s áá«áááºáá«áááºá cfs_period_us
О cfs_quota_us
cgroup directory ááœáẠ(ááá¯ááºáááºáááºážááá¯áá±áá¬ááœááºáááºááŸááááºá cpu.share
).
ááá°áá² cpu.share
ááœá²áááºážá¡áá±á«áºá¡ááŒá±áá¶áááºá á¡áá»áááºáá¬ááááŸáááá¯ááºáá±á¬ áááá¯áááºáá¬áá«áá«ááœáẠáááŸááá«á cfs_period_us
áá¬á (á¡ááá¯ááºáž) áááŒá¬áá»áááºááᯠáááºááŸááºááẠ- áááºážááẠá¡ááŒá²áááºáž 100000 ÎŒs (100 ms) ááŒá
áºáááºá K8s ááœáẠá€áááºááá¯ážááᯠááŒá±á¬ááºážááẠááœá±ážáá»ááºááœáá·áºáá
áºáᯠááŸááááºá ááá¯á·áá±á¬áº áááºážááᯠáá±á¬áá±á¬áááºááœáẠalpha ááœááºáᬠáááá¯ááºáááºá á¡áá»áááºááá¬ážááœá²áá°ááẠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ ááœá²áááºážáá»á¬ážááᯠááŒááºáááºá
áááºááẠá¡ááá¯ááºážááᯠá¡áá¯á¶ážááŒá¯áááºá áá¯áááááá¯áẠcfs_quota_us
á á¡ááá¯ááºážáá
áºáá¯á
á®ááœáẠáááá¯ááºáá±á¬á¡áá»ááẠ(ááœá²áááºáž) ááᯠáááºááŸááºáááºá áááºážááᯠmicroseconds ááŒáá·áºáááºáž áááºááŸááºáá¬ážááŒá±á¬ááºáž áááááŒá¯áá«á ááœá²áááºážááẠáá±ááºáá¬áááᯠáá»á±á¬áºááœááºááá¯ááºáááºá áá
áºáááºážááá¯ááá±á¬áº áááºážááẠ100 ms ááẠááŒá®ážááá¯ááºáááºá
16-core á ááºáá»á¬áž (Omio ááœááºáá»áœááºá¯ááºááá¯á·ááŸáá¡áá¯á¶ážá¡áá»á¬ážáá¯á¶ážááœááºááŒá°áá¬á¡áá»áá¯ážá¡á á¬áž) áá¡ááŒá±á¡áá±ááŸá áºáá¯ááá¯ááŒáá·áºááŒáá«á áá¯á·á
áá¬ááºáááºáž 1: 2 á
á¬ááœá²áá»á¬ážááŸáá·áº 200 ms ááá·áºáááºáá»ááºá ááááºááá¯á·ááŒááºáž áááŸááá«á
áá¬ááºáááºáž 2- á
á¬ááœá² 10 áá¯ááŸáá·áº 200 ms ááá·áºáááºáá»ááºá Throttling ááẠ20 ms ááŒá®ážáá±á¬áẠá
áááºáááºá áá±á¬áẠ80 ms ááŒá®ážáá±á¬áẠáááá¯áááºáá¬áááºážááŒá
áºáá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºááᯠááŒááºáááºá
áááºáááº
CPU ááá·áºáááºáá»ááºááᯠáááºáááºááŸááºáá¬ážáááºááá¯áá«á áá¯á· 2 á á±á·áá»á¬áž; Kubernetes ááẠá€áááºááá¯ážááᯠ200 ms ááá¯á· áá¬áá¬ááŒááºáá«áááºá ááá¯ááá¯áááºááŸá¬ ááœááºááááºáá¬ááẠááááºááá¯á·ááŒááºážáááŸááá² CPU á¡áá»ááẠ200ms á¡áá»á¬ážáá¯á¶áž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
ááŒá®ážáá±á¬á· áá®áá±áá¬á áá»á±á¬áºá
áá¬ááœá± á
áááºáááºá á¡áááºááœááºáá±á¬áºááŒáá²á·ááá·áºá¡ááá¯ááºáž áááŸáááá¯ááºáá±á¬ááá¬áááẠ200 ms ááŒá
áºáááºá ááŒáá¯ááºáá°á¡áá¯ááºáá¯ááºáá±áááºá ááẠ12-core á
ááºáá
áºáá¯áá±á«áºááŸá áá»ááºááŒáá¯ážáá»á¬áž (áá¬ááºáááºáž 2 á¡ááœáẠáá¯á¶á¥ááá¬ááá¯ááŒáá·áºáá«)á á¡ááŒá¬áž pods áá»á¬ážá¡á¬ážáá¯á¶áž á¡áá¯ááºááá¯ááºáá²á ááœá²áááºážááẠ20 ms (10 * 20 ms = 200 ms) ááŸá
áááºá ááœá²áááºážáá¯ááºááœá¬ážáááºááŒá
áºááŒá®ážá ဠpod á thread áá»á¬ážá¡á¬ážáá¯á¶ážááẠááœá²ááœá¬ážáá«áááºá » (á¡ááá¯ážá¡ááŸá±á·ááŸááá¬áááááá¬) áá±á¬áẠ80 ms á¡ááœáẠáá±á¬áºááŒááŒá®ážáá¬ážáá«á
pods áá»á¬ážááœáẠthrottling ááá¯áááºááá¯á·á¡áá²ááŒááºááá²á
pod ááá¯á·áááºáá±á¬ááºááŒá®áž execute áá¯ááºáá«á cat /sys/fs/cgroup/cpu/cpu.stat
.
-
nr_periods
- á¡áá»áááºááá¬ážááœá²ááá·áºáá¬á á á¯á á¯áá±á«ááºážá¡áá±á¡ááœááºá -
nr_throttled
- ááœá²á·á ááºážááŸá¯ááœáẠá¡ááŸáááºááŒáŸáá·áºáá¬ážáá±á¬ áá¬ááá»á¬áž á¡áá±á¡ááœááºnr_periods
; -
throttled_time
- áá¬ááá¯á áá¹ááá·áºá¡ááœááºáž á á¯ááŒá¯á¶áá±á¬ á¡ááŸáááºááŒáŸáá·áºáá»áááºá
ááááºáá¬ááŒá áºáá±áá¬áá²?
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážá¡á¬ážáá¯á¶ážááœáẠááŒáá·áºáá¬ážáá±á¬ á¡áá¬ážá¡áá®ážááᯠáááŸááááºá áá áºáá«ááá± áá°áááºáááºá áá áºáá¬áá®ááœá² ááœááºáá¬ážáá¬ááẠááá¯á¡á¬ážáá±á¬ááºážáááºá
áááºážááẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááŒá áºáá±á«áºá á±ááẠ- á¡áááºááá·áºá á áºáá±ážááŒááºáž áá»áá¯á·ááœááºážáá»ááºáá»á¬ážá ááœááºááááºáᬠá¡á±ážáá²ááŒááºážá ááœááºáááºáá»áááºáááºááŸá¯ ááŒááºáá±á¬ááºááŒááºážá áááºáá±á¬ááºááŸá¯áá±á«áºááá¯ááŸá¯áá»á¬ážá¡ááœááºáž á¡áá»áááºáá¯ááºááœá¬ážááŒááºážá áááºážááẠáá±á¬ááºáá¯á¶ážááœáẠlatency ááá¯ážáá¬ááŒá®áž á¡ááŸá¬ážá¡ááœááºážááŸá¯ááºážáá»á¬áž ááá¯ážáá¬á á±áááºá
áá¯á¶ážááŒááºáá»ááºááŸáá·áºá¡áá»áá¯ážáááºáá»á¬áž
á¡áá¬á¡á¬ážáá¯á¶ážááá®ááŸá¬ááá¯ážááŸááºážáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠCPU ááá·áºáááºáá»ááºáá»á¬ážááᯠá áœáá·áºááœáŸááºááŒá®áž bug ááᯠááŒááºáááºááá·áº áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááá¯á· á¡á á¯á¡ááœá²á·áá»á¬ážá¡ááœááºáž OS kernel ááᯠá áááºááœááºážáá¶áá²á·áááºá áá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯áá»á¬ážááœáẠá¡ááŸá¬ážá¡ááœááºážá¡áá±á¡ááœáẠ(HTTP 5xx) ááẠáá»ááºáá»ááºážáááááá¬áá¬áá»áááºážááœá¬ážáááº-
HTTP 5xx á¡ááŸá¬ážáá»á¬áž
á¡áá±ážááŒá®ážáá±á¬áááºáá±á¬ááºááŸá¯áá
áºáá¯á¡ááœáẠHTTP 5xx á¡ááŸá¬ážáá»á¬áž
áá¯á¶á·ááŒááºáá»ááẠp95
á¡áá±ážáá«áá±á¬áááºáá±á¬ááºááŸá¯áá±á¬ááºážááá¯ááŸá¯ latencyá 95th áá¬ááá¯ááºááŸá¯ááºáž
áááºáááºá ááááº
á
á¶ááá°áá¬ááŒáá¬áá® á¡áá±á¡ááœááº
á¡ááá¯áá«áááºážáá¬áá²?
áá±á¬ááºážáá«ážá¡á ááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž
áá°áá®áá±á¬á¡áá»ááºááᯠá¡áá»á¬ážááá¯ááºááá¯ááºáááºážáá áºáá¯ááŒáá·áº áá±ážááœá²ááá¯ááºáááº... Kubernetes ááẠá¡áááºááŒá¶ááŒá±á¡áá»áá¯ážáá±á¬ááºáá áºáŠážá¡áá±ááŒáá·áº áá¯ááºáá±á¬ááºáááºá áá«áá±ááá·áº á¡áááºááŸá¬ážááœá±ááᯠáá áºáá±á¬ááºáá²á·áá áºáá±á¬áẠáááááá¹áááœá±ááá± áááºááá¯áá¬ááœááºááá²á áá°ááá¯á·áá²á áá áºáá±á¬ááºáá±á¬ááºá á¡áááºáá¬ááᯠáá±á·áá áºáááºáá±á¬áẠááŸá¬ážááá¯á· áá¯á¶ážááŒááºááẠáá¬ááŒá áºááá²á
áá®ááŸá¬ áááºážáááºá ááá¯áá
áá¯ááºáá±á¬ ááœááºááááºáá¬áá
áºáá¯ááẠá
ááºáá
áºáá¯áá±á«áºááŸá áááŸáááá¯ááºáá±á¬ CPU á¡áááºážá¡ááŒá
áºá¡á¬ážáá¯á¶ážááᯠá
á¬ážáá¯á¶ážááá¯ááºáááºá ááá·áºááœáẠá
áááºá¡ááá®áá±ážááŸááºáž stack áá
áºáá¯ááŸááá»áŸáẠ(á¥ááá¬á JVMá Goá Node VM ááᯠááŸááºáááºá
áœá¬ááŒááºáááºáá¬ážáááº)á áááºážááŸá¬ ááŒá¿áá¬ááá¯ááºáá«- áááºááẠááá¯ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœáẠá¡áá»áááºááŒá¬ááŒáá·áºá
áœá¬ á¡áá¯ááºáá¯ááºááá¯ááºáááºá ááá¯á·áá±á¬áº á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠá¡áá±á¬ááºážáá¯á¶ážááŒá
áºá¡á±á¬áẠáá¶á·áá»ááºážá
áœá¬ áá¯ááºáá±á¬ááºáá«á ááá¯á·ááá¯áẠáá¯á¶ážá optimized ááá¯ááºáá«á (FROM java:latest
) á¡ááŒá±á¡áá±á ááááºážáááá±á¬á·áá°ážá Omio ááœáẠáá»áœááºá¯ááºááá¯á·ááœáẠá¡ááááá¬áá¬á
áá¬ážá¡ááœá²á¡ááœáẠáá¯á¶áá±á¬ááºáá±á¬ áá°áááºážáááºáááºáá»á¬ážááŸáá·áºá¡áá° á¡ááá¯á¡áá»á±á¬ááºá¡ááŒá±áᶠDockerfiles áá»á¬ážááŸááááºá ááá¯á·ááŒá±á¬áá·áº á€ááŒá¿áá¬áááŸááá«á
ááá¯ááºážáá¬ááŸá¯áá»á¬ážááᯠá
á±á¬áá·áºááŒáá·áºááẠá¡ááŒá¶ááŒá¯á¡ááºáá«áááºá
ááá¯ážáá¬áž
áá«á áá»áœááºáá±á¬áºááá¯á·áá²á· áá¬ááºáááºážáá«á á¡á±á¬ááºáá«áá á¹á ááºážáá»á¬ážááẠááŒá áºáá»ááºáá±ááá·áºá¡áá¬áá»á¬ážááᯠáá¬ážáááºááẠáá»á¬ážá áœá¬á¡áá±á¬ááºá¡áá°ááŒá áºá á±áááº-
-
kernel.org â CFS á¡á á®á¡á ááºááœá²áá° ; -
kernel.org â CFS Bandwidth ááááºážáá»á¯ááºááŸá¯ ; -
Linux Container Scheduling ááᯠáá¬ážáááºááŒááºážá ; -
Linux ááœááºááááºáá¬áá»á¬ážá¡ááŒá±á¬ááºáž áááºááááá¯ááá»áŸá á¡ááá¯ááºáž á- Linux ááááºážáá»á¯ááºááŸá¯á¡á¯ááºá á¯áá»á¬ážááŸáá·áº áá¯ááºáááºážá áẠáá®ážááŒá¬ážááœá²áá¯ááºááŒááºážá ; -
Kubernetes áá»ááºááœááºáá¬ááºáááºážáá»á¬áž - "cpu throttling" ááá¯ááŸá¬áá«á
Kubernetes bug á¡á á®áááºáá¶á á¬áá»á¬áž-
-
#51135- Guaranteed pods á¡ááœáẠCPU ááá·áºáááºáá»ááºáá»á¬áž áááºááŸááºááŒááºážááᯠááŸá±á¬ááºááŒááºáá«á ; -
#67577- CFS ááœá²áááºážáá»á¬ážááẠáááá¯á¡ááºáá² á¡ááá·áºá¡áá¬ážááŒá áºá á±ááá¯ááºáááºá ; -
á¡ááœááºááŒááºážáááºáá±á¬ CFS .
ááá·áºá¡áá±á·á¡áá»áá·áºááœáẠá¡áá¬ážáá°ááŒá¿áá¬áá»á¬áž ááŒá¯á¶ááœá±á·áá°ážáá«ááá¬áž ááá¯á·ááá¯áẠááœááºááááºáá¬áá¯ááºááá¯ážáá¬ážáá±á¬ áá¯ááºáá¯ááºááŸá¯áááºáááºážáá»ááºááœáẠá¡ááá·áºá¡áá¬ážááŒá áºá á±ááá·áº á¡ááœá±á·á¡ááŒá¯á¶ááŸááá«ááá¬ážá ááá·áºáá¬ááºáááºážááᯠááŸááºáá»ááºáá»á¬ážááœáẠáá»áŸáá±áá«á
PS áá¬áá¬ááŒááºááŸ
áá»áœááºá¯ááºááá¯á·áááá±á¬á·ááºááœááºáááºážáááºáá«
- «
Kubernetes ááœáẠá¡á±á¬áºááá¯á áá±ážáá»á²á·ááŒááºážááŸáá·áº á¡áááºážá¡ááŒá áºá á®áá¶ááá·áºááœá²ááŸá¯ (ááŒááºáááºáá¯á¶ážáááºááŒááºážááŸáá·áº áá®áá®ááá¯á¡á á®áááºáá¶á á¬) "; - «
Kubernetes ááœáẠCPU Manager á¡áá¯ááºáá¯ááºáá¯á¶ "; - «
kubectl run áá±á¬á¡áá«ááœáẠKubernetes ááœáẠáá¬ááŒá áºááœá¬ážááááºážá á¡ááá¯ááºáž 2 "á
source: www.habr.com