{"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\/pt\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod","title":{"rendered":"Como acessar os recursos do Kubernetes Pod","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Como acessar os recursos do 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>A Recompensa de Tohad<\/i><\/a><\/noindex><\/p>\n<p>No in\u00edcio do trabalho com Kubernetes, geralmente se esquece de configurar os recursos dos cont\u00eaineres. Nessa etapa, \u00e9 suficiente garantir que a imagem Docker funcione e possa ser implantada no cluster Kubernetes.<\/p>\n<p>Mas mais tarde, \u00e9 necess\u00e1rio implantar o aplicativo em um cluster de produ\u00e7\u00e3o junto com outros aplicativos. Para isso, \u00e9 preciso alocar recursos para o cont\u00eainer e garantir que haja o suficiente para iniciar e operar o aplicativo, sem causar problemas em outros aplicativos em execu\u00e7\u00e3o.<\/p>\n<p>Time <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Kubernetes aaS da Mail.ru<\/a><\/noindex> traduziu um artigo sobre recursos de cont\u00eaineres (CPU &amp; MEM), solicita\u00e7\u00f5es e limites de recursos. Voc\u00ea descobrir\u00e1 quais s\u00e3o as vantagens dessas configura\u00e7\u00f5es e o que acontecer\u00e1 se n\u00e3o forem definidas.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Recursos Computacionais<\/h2>\n<p>\nTemos dois tipos de recursos com as seguintes unidades:<\/p>\n<ul>\n<li>Processador Central (CPU) \u2014 n\u00facleos;<\/li>\n<li>Mem\u00f3ria (MEM) \u2014 bytes.<\/li>\n<\/ul>\n<p>\nOs recursos s\u00e3o especificados para cada cont\u00eainer. No seguinte arquivo YAML do Pod, voc\u00ea ver\u00e1 a se\u00e7\u00e3o de recursos que cont\u00e9m os recursos solicitados e limites:<\/p>\n<ul>\n<li>Recursos solicitados do Pod = soma dos recursos solicitados de todos os cont\u00eaineres;<\/li>\n<li>Limites de recursos do Pod = soma dos limites de recursos de todos os cont\u00eaineres.<\/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    - name: main-container\n      image: my-backend\n      tag: v1\n      ports:\n      - containerPort: 8080\n      resources:\n        requests:\n          cpu: 0.2 # CPU REQUERIDO: 200m n\u00facleos\n          memory: \"1Gi\" # MEM\u00d3RIA REQUERIDA: 1Gi\n        limits:\n          cpu: 1 # USO M\u00c1XIMO DE CPU: 1 n\u00facleo\n          memory: \"1Gi\" # USO M\u00c1XIMO DE MEM\u00d3RIA:  1Gi\n    - name: other-container\n      image: other-app\n      tag: v1\n      ports:\n      - containerPort: 8000\n      resources:\n        requests:\n          cpu: \"200m\" # CPU REQUERIDO: 200m n\u00facleos\n          memory: \"0.5Gi\" # MEM\u00d3RIA REQUERIDA: 0.5Gi\n        limits:\n          cpu: 1 # USO M\u00c1XIMO DE CPU: 1 n\u00facleo\n          memory: \"1Gi\" # USO M\u00c1XIMO DE MEM\u00d3RIA:  1Gi<\/code><\/pre>\n<p>Exemplo de recursos solicitados e limites<\/p>\n<p>Campo <code>resources.requested<\/code> da especifica\u00e7\u00e3o do Pod \u2014 um dos elementos utilizados para encontrar o n\u00f3 adequado. J\u00e1 \u00e9 poss\u00edvel agendar a implanta\u00e7\u00e3o do Pod nele. Como se busca um n\u00f3 apropriado?<\/p>\n<p>Kubernetes \u00e9 composto por v\u00e1rios componentes, incluindo um n\u00f3 principal ou n\u00f3 mestre (Kubernetes Control Plane). No n\u00f3 mestre, h\u00e1 v\u00e1rios processos: kube-apiserver, kube-controller-manager e kube-scheduler. <\/p>\n<p>O processo kube-scheduler \u00e9 respons\u00e1vel por visualizar os m\u00f3dulos rec\u00e9m-criados e procurar n\u00f3s de trabalho poss\u00edveis que atendam a todas as solicita\u00e7\u00f5es dos m\u00f3dulos, incluindo a quantidade de recursos solicitados. A lista de n\u00f3s encontrada pelo kube-scheduler \u00e9 classificada. O Pod \u00e9 agendado no n\u00f3 com as melhores pontua\u00e7\u00f5es.<\/p>\n<p><img decoding=\"async\" alt=\"Como acessar os recursos do Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/b489991a3cbbd5359c99701886d488e5.jpg\" style=\"display:block;margin: 0 auto;\" \/>Onde ser\u00e1 colocado o Pod roxo?<\/p>\n<p>Na imagem, podemos ver que o kube-scheduler deve agendar um novo Pod roxo. O cluster Kubernetes cont\u00e9m dois n\u00f3s: A e B. Como se pode notar, o kube-scheduler n\u00e3o consegue agendar o Pod no n\u00f3 A \u2014 os recursos dispon\u00edveis (n\u00e3o solicitados) n\u00e3o atendem \u00e0s solicita\u00e7\u00f5es do Pod roxo. Assim, a mem\u00f3ria solicitada pelo Pod roxo de 1 GB n\u00e3o cabe no n\u00f3 A, uma vez que a quantidade de mem\u00f3ria dispon\u00edvel \u00e9 de 0,5 GB. Mas o n\u00f3 B tem recursos suficientes. No final, o kube-scheduler decide que o destino do Pod roxo \u00e9 o n\u00f3 B.<\/p>\n<p>Agora sabemos como os recursos solicitados afetam a escolha do n\u00f3 para executar um Pod. Mas como os recursos limites influenciam?<\/p>\n<p>Os recursos limites s\u00e3o a fronteira que o CPU\/MEM n\u00e3o pode ultrapassar. No entanto, o recurso CPU \u00e9 flex\u00edvel, portanto, cont\u00eaineres que atingem os limites de CPU n\u00e3o far\u00e3o com que o Pod seja encerrado. Em vez disso, ocorrer\u00e1 throttling de CPU. Se o limite de uso de MEM for atingido, o cont\u00eainer ser\u00e1 interrompido devido ao OOM-Killer e reiniciado, se permitido pela configura\u00e7\u00e3o RestartPolicy.<\/p>\n<h2>Recursos solicitados e limites em detalhes<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Como acessar os recursos do Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/22e672100940e8895ae42a56a681111f.jpg\" style=\"display:block;margin: 0 auto;\" \/>Rela\u00e7\u00e3o entre recursos do Docker e Kubernetes<\/p>\n<p>A melhor maneira de explicar como funcionam os recursos solicitados e limites \u00e9 apresentar a rela\u00e7\u00e3o entre Kubernetes e Docker. Na figura acima, voc\u00ea pode ver como os campos do Kubernetes e as flags de inicializa\u00e7\u00e3o do Docker est\u00e3o relacionados.<\/p>\n<h2>Mem\u00f3ria: solicita\u00e7\u00e3o e limite<\/h2>\n<p><\/p>\n<pre><code class=\"plaintext\">containers:\n...\n resources:\n   requests:\n     memory: \"0.5Gi\"\n   limits:\n     memory: \"1Gi\"\n<\/code><\/pre>\n<p>\nComo mencionado acima, a mem\u00f3ria \u00e9 medida em bytes. Com base em <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/manage-resources-containers\/#meaning-of-memory\">documenta\u00e7\u00e3o do Kubernetes<\/a><\/noindex>, podemos especificar a mem\u00f3ria como um n\u00famero. Geralmente, \u00e9 um n\u00famero inteiro, por exemplo, 2678 \u2014 ou seja, 2678 bytes. Tamb\u00e9m \u00e9 poss\u00edvel usar sufixos <code>G<\/code> e <code>Gi<\/code>, o importante \u00e9 lembrar que eles n\u00e3o s\u00e3o equivalentes. O primeiro \u00e9 decimal, enquanto o segundo \u00e9 bin\u00e1rio. Como exemplo, mencionado na documenta\u00e7\u00e3o do k8s: <code>128974848<\/code>, <code>129e6<\/code>, <code>129M<\/code>, <code>123Mi<\/code> \u2014 eles s\u00e3o praticamente equivalentes.<\/p>\n<p>O par\u00e2metro Kubernetes <code>limits.memory<\/code> corresponde \u00e0 flag <code>--memory<\/code> do Docker. No caso de <code>request.memory<\/code> a seta para o Docker est\u00e1 ausente, pois o Docker n\u00e3o usa esse campo. Voc\u00ea pode perguntar se isso \u00e9 realmente necess\u00e1rio? Sim, \u00e9. Como j\u00e1 mencionei, o campo \u00e9 significativo para o Kubernetes. Com base nas informa\u00e7\u00f5es desse campo, o kube-scheduler decide em qual n\u00f3 agendar o Pod.<\/p>\n<p><strong>O que acontece se a solicita\u00e7\u00e3o de mem\u00f3ria for insuficiente?<\/strong><\/p>\n<p>Se o cont\u00eainer atingir os limites de mem\u00f3ria solicitada, o Pod ser\u00e1 colocado em um grupo de Pods que s\u00e3o interrompidos quando h\u00e1 falta de mem\u00f3ria no n\u00f3.<\/p>\n<p><strong>O que acontece se voc\u00ea definir um limite de mem\u00f3ria muito baixo?<\/strong><\/p>\n<p>Se o cont\u00eainer exceder o limite de mem\u00f3ria, ele ser\u00e1 finalizado devido ao OOM-Killed. E ser\u00e1 reiniciado, se poss\u00edvel, com base no RestartPolicy, onde o valor padr\u00e3o \u00e9 <code>Sempre<\/code>.<\/p>\n<p><strong>O que acontece se n\u00e3o especificar a mem\u00f3ria solicitada?<\/strong><\/p>\n<p>O Kubernetes pegar\u00e1 o limite e o definir\u00e1 como valor padr\u00e3o.<\/p>\n<p><strong>O que pode acontecer se n\u00e3o especificar a mem\u00f3ria m\u00e1xima?<\/strong><\/p>\n<p>O cont\u00eainer n\u00e3o tem restri\u00e7\u00f5es, podendo usar quanto quiser de mem\u00f3ria. Se come\u00e7ar a usar toda a mem\u00f3ria dispon\u00edvel no n\u00f3, ser\u00e1 terminado pelo OOM. Em seguida, o cont\u00eainer ser\u00e1 reiniciado, se poss\u00edvel, com base no RestartPolicy.<\/p>\n<p><strong>O que acontece se n\u00e3o definir limites de mem\u00f3ria?<\/strong><\/p>\n<p>Esse \u00e9 o pior cen\u00e1rio: o agendador n\u00e3o sabe quantos recursos o cont\u00eainer precisa, o que pode causar s\u00e9rios problemas no n\u00f3. Nesse caso, \u00e9 bom ter limites padr\u00e3o no namespace (definidos pelo LimitRange). Sem limites padr\u00e3o, o Pod n\u00e3o tem restri\u00e7\u00f5es, podendo usar quanto quiser de mem\u00f3ria.<\/p>\n<p>Se a mem\u00f3ria solicitada for maior do que o n\u00f3 pode oferecer, o Pod n\u00e3o ser\u00e1 agendado. \u00c9 importante lembrar que <code>Requests.memory<\/code> n\u00e3o \u00e9 um valor m\u00ednimo. \u00c9 uma descri\u00e7\u00e3o da quantidade de mem\u00f3ria suficiente para o funcionamento cont\u00ednuo do cont\u00eainer. <\/p>\n<p>Normalmente, recomenda-se definir o mesmo valor para <code>request.memory<\/code> e <code>limit.memory<\/code>. Com isso, o Kubernetes n\u00e3o agendar\u00e1 o Pod em um n\u00f3 que tenha mem\u00f3ria suficiente para iniciar o Pod, mas n\u00e3o o suficiente para oper\u00e1-lo. Lembre-se: ao agendar o Pod, o Kubernetes considera apenas <code>requests.memory<\/code>, e <code>limits.memory<\/code> e n\u00e3o considera.<\/p>\n<h2>CPU: solicita\u00e7\u00e3o e limite<\/h2>\n<p><\/p>\n<pre><code class=\"plaintext\">containers:\n...\n resources:\n   requests:\n     cpu: 1\n   limits:\n     cpu: \"1200m\"\n<\/code><\/pre>\n<p>\nPara a CPU, \u00e9 um pouco mais complicado. Voltando \u00e0 imagem da rela\u00e7\u00e3o entre Kubernetes e Docker, pode-se notar que <code>request.cpu<\/code> -n\u00f3, e o outro \u2014 <code>--cpu-shares<\/code>, enquanto <code>limit.cpu<\/code> corresponde \u00e0 flag <code>cpus<\/code> no Docker.<\/p>\n<p>A CPU solicitada pelo Kubernetes \u00e9 multiplicada por 1024 \u2014 a propor\u00e7\u00e3o de ciclos de CPU. Se voc\u00ea quiser solicitar 1 n\u00facleo completo, deve adicionar <code>cpu: 1<\/code>, conforme mostrado acima. <\/p>\n<p>Solicitar um n\u00facleo completo (propor\u00e7\u00e3o = 1024) n\u00e3o significa que seu cont\u00eainer o receber\u00e1. Se seu host tiver apenas um n\u00facleo e voc\u00ea usar mais de um cont\u00eainer, todos os cont\u00eaineres devem compartilhar a CPU dispon\u00edvel entre si. Como isso acontece? Vamos dar uma olhada na imagem.<\/p>\n<p><img decoding=\"async\" alt=\"Como acessar os recursos do Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/7f4b20642708ef3a7e773d7900161267.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRequisi\u00e7\u00e3o de CPU \u2014 sistema com um n\u00facleo<\/p>\n<p>Vamos imaginar que voc\u00ea tem um sistema de hospedagem com um \u00fanico n\u00facleo, onde est\u00e3o rodando cont\u00eaineres. A m\u00e3e (Kubernetes) assou uma torta (CPU) e quer dividi-la entre os filhos (cont\u00eaineres). Tr\u00eas filhos querem uma torta inteira (propor\u00e7\u00e3o = 1024), e outro filho quer metade da torta (512). A m\u00e3e quer ser justa e faz um c\u00e1lculo simples.<\/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>\nDe acordo com o c\u00e1lculo, tr\u00eas filhos receber\u00e3o 28% de um n\u00facleo, e n\u00e3o um n\u00facleo inteiro. O quarto filho receber\u00e1 14% de um n\u00facleo completo, e n\u00e3o metade. Mas tudo ser\u00e1 diferente se voc\u00ea tiver um sistema com m\u00faltiplos n\u00facleos.<\/p>\n<p><img decoding=\"async\" alt=\"Como acessar os recursos do Kubernetes Pod\" src=\"\/wp-content\/uploads\/2020\/09\/7bf71d97add9adcf7cf0260941526590.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRequisi\u00e7\u00e3o de CPU \u2014 sistema multicore (4)<\/p>\n<p>Na imagem acima, \u00e9 vis\u00edvel que tr\u00eas filhos querem uma torta inteira, e um quer metade. Como a m\u00e3e assou quatro tortas, cada um de seus filhos receber\u00e1 exatamente o que deseja. Em um sistema multicore, os recursos do processador s\u00e3o distribu\u00eddos entre todos os n\u00facleos de processador dispon\u00edveis. Se o cont\u00eainer \u00e9 limitado a menos do que um n\u00facleo completo de CPU, ele ainda pode utiliz\u00e1-lo a 100%. <\/p>\n<p>Os c\u00e1lculos acima s\u00e3o simplificados para entender como a CPU \u00e9 distribu\u00edda entre os cont\u00eaineres. Claro, al\u00e9m dos pr\u00f3prios cont\u00eaineres, h\u00e1 outros processos que tamb\u00e9m utilizam os recursos da CPU. Quando os processos em um cont\u00eainer est\u00e3o inativos, outros podem usar seus recursos. <code>CPU: \"200m\"<\/code> -n\u00f3, e o outro \u2014 <code>CPU: 0,2<\/code>, o que significa aproximadamente 20% de um n\u00facleo.<\/p>\n<p>Agora vamos falar sobre <code>limit.cpu<\/code>. A CPU que o Kubernetes limita \u00e9 multiplicada por 100. O resultado \u00e9 a quantidade de tempo que o cont\u00eainer pode usar a cada 100 microssegundos (<code>cpu-period<\/code>). <\/p>\n<p><code>limit.cpu<\/code> corresponde \u00e0 flag do Docker <code>--cpus<\/code>. Esta \u00e9 uma nova combina\u00e7\u00e3o de antigas <code>--cpu-period<\/code> e <code>--cpu-quota<\/code>. Ao configurar isso, indicamos quanto dos recursos da CPU o cont\u00eainer pode usar no m\u00e1ximo at\u00e9 que ocorra a limita\u00e7\u00e3o:<\/p>\n<ul>\n<li><strong>cpus<\/strong> \u2014 combina\u00e7\u00e3o <code>cpu-period<\/code> e <code>cpu-quota. cpus = 1.5<\/code> equivale a configurar <code>cpu-period = 100000<\/code> e <code>cpu-quota = 150000<\/code>;<\/li>\n<li><strong>cpu-period<\/strong> \u2014 per\u00edodo <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Completely_Fair_Scheduler\">do planejador de CPU CFS<\/a><\/noindex>, por padr\u00e3o 100 microssegundos;<\/li>\n<li><strong>cpu-quota<\/strong> \u2014 quantidade de microssegundos dentro <code>cpu-period<\/code>, onde o cont\u00eainer \u00e9 limitado.<\/li>\n<\/ul>\n<p>\n<strong>O que acontece se a quantidade de CPU requisitada for insuficiente?<\/strong><\/p>\n<p>Se o cont\u00eainer precisar de mais do que foi configurado, ele roubar\u00e1 CPU de outros processos.<\/p>\n<p><strong>O que ocorrer\u00e1 se o limite de CPU for insuficiente?<\/strong><\/p>\n<p>Como o recurso de CPU \u00e9 regul\u00e1vel, a limita\u00e7\u00e3o ser\u00e1 ativada.<\/p>\n<p><strong>O que acontece se n\u00e3o for especificada uma requisi\u00e7\u00e3o de CPU?<\/strong><\/p>\n<p>Assim como no caso da mem\u00f3ria, o valor da solicita\u00e7\u00e3o \u00e9 igual ao limite.<\/p>\n<p><strong>O que acontece se n\u00e3o for definido um limite de CPU?<\/strong><\/p>\n<p>O cont\u00eainer usar\u00e1 toda a CPU de que necessita. Se uma pol\u00edtica de CPU padr\u00e3o (LimitRange) estiver definida no namespace, esse limite ser\u00e1 usado tamb\u00e9m para o cont\u00eainer.<\/p>\n<p><strong>O que acontecer\u00e1 se n\u00e3o forem especificados nem a solicita\u00e7\u00e3o nem o limite de CPU?<\/strong><\/p>\n<p>Assim como no caso da mem\u00f3ria, este \u00e9 o pior cen\u00e1rio. O escalonador n\u00e3o sabe quantos recursos o seu cont\u00eainer precisa, e isso pode causar s\u00e9rios problemas no n\u00f3. Para evitar isso, \u00e9 necess\u00e1rio definir limites padr\u00e3o para os namespaces (LimitRange).<\/p>\n<p>Lembre-se: se voc\u00ea solicitar mais CPU do que os n\u00f3s podem fornecer, o Pod n\u00e3o ser\u00e1 agendado. <code>Requests.cpu<\/code> \u2014 n\u00e3o \u00e9 o valor m\u00ednimo, mas o valor suficiente para iniciar o Pod e funcionar sem falhas. Se o aplicativo n\u00e3o realiza c\u00e1lculos complexos, a melhor op\u00e7\u00e3o \u00e9 definir <code>request.cpu &lt;= 1<\/code> e executar o n\u00famero necess\u00e1rio de r\u00e9plicas.<\/p>\n<h2>A quantidade ideal de recursos solicitados ou limite de recursos<\/h2>\n<p>\nAprendemos sobre limites de recursos computacionais. Agora \u00e9 hora de responder \u00e0 pergunta: \"Quais recursos meu Pod precisa para executar o aplicativo sem problemas? Qual \u00e9 a quantidade ideal?\". <\/p>\n<p>Infelizmente, n\u00e3o h\u00e1 respostas claras para essas perguntas. Se voc\u00ea n\u00e3o sabe como seu aplicativo funciona, quanta CPU ou mem\u00f3ria precisa, a melhor op\u00e7\u00e3o \u00e9 fornecer ao aplicativo bastante mem\u00f3ria e CPU e, em seguida, rodar testes de desempenho.<\/p>\n<p>Al\u00e9m dos testes de desempenho, observe o comportamento do aplicativo durante uma semana atrav\u00e9s da monitora\u00e7\u00e3o. Se os gr\u00e1ficos indicarem que seu aplicativo consome menos recursos do que voc\u00ea solicitou, voc\u00ea pode reduzir a quantidade de CPU ou mem\u00f3ria solicitada.<\/p>\n<p>Como exemplo, veja este <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/grafana\/dashboards\/7187\">painel Grafana<\/a><\/noindex>. Ele mostra a diferen\u00e7a entre os recursos solicitados ou o limite de recursos e o uso atual de recursos.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>\nSolicita\u00e7\u00f5es e limites de recursos ajudam a manter a opera\u00e7\u00e3o do cluster Kubernetes. Uma configura\u00e7\u00e3o correta dos limites minimiza custos e mant\u00e9m os aplicativos em funcionamento constante.<\/p>\n<p>Em resumo, \u00e9 importante lembrar de alguns pontos:<\/p>\n<ol>\n<li>Recursos solicitados s\u00e3o a configura\u00e7\u00e3o considerada durante a inicializa\u00e7\u00e3o (quando o Kubernetes planeja a distribui\u00e7\u00e3o do aplicativo). Por outro lado, o limite de recursos \u00e9 importante durante a execu\u00e7\u00e3o \u2014 quando o aplicativo j\u00e1 est\u00e1 em execu\u00e7\u00e3o em um n\u00f3.<\/li>\n<li>Comparado \u00e0 mem\u00f3ria, a CPU \u00e9 um recurso regul\u00e1vel. Em caso de falta de CPU, seu Pod n\u00e3o ser\u00e1 finalizado, mas sim ativar\u00e1 o mecanismo de estrangulamento.<\/li>\n<li>Recursos solicitados e limites de recursos n\u00e3o s\u00e3o valores m\u00ednimos e m\u00e1ximos! Ao definir os recursos solicitados, voc\u00ea garante que o aplicativo funcionar\u00e1 sem problemas.<\/li>\n<li>Uma boa pr\u00e1tica \u00e9 definir a solicita\u00e7\u00e3o de mem\u00f3ria igual ao limite de mem\u00f3ria.<\/li>\n<li>\u00c9 bom definir a solicita\u00e7\u00e3o de <code>CPU &lt;=1<\/code>, se o aplicativo n\u00e3o estiver realizando c\u00e1lculos complexos.<\/li>\n<li>Se voc\u00ea solicitar mais recursos do que existem no n\u00f3, o Pod nunca ser\u00e1 agendado nesse n\u00f3.<\/li>\n<li>Para determinar a quantidade correta de recursos solicitados\/l\u00edmite de recursos, use testes de carga e monitoramento.<\/li>\n<\/ol>\n<p>\nEspero que este artigo ajude voc\u00ea a entender o conceito b\u00e1sico de limita\u00e7\u00e3o de recursos. E que voc\u00ea possa aplicar esse conhecimento em seu trabalho.<\/p>\n<p>Sucesso!<\/p>\n<p><strong>O que mais ler:<\/strong><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/500504\/\">Observabilidade SRE: namespaces e estrutura de m\u00e9tricas<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/blog\/poleznye-instrumenty-dlya-kubernetes\">90+ ferramentas \u00fateis para Kubernetes: implanta\u00e7\u00e3o, gerenciamento, monitoramento, seguran\u00e7a e muito mais<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/tele.click\/k8s_mail\">Nosso canal Ao Redor do Kubernetes no Telegram<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Como acessar os recursos do Kubernetes Pod | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-poluchit-dostup-k-resursam-kubernetes-pod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/94262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=94262"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/94262\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/94263"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=94262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=94262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=94262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}