{"id":94262,"date":"2020-09-14T19:42:34","date_gmt":"2020-09-14T17:42:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod"},"modified":"2020-09-14T19:42:34","modified_gmt":"2020-09-14T17:42:34","slug":"kak-poluchit-dostup-k-resursam-kubernetes-pod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod","title":{"rendered":"Hur man f\u00e5r \u00e5tkomst till resurser i Kubernetes Pod","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Hur man f\u00e5r \u00e5tkomst till resurser i Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/3d6760d512ef456daad121f7d1ddbcf8.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" href=\"https:\/\/www.deviantart.com\/tohad\/art\/The-Reward-549720998\"><i>Bel\u00f6ningen av Tohad<\/i><\/a><\/noindex><\/p>\n<p>I b\u00f6rjan av arbetet med Kubernetes gl\u00f6mmer man ofta att konfigurera containerresurser. Vid det h\u00e4r skedet r\u00e4cker det att se till att Docker-bilden fungerar och kan deployas i Kubernetes-klustret.<\/p>\n<p>Men senare kr\u00e4vs det att applikationen deployas i produktionsklustret tillsammans med andra applikationer. F\u00f6r detta m\u00e5ste resurser tilldelas till containern och det m\u00e5ste s\u00e4kerst\u00e4llas att det finns tillr\u00e4ckligt med resurser f\u00f6r att starta och k\u00f6ra applikationen, s\u00e5 att det inte uppst\u00e5r problem i de andra k\u00f6rande applikationerna.<\/p>\n<p>Team <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Kubernetes aaS fr\u00e5n Mail.ru<\/a><\/noindex> \u00f6versatte artikeln om containerresurser (CPU &amp; MEM), resursf\u00f6rfr\u00e5gningar och resursbegr\u00e4nsningar. Du f\u00e5r veta vilka f\u00f6rdelar dessa inst\u00e4llningar ger och vad som kommer att h\u00e4nda om de inte st\u00e4lls in.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Ber\u00e4kningsresurser<\/h2>\n<p>\nVi har tv\u00e5 typer av resurser med f\u00f6ljande enheter:<\/p>\n<ul>\n<li>Centralprocessor (CPU) \u2013 k\u00e4rnor;<\/li>\n<li>Minne (MEM) \u2013 byte.<\/li>\n<\/ul>\n<p>\nResurser anges f\u00f6r varje container. I den f\u00f6ljande YAML-filen f\u00f6r Pod kommer du att se resursavsnittet som inneh\u00e5ller beg\u00e4rda och begr\u00e4nsade resurser:<\/p>\n<ul>\n<li>Beg\u00e4rda resurser f\u00f6r Pod = summan av beg\u00e4rda resurser f\u00f6r alla containrar;<\/li>\n<li>Begr\u00e4nsade resurser f\u00f6r Pod = summan av begr\u00e4nsade resurser f\u00f6r alla containrar.<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: v1\nkind: Pod\nmetadata:\n  name: backend-pod-name\n  labels:\n    application: backend\nspec:\n  containers:\n    \u2014 name: main-container\n      image: my-backend\n      tag: v1\n      ports:\n      \u2014 containerPort: 8080\n      resources:\n        requests:\n          cpu: 0.2 # REQUESTED CPU: 200m cores\n          memory: &quot;1Gi&quot; # REQUESTED MEM: 1Gi\n        limits:\n          cpu: 1 # MAX CPU USAGE: 1 core\n          memory: &quot;1Gi&quot; # MAX MEM USAGE:  1Gi\n    \u2014 name: other-container\n      image: other-app\n      tag: v1\n      ports:\n      \u2014 containerPort: 8000\n      resources:\n        requests:\n          cpu: &quot;200m&quot; # REQUESTED CPU: 200m cores\n          memory: &quot;0.5Gi&quot; # REQUESTED MEM: 0.5Gi\n        limits:\n          cpu: 1 # MAX CPU USAGE: 1 core\n          memory: &quot;1Gi&quot; # MAX MEM USAGE:  1Gi<\/code><\/pre>\n<p>Exempel p\u00e5 beg\u00e4rda och begr\u00e4nsade resurser<\/p>\n<p>F\u00e4ltet <code>resources.requested<\/code> fr\u00e5n Pod-specifikationen \u2014 ett av elementen som anv\u00e4nds f\u00f6r att hitta den n\u00f6dv\u00e4ndiga noden. Redan h\u00e4r kan man schemal\u00e4gga distributionen av Pod. Hur letar man efter en l\u00e4mplig nod?<\/p>\n<p>Kubernetes best\u00e5r av flera komponenter, inklusive en huvudnod eller masternod (Kubernetes Control Plane). I masterknuten finns flera processer: kube-apiserver, kube-controller-manager och kube-scheduler. <\/p>\n<p>Processen kube-scheduler ansvarar f\u00f6r att granska nyskapade moduler och s\u00f6ka efter m\u00f6jliga arbetsnoder som uppfyller alla modulers krav, inklusive m\u00e4ngden beg\u00e4rda resurser. Listan \u00f6ver noder som kube-scheduler hittar rangordnas. Pod schemal\u00e4ggs p\u00e5 noden med de h\u00f6gsta po\u00e4ngen.<\/p>\n<p><img decoding=\"async\" alt=\"Hur man f\u00e5r \u00e5tkomst till resurser i Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/b489991a3cbbd5359c99701886d488e5.jpg\" style=\"display:block;margin: 0 auto;\" \/>Vart kommer den lila Pod att placeras?<\/p>\n<p>I bilden kan vi se att kube-scheduler m\u00e5ste schemal\u00e4gga en ny lila Pod. Kubernetes-klustret inneh\u00e5ller tv\u00e5 noder: A och B. Som ni kan notera kan kube-scheduler inte schemal\u00e4gga Pod p\u00e5 nod A \u2014 de tillg\u00e4ngliga (oanv\u00e4nda) resurserna matchar inte kraven f\u00f6r den lila Pod. S\u00e5 den beg\u00e4rda minneskapaciteten p\u00e5 1 GB fr\u00e5n den lila Pod f\u00e5r inte plats p\u00e5 nod A, eftersom det tillg\u00e4ngliga minnet \u00e4r 0,5 GB. Men nod B har tillr\u00e4ckligt med resurser. Som resultat beslutar kube-scheduler att destinationen f\u00f6r den lila Pod \u00e4r nod B.<\/p>\n<p>Nu vet vi hur de beg\u00e4rda resurserna p\u00e5verkar valet av nod f\u00f6r att k\u00f6ra Pod. Men hur p\u00e5verkar de maximala resurserna?<\/p>\n<p>Maximala resurser \u00e4r gr\u00e4nsen som CPU\/MEM inte f\u00e5r \u00f6verskrida. Emellertid \u00e4r CPU-resursen flexibel, s\u00e5 containrar som har n\u00e5tt begr\u00e4nsningsv\u00e4rdena f\u00f6r CPU kommer inte att avsluta Pod. Ist\u00e4llet kommer CPU att throttlas. Om minnesgr\u00e4nsen n\u00e5s kommer containern att stoppas av OOM-Killer och startas om om det \u00e4r till\u00e5tet av inst\u00e4llningen RestartPolicy.<\/p>\n<h2>Beg\u00e4rda och maximala resurser i detalj<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Hur man f\u00e5r \u00e5tkomst till resurser i Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/22e672100940e8895ae42a56a681111f.jpg\" style=\"display:block;margin: 0 auto;\" \/>Resurskopplingen mellan Docker och Kubernetes<\/p>\n<p>Det b\u00e4sta s\u00e4ttet att f\u00f6rklara hur beg\u00e4rda och maximala resurser fungerar \u00e4r att visa kopplingen mellan Kubernetes och Docker. P\u00e5 bilden ovan kan du se hur f\u00e4lten i Kubernetes och startflaggorna f\u00f6r Docker h\u00e4nger ihop.<\/p>\n<h2>Minnesbeg\u00e4ran och begr\u00e4nsning<\/h2>\n<p><\/p>\n<pre><code class=\"plaintext\">containers:\n...\n resources:\n   requests:\n     memory: &quot;0.5Gi&quot;\n   limits:\n     memory: &quot;1Gi&quot;\n<\/code><\/pre>\n<p>\nSom n\u00e4mnts ovan m\u00e4ts minnet i byte. Baserat p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/manage-resources-containers\/#meaning-of-memory\">dokumentationen f\u00f6r Kubernetes<\/a><\/noindex>, kan vi ange minnet som ett heltal. Normalt \u00e4r det ett heltal, exempelvis 2678 \u2014 det vill s\u00e4ga 2678 byte. Du kan ocks\u00e5 anv\u00e4nda suffix <code>G<\/code> och <code>Gi<\/code>, det viktiga \u00e4r att komma ih\u00e5g att de inte \u00e4r likv\u00e4rdiga. Den f\u00f6rsta \u00e4r decimal och den andra \u00e4r bin\u00e4r. Som exempel, som n\u00e4mnts i k8s-dokumentationen: <code>128974848<\/code>, <code>129e6<\/code>, <code>129M<\/code>, <code>123Mi<\/code> \u2014 de \u00e4r praktiskt taget ekvivalenta.<\/p>\n<p>Kubernetes-parametern <code>limits.memory<\/code> motsvarar flaggan <code>--memory<\/code> fr\u00e5n Docker. N\u00e4r det g\u00e4ller <code>request.memory<\/code> finns det ingen motsvarande flagg f\u00f6r Docker, eftersom Docker inte anv\u00e4nder detta f\u00e4lt. Du kanske undrar om det verkligen beh\u00f6vs? Ja, det beh\u00f6vs. Som jag redan har sagt \u00e4r f\u00e4ltet betydelsefullt f\u00f6r Kubernetes. Baserat p\u00e5 informationen i det beslutar kube-scheduler vilken nod som Pod ska schemal\u00e4ggas p\u00e5.<\/p>\n<p><strong>Vad h\u00e4nder om du s\u00e4tter en otillr\u00e4cklig minnesbeg\u00e4ran?<\/strong><\/p>\n<p>Om containern n\u00e5r gr\u00e4nserna f\u00f6r beg\u00e4rt minne s\u00e4tts Pod i en grupp av Pods som stoppas n\u00e4r det saknas minne p\u00e5 noden.<\/p>\n<p><strong>Vad h\u00e4nder om du st\u00e4ller in ett f\u00f6r l\u00e5gt minnesgr\u00e4nsv\u00e4rde?<\/strong><\/p>\n<p>Om containern \u00f6verskrider minnesgr\u00e4nsen kommer den att avslutas p\u00e5 grund av OOM-Killed. Den kommer att startas om om det \u00e4r m\u00f6jligt enligt RestartPolicy, d\u00e4r standardv\u00e4rdet \u00e4r <code>Alltid<\/code>.<\/p>\n<p><strong>Vad h\u00e4nder om du inte anger beg\u00e4rt minne?<\/strong><\/p>\n<p>Kubernetes tar minnesgr\u00e4nsen och s\u00e4tter den som standardv\u00e4rde.<\/p>\n<p><strong>Vad kan h\u00e4nda om du inte anger gr\u00e4ns f\u00f6r minne?<\/strong><\/p>\n<p>Containern har inga begr\u00e4nsningar och kan anv\u00e4nda s\u00e5 mycket minne den vill. Om den b\u00f6rjar anv\u00e4nda allt tillg\u00e4ngligt minne p\u00e5 noden kommer den att d\u00f6das av OOM. Containern kommer sedan att startas om om det \u00e4r m\u00f6jligt enligt RestartPolicy.<\/p>\n<p><strong>Vad h\u00e4nder om du inte anger minnesgr\u00e4nser?<\/strong><\/p>\n<p>Det v\u00e4rsta scenariot: schemal\u00e4ggaren vet inte hur mycket resurser containern beh\u00f6ver, vilket kan orsaka allvarliga problem p\u00e5 noden. I s\u00e5 fall \u00e4r det bra att ha standardgr\u00e4nser i namnomr\u00e5det (inst\u00e4llda av LimitRange). Det finns inga standardgr\u00e4nser \u2014 Poden har inga begr\u00e4nsningar och kan anv\u00e4nda s\u00e5 mycket minne den vill.<\/p>\n<p>Om det beg\u00e4ra minnet \u00e4r st\u00f6rre \u00e4n vad noden kan erbjuda, kommer Poden inte att schemal\u00e4ggas. Det \u00e4r viktigt att komma ih\u00e5g att <code>Requests.memory<\/code> \u2014 \u00e4r inte ett minimiv\u00e4rde. Det beskriver m\u00e4ngden minne som kr\u00e4vs f\u00f6r att containern ska fungera kontinuerligt. <\/p>\n<p>Det rekommenderas vanligtvis att st\u00e4lla in samma v\u00e4rde f\u00f6r <code>request.memory<\/code> och <code>limit.memory<\/code>. P\u00e5 s\u00e5 s\u00e4tt kommer Kubernetes inte att schemal\u00e4gga Poden p\u00e5 en nod som har tillr\u00e4ckligt med minne f\u00f6r att k\u00f6ra Poden, men inte tillr\u00e4ckligt f\u00f6r att driva den. T\u00e4nk p\u00e5 att n\u00e4r Kubernetes schemal\u00e4gger Poden, tar det endast h\u00e4nsyn till <code>requests.memory<\/code>, och <code>limits.memory<\/code> inte r\u00e4knas med.<\/p>\n<h2>CPU: beg\u00e4ran och begr\u00e4nsning<\/h2>\n<p><\/p>\n<pre><code class=\"plaintext\">containers:\n...\n resources:\n   requests:\n     cpu: 1\n   limits:\n     cpu: &quot;1200m&quot;\n<\/code><\/pre>\n<p>\nMed CPU \u00e4r det lite mer komplicerat. N\u00e4r vi \u00e5terv\u00e4nder till bilden av sambandet mellan Kubernetes och Docker, kan vi se att <code>request.cpu<\/code> motsvarar <code>--cpu-shares<\/code>, medan <code>limit.cpu<\/code> motsvarar flaggan <code>cpus<\/code> i Docker.<\/p>\n<p>CPU:n som Kubernetes beg\u00e4r multipliceras med 1024 \u2014 f\u00f6rh\u00e5llandet av CPU-cykler. Om du vill beg\u00e4ra 1 helt k\u00e4rna, m\u00e5ste du l\u00e4gga till <code>cpu: 1<\/code>, som visas ovan. <\/p>\n<p>Att beg\u00e4ra en hel k\u00e4rna (f\u00f6rh\u00e5llande = 1024) betyder inte att din container kommer att f\u00e5 den. Om din v\u00e4rd-dator bara har en k\u00e4rna, och du anv\u00e4nder mer \u00e4n en container, m\u00e5ste alla containrar dela p\u00e5 det tillg\u00e4ngliga CPU:t mellan sig. Hur fungerar det? L\u00e5t oss ta en titt p\u00e5 bilden.<\/p>\n<p><img decoding=\"async\" alt=\"Hur man f\u00e5r \u00e5tkomst till resurser i Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/7f4b20642708ef3a7e773d7900161267.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCPU-f\u00f6rfr\u00e5gan \u2014 system med ett k\u00e4rna<\/p>\n<p>L\u00e5t oss f\u00f6rest\u00e4lla oss att du har ett v\u00e4rdsystem med ett k\u00e4rna d\u00e4r containrar k\u00f6rs. Mamma (Kubernetes) har bakat en paj (CPU) och vill dela den mellan sina barn (containrar). Tre barn vill ha en hel paj (andel = 1024), ett barn vill ha h\u00e4lften av pajen (512). Mamma vill vara r\u00e4ttvis och g\u00f6r en enkel ber\u00e4kning.<\/p>\n<pre><code class=\"plaintext\"># \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u0440\u043e\u0433\u043e\u0432 \u0445\u043e\u0442\u044f\u0442 \u0434\u0435\u0442\u0438?\n# 3 \u0440\u0435\u0431\u0435\u043d\u043a\u0430 \u0445\u043e\u0442\u044f\u0442 \u043f\u043e \u0446\u0435\u043b\u043e\u043c\u0443 \u043f\u0438\u0440\u043e\u0433\u0443 \u0438 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043f\u0438\u0440\u043e\u0433\u0430\ncakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5\n# \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:\n3 (\u0440\u0435\u0431\u0435\u043d\u043a\u0430\/\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430) * 1 (\u0446\u0435\u043b\u044b\u0439 \u043f\u0438\u0440\u043e\u0433\/\u043f\u043e\u043b\u043d\u043e\u0435 \u044f\u0434\u0440\u043e) + 1 (\u0440\u0435\u0431\u0435\u043d\u043e\u043a\/\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440) * 0.5 (\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0438\u0440\u043e\u0433\u0430\/\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u044f\u0434\u0440\u0430)\n# \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u0440\u043e\u0433\u043e\u0432 \u0438\u0441\u043f\u0435\u0447\u0435\u043d\u043e?\navailableCakesNumber = 1\n# \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u0440\u043e\u0433\u0430 (\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e) \u0434\u0435\u0442\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c?\nnewMaxRequest = 1 \/ 3.5 =~ 28%<\/code><\/pre>\n<p>\nBaserat p\u00e5 ber\u00e4kningen kommer tre barn att f\u00e5 28 % av en k\u00e4rna, inte en hel k\u00e4rna. Det fj\u00e4rde barnet kommer att f\u00e5 14 % av en hel k\u00e4rna, inte h\u00e4lften. Men allt kommer att vara annorlunda om du har ett flerk\u00e4rnigt system.<\/p>\n<p><img decoding=\"async\" alt=\"Hur man f\u00e5r \u00e5tkomst till resurser i Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/7bf71d97add9adcf7cf0260941526590.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nCPU-f\u00f6rfr\u00e5gan \u2014 flerk\u00e4rnigt (4) system<\/p>\n<p>P\u00e5 bilden ovan kan vi se att tre barn vill ha en hel paj och ett barn vill ha h\u00e4lften. Eftersom mamma har bakat fyra pajer, kommer varje barn att f\u00e5 s\u00e5 mycket som de vill ha. I ett flerk\u00e4rnigt system f\u00f6rdelas CPU-resurserna \u00f6ver alla tillg\u00e4ngliga k\u00e4rnor. Om en container begr\u00e4nsas till mindre \u00e4n en hel CPU-k\u00e4rna kan den \u00e4nd\u00e5 anv\u00e4nda den till 100 %. <\/p>\n<p>De ovanst\u00e5ende ber\u00e4kningarna \u00e4r f\u00f6renklade f\u00f6r att f\u00f6rst\u00e5 hur CPU f\u00f6rdelas mellan containrar. Naturligtvis finns det andra processer som ocks\u00e5 anv\u00e4nder CPU-resurser ut\u00f6ver sj\u00e4lva containrarna. N\u00e4r processer i en container \u00e4r inaktiva kan andra anv\u00e4nda dess resurser. <code>CPU: &quot;200m&quot;<\/code> motsvarar <code>CPU: 0,2<\/code>, vilket motsvarar ungef\u00e4r 20 % av en k\u00e4rna.<\/p>\n<p>Nu l\u00e5t oss prata om <code>limit.cpu<\/code>. CPU som begr\u00e4nsar Kubernetes multipliceras med 100. Resultatet \u00e4r hur mycket tid en container kan anv\u00e4nda var 100 \u00b5s (<code>cpu-period<\/code>). <\/p>\n<p><code>limit.cpu<\/code> motsvarar Docker-flaggorna <code>--cpus<\/code>. Det \u00e4r en ny kombination av gamla <code>--cpu-period<\/code> och <code>--cpu-quota<\/code>. Genom att s\u00e4tta detta anger vi hur mycket tillg\u00e4ngliga CPU-resurser en container maximalt kan anv\u00e4nda innan d\u00e4mpning b\u00f6rjar:<\/p>\n<ul>\n<li><strong>cpus<\/strong> \u2014 kombinationen <code>cpu-period<\/code> och <code>cpu-quota. cpus = 1.5<\/code> motsvarar inst\u00e4llningen <code>cpu-period = 100000<\/code> och <code>cpu-quota = 150000<\/code>;<\/li>\n<li><strong>cpu-period<\/strong> \u2014 period <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Completely_Fair_Scheduler\">CFS CPU-schemal\u00e4ggare<\/a><\/noindex>, som standard 100 mikrosekunder;<\/li>\n<li><strong>cpu-quota<\/strong> \u2014 antal mikrosekunder inne i <code>cpu-period<\/code>, som containern \u00e4r begr\u00e4nsad till.<\/li>\n<\/ul>\n<p>\n<strong>Vad h\u00e4nder om du s\u00e4tter en otillr\u00e4cklig CPU-f\u00f6rfr\u00e5gan?<\/strong><\/p>\n<p>Om containern beh\u00f6ver mer \u00e4n vad som \u00e4r inst\u00e4llt, kommer den att stj\u00e4la CPU fr\u00e5n andra processer.<\/p>\n<p><strong>Vad h\u00e4nder om du s\u00e4tter en otillr\u00e4cklig CPU-gr\u00e4ns?<\/strong><\/p>\n<p>Eftersom CPU-resursen \u00e4r reglerbar kommer d\u00e4mpning att aktiveras.<\/p>\n<p><strong>Vad h\u00e4nder om du inte anger en CPU-f\u00f6rfr\u00e5gan?<\/strong><\/p>\n<p>Precis som med minnet, motsvarar beg\u00e4ran gr\u00e4nsv\u00e4rdet.<\/p>\n<p><strong>Vad h\u00e4nder om man inte anger CPU-gr\u00e4ns?<\/strong><\/p>\n<p>Containern kommer att anv\u00e4nda s\u00e5 mycket CPU som den beh\u00f6ver. Om det finns en standardpolicy f\u00f6r CPU definierad i namnomr\u00e5det (LimitRange) anv\u00e4nds denna gr\u00e4ns \u00e4ven f\u00f6r containern.<\/p>\n<p><strong>Vad h\u00e4nder om varken beg\u00e4ran eller CPU-gr\u00e4ns anges?<\/strong><\/p>\n<p>Precis som med minnet \u00e4r detta det v\u00e4rsta scenariot. Schemal\u00e4ggaren vet inte hur mycket resurser din container beh\u00f6ver, vilket kan orsaka allvarliga problem p\u00e5 noden. F\u00f6r att undvika detta b\u00f6r man st\u00e4lla in standardgr\u00e4nser f\u00f6r namnomr\u00e5den (LimitRange).<\/p>\n<p>Kom ih\u00e5g: om du beg\u00e4r mer CPU \u00e4n noderna kan tillhandah\u00e5lla, kommer Podden inte att schemal\u00e4ggas. <code>Requests.cpu<\/code> \u2014 inte ett minimumv\u00e4rde, utan ett v\u00e4rde som \u00e4r tillr\u00e4ckligt f\u00f6r att starta Podden och fungera utan avbrott. Om applikationen inte utf\u00f6r komplicerade ber\u00e4kningar \u00e4r det b\u00e4sta alternativet att st\u00e4lla in <code>request.cpu &lt;= 1<\/code> och k\u00f6ra s\u00e5 m\u00e5nga replikat som beh\u00f6vs.<\/p>\n<h2>Det optimala antal beg\u00e4rda resurser eller resursgr\u00e4nser<\/h2>\n<p>\nVi har l\u00e4rt oss om begr\u00e4nsning av datorkapacitet. Nu \u00e4r det dags att svara p\u00e5 fr\u00e5gan: \"Hur mycket resurser kr\u00e4ver min Pod f\u00f6r att k\u00f6ra applikationen utan problem? Vad \u00e4r det optimala antalet?\". <\/p>\n<p>Tyv\u00e4rr finns det inga entydiga svar p\u00e5 dessa fr\u00e5gor. Om du inte vet hur din applikation fungerar, hur mycket CPU eller minne den beh\u00f6ver, \u00e4r det b\u00e4sta alternativet att ge applikationen mycket minne och CPU och sedan k\u00f6ra prestandatest.<\/p>\n<p>F\u00f6rutom prestandatester, under en vecka, observera applikationens beteende i \u00f6vervakningen. Om graferna visar att din applikation anv\u00e4nder mindre resurser \u00e4n du begt, kan du minska m\u00e4ngden beg\u00e4rd CPU eller minne.<\/p>\n<p>Som exempel, kika p\u00e5 denna <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/grafana\/dashboards\/7187\">Grafana-dashboard<\/a><\/noindex>. Den visar skillnaden mellan beg\u00e4rda resurser eller resursgr\u00e4nser och nuvarande resursanv\u00e4ndning.<\/p>\n<h2>Slutsats<\/h2>\n<p>\nBeg\u00e4rningar och resursbegr\u00e4nsningar hj\u00e4lper till att h\u00e5lla Kubernetes-klustret i drift. R\u00e4tt konfiguration av gr\u00e4nser minimerar kostnaderna och h\u00e5ller applikationerna st\u00e4ndigt i drift.<\/p>\n<p>Sammanfattningsvis \u00e4r det viktigt att t\u00e4nka p\u00e5 flera saker:<\/p>\n<ol>\n<li>De beg\u00e4rda resurserna \u00e4r en konfiguration som beaktas vid start (n\u00e4r Kubernetes planerar placeringen av applikationen). \u00c5 sin sida \u00e4r resursbegr\u00e4nsningen viktig under drift \u2014 n\u00e4r applikationen redan k\u00f6rs p\u00e5 en nod.<\/li>\n<li>J\u00e4mf\u00f6rt med minne \u00e4r CPU en reglerbar resurs. Vid brist p\u00e5 CPU kommer din Pod inte att avslutas, utan det kommer att aktiveras en throttling-mekanism.<\/li>\n<li>Beg\u00e4rda resurser och resursgr\u00e4nser \u00e4r inte minimala och maximala v\u00e4rden! Genom att definiera beg\u00e4rda resurser s\u00e4kerst\u00e4ller du att applikationen fungerar utan problem.<\/li>\n<li>En bra praxis \u00e4r att st\u00e4lla in minnesbeg\u00e4ran lika med minnesgr\u00e4nsen.<\/li>\n<li>Det \u00e4r bra att st\u00e4lla in beg\u00e4rd <code>CPU &lt;=1<\/code>, om applikationen inte utf\u00f6r komplexa ber\u00e4kningar.<\/li>\n<li>Om du beg\u00e4r mer resurser \u00e4n vad som finns p\u00e5 noden kommer Pod aldrig att schemal\u00e4ggas p\u00e5 denna nod.<\/li>\n<li>F\u00f6r att best\u00e4mma r\u00e4tt m\u00e4ngd beg\u00e4rda resurser\/gr\u00e4nser, anv\u00e4nd belastningstestning och \u00f6vervakning.<\/li>\n<\/ol>\n<p>\nJag hoppas att denna artikel hj\u00e4lper dig att f\u00f6rst\u00e5 huvudkonceptet f\u00f6r resursbegr\u00e4nsningar. Och att du kan till\u00e4mpa dessa kunskaper i ditt arbete.<\/p>\n<p>Lycka till!<\/p>\n<p><strong>Vad mer att l\u00e4sa:<\/strong><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/500504\/\">SRE-observabilitet: namnrymder och m\u00e4tstruktur<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/blog\/poleznye-instrumenty-dlya-kubernetes\">90+ anv\u00e4ndbara verktyg f\u00f6r Kubernetes: distribution, hantering, \u00f6vervakning, s\u00e4kerhet och mer<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/tele.click\/k8s_mail\">V\u00e5r kanal Om Kubernetes p\u00e5 Telegram<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/516014\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>The Reward by Tohad \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Kubernetes \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0437 Docker \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 Kubernetes. \u041d\u043e \u043f\u043e\u0437\u0434\u043d\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":94263,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-94262","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c Kubernetes Pod | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-14T17:42:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-14T17:42:34+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Hur man f\u00e5r tillg\u00e5ng till resurser i Kubernetes Pod | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c Kubernetes Pod | ProHoster","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-14T17:42:34+00:00","article:modified_time":"2020-09-14T17:42:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"94262","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:30:27","updated":"2022-10-02 18:20:09","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/94262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=94262"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/94262\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/94263"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=94262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=94262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=94262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}