{"id":82244,"date":"2020-05-20T13:42:45","date_gmt":"2020-05-20T11:42:45","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov"},"modified":"2020-05-20T13:42:45","modified_gmt":"2020-05-20T11:42:45","slug":"luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","title":{"rendered":"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/21d8807ed791f0b9ff81494cf1a373c9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO primeiro passo para implantar no Kubernetes \u00e9 colocar seu aplicativo em um cont\u00eainer. Nesta s\u00e9rie, vamos explorar como criar a imagem de um cont\u00eainer pequeno e seguro.<br \/>\nCom o Docker, a cria\u00e7\u00e3o de imagens de cont\u00eainer nunca foi t\u00e3o f\u00e1cil. Especifique uma imagem base, adicione suas modifica\u00e7\u00f5es e crie o cont\u00eainer.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/f144351cc82d46cf3f4a518c6e11faa3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApesar de essa abordagem ser excelente para come\u00e7ar, usar imagens base padr\u00e3o pode resultar em um funcionamento inseguro com imagens grandes e cheias de vulnerabilidades.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Al\u00e9m disso, a maioria das imagens no Docker utiliza Debian ou Ubuntu como imagem base, o que garante compatibilidade e f\u00e1cil adapta\u00e7\u00e3o (o arquivo Docker ocupa apenas duas linhas de c\u00f3digo), mas essas imagens base podem adicionar centenas de megabytes de carga extra ao seu cont\u00eainer. Por exemplo, um simples arquivo de aplicativo node.js Go chamado \"hello-world\" ocupa cerca de 700 megabytes, enquanto o tamanho do seu aplicativo em si \u00e9 de apenas alguns megabytes.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/8093421f0f0f61b9daedf8e9530bbd3e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAssim, toda essa carga extra representa um desperd\u00edcio de espa\u00e7o digital e uma excelente oportunidade para vulnerabilidades e falhas de seguran\u00e7a. Portanto, vamos explorar duas maneiras de reduzir o tamanho da imagem do cont\u00eainer. <\/p>\n<p>A primeira \u00e9 usar imagens base de tamanho pequeno, e a segunda \u00e9 usar o padr\u00e3o de projeto Builder Pattern. Utilizar imagens base menores \u00e9 provavelmente a maneira mais simples de reduzir o tamanho do seu cont\u00eainer. \u00c9 bem prov\u00e1vel que a linguagem ou stack que voc\u00ea est\u00e1 usando forne\u00e7a uma imagem original do aplicativo que \u00e9 muito menor que a imagem padr\u00e3o. Vamos dar uma olhada no nosso cont\u00eainer node.js. <\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/df3f744a565465b56adcec6a1c32e501.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor padr\u00e3o, o tamanho da imagem base node:8 no Docker \u00e9 de 670 MB, enquanto o tamanho do node:8-alpine \u00e9 de apenas 65 MB, ou seja, 10 vezes menor. Ao usar a menor imagem base Alpine, voc\u00ea reduz significativamente o tamanho do seu container. Alpine \u00e9 uma distribui\u00e7\u00e3o Linux pequena e leve, muito popular entre os usu\u00e1rios do Docker, pois \u00e9 compat\u00edvel com muitos aplicativos, mantendo um tamanho reduzido dos containers. Diferente da imagem padr\u00e3o do Docker 'node', 'node:alpine' remove muitos arquivos e programas desnecess\u00e1rios, apenas mantendo o que \u00e9 preciso para executar seu aplicativo.<\/p>\n<p>Para mudar para uma imagem base menor, basta atualizar o arquivo Docker para come\u00e7ar a usar a nova imagem base:<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/55a3b8e403bd34896018f92a81a3f251.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAgora, ao contr\u00e1rio da antiga imagem onbuild, voc\u00ea precisar\u00e1 copiar seu c\u00f3digo para o container e instalar quaisquer depend\u00eancias. No novo Dockerfile, o container come\u00e7a a partir da imagem node:alpine, em seguida, cria um diret\u00f3rio para o c\u00f3digo, instala as depend\u00eancias usando o gerenciador de pacotes NPM e, por fim, executa o server.js.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/b41c36994fc18dc34fb970a38bc50c9a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCom essa atualiza\u00e7\u00e3o, voc\u00ea obt\u00e9m um container 10 vezes menor. Se sua linguagem de programa\u00e7\u00e3o ou stack n\u00e3o possui a funcionalidade de reduzir a imagem base, use o Alpine Linux. Isso tamb\u00e9m permitir\u00e1 que voc\u00ea gerencie completamente o conte\u00fado do container. Usar imagens base pequenas \u00e9 uma excelente maneira de criar rapidamente containers menores. Mas \u00e9 poss\u00edvel alcan\u00e7ar uma redu\u00e7\u00e3o ainda maior utilizando o Padr\u00e3o Builder.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/c9549f5879058d9734c174e8571b9069.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEm linguagens interpretadas, o c\u00f3digo-fonte \u00e9 primeiro passado para o interpretador, que o executa diretamente. Nas linguagens compiladas, o c\u00f3digo-fonte \u00e9 previamente transformado em c\u00f3digo compilado. Durante esse processo, a compila\u00e7\u00e3o frequentemente utiliza ferramentas que na verdade n\u00e3o s\u00e3o necess\u00e1rias para a execu\u00e7\u00e3o do c\u00f3digo. Isso significa que voc\u00ea pode remover completamente essas ferramentas do container final. Para isso, pode-se usar o Padr\u00e3o Builder.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/9af4d11134c54cbdbd2b020cdf270429.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO c\u00f3digo \u00e9 criado no primeiro container e compilado. Em seguida, o c\u00f3digo compilado \u00e9 empacotado no container final sem os compiladores e ferramentas necess\u00e1rias para compilar esse c\u00f3digo. Vamos passar por esse processo com um aplicativo Go. Primeiramente, faremos a transi\u00e7\u00e3o da imagem onbuild para o Alpine Linux.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/822b67eb28f94c50e7a40af1fe1bfea2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNo novo arquivo Docker, o cont\u00eainer come\u00e7a com a imagem golang:alpine. Em seguida, ele cria um diret\u00f3rio para o c\u00f3digo, copia o c\u00f3digo-fonte, compila esse c\u00f3digo e executa o aplicativo. Este cont\u00eainer \u00e9 muito menor do que o cont\u00eainer onbuild, mas ainda cont\u00e9m o compilador e outras ferramentas Go que, na verdade, n\u00e3o precisamos. Portanto, vamos apenas extrair o programa compilado e coloc\u00e1-lo em nosso pr\u00f3prio cont\u00eainer.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/094ac74a24cd723f83ddc34bee64e884.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVoc\u00ea pode notar algo estranho neste arquivo Docker: ele cont\u00e9m duas linhas FROM. A primeira se\u00e7\u00e3o de 4 linhas se parece exatamente com o arquivo Docker anterior, exceto que usa a palavra-chave AS para dar um nome a essa etapa. Na pr\u00f3xima se\u00e7\u00e3o, h\u00e1 uma nova linha FROM que permite iniciar uma nova imagem, e em vez da imagem golang:alpine como base, vamos usar Raw alpine.<\/p>\n<p>O Raw Alpine Linux n\u00e3o possui certificados SSL instalados, o que resultar\u00e1 em falhas na maioria das chamadas de API pelo protocolo HTTPS, ent\u00e3o vamos instalar alguns certificados CA raiz.<\/p>\n<p>E agora vem a parte mais interessante: para copiar o c\u00f3digo compilado do primeiro cont\u00eainer para o segundo, voc\u00ea pode simplesmente usar o comando COPY localizado na 5\u00aa linha da segunda se\u00e7\u00e3o. Ele copiar\u00e1 apenas um arquivo de aplicativo e n\u00e3o tocar\u00e1 nas ferramentas Go. O novo arquivo Docker de m\u00faltiplas etapas conter\u00e1 uma imagem de cont\u00eainer que ocupa apenas 12 megabytes, enquanto a imagem de cont\u00eainer original tinha 700 megabytes, o que representa uma grande diferen\u00e7a!<br \/>\nAssim, usar imagens base pequenas e o Padr\u00e3o Builder s\u00e3o \u00f3timas maneiras de criar cont\u00eaineres muito menores sem muito trabalho.<br \/>\n\u00c9 poss\u00edvel que, dependendo da pilha do aplicativo, existam maneiras adicionais de reduzir o tamanho da imagem e do cont\u00eainer, mas ser\u00e1 que cont\u00eaineres pequenos realmente t\u00eam uma vantagem mensur\u00e1vel? Vamos considerar dois aspectos onde cont\u00eaineres pequenos s\u00e3o extremamente eficazes \u2013 desempenho e seguran\u00e7a.<\/p>\n<p>Para avaliar o aumento de desempenho, vamos considerar a dura\u00e7\u00e3o do processo de cria\u00e7\u00e3o de um cont\u00eainer, inserindo-o no registro (push) e a subsequente extra\u00e7\u00e3o dele (pull). Voc\u00ea pode ver que um cont\u00eainer menor tem uma vantagem ineg\u00e1vel em rela\u00e7\u00e3o a um cont\u00eainer maior.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/f48096cf875dbb34cb473f6296a2b601.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO Docker ir\u00e1 armazenar camadas em cache, por isso as compila\u00e7\u00f5es subsequentes ser\u00e3o realizadas muito rapidamente. No entanto, em muitos sistemas de CI utilizados para compilar e testar cont\u00eaineres, as camadas n\u00e3o s\u00e3o armazenadas em cache, portanto h\u00e1 uma economia de tempo significativa. Como pode ser visto, o tempo de constru\u00e7\u00e3o de um cont\u00eainer grande, dependendo da capacidade da sua m\u00e1quina, varia de 34 a 54 segundos, enquanto o uso de um cont\u00eainer reduzido com o Builder Pattern leva de 23 a 28 segundos. Para opera\u00e7\u00f5es desse tipo, o ganho de desempenho ser\u00e1 de 40-50%. Portanto, apenas pense em quantas vezes voc\u00ea cria e testa seu c\u00f3digo.<\/p>\n<p>Depois que o cont\u00eainer \u00e9 constru\u00eddo, voc\u00ea precisa inserir sua imagem (push container image) no registro de cont\u00eaineres para depois utiliz\u00e1-la em seu cluster Kubernetes. Recomendo o uso do Google Container Registry.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/4c5426248c1e1ec6b0a36579db56c725.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAo usar o Google Container Registry (GCR), voc\u00ea paga apenas pelo armazenamento 'cru' e pela rede, sem taxas adicionais para gerenciamento de cont\u00eaineres. \u00c9 confidencial, seguro e muito r\u00e1pido. O GCR utiliza v\u00e1rias t\u00e9cnicas para acelerar a opera\u00e7\u00e3o pull. Como voc\u00ea v\u00ea, inserir a imagem do cont\u00eainer Docker Container Image ao usar go:onbuild, dependendo do desempenho do computador, levar\u00e1 de 15 a 48 segundos, enquanto a mesma opera\u00e7\u00e3o com um cont\u00eainer menor levar\u00e1 de 14 a 16 segundos, e para m\u00e1quinas menos potentes, a vantagem de velocidade da opera\u00e7\u00e3o aumenta em 3 vezes. Para m\u00e1quinas grandes, o tempo \u00e9 aproximadamente o mesmo, pois o GCR utiliza um cache global para uma base comum de imagens, ou seja, voc\u00ea n\u00e3o precisa carreg\u00e1-las. Em computadores de baixo desempenho, a CPU \u00e9 um gargalo, portanto a vantagem de usar cont\u00eaineres menores \u00e9 muito mais percept\u00edvel.<\/p>\n<p>Se voc\u00ea usar o GCR, recomendo fortemente aplicar o Google Container Builder (GCB) como parte do seu sistema de constru\u00e7\u00e3o.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/cf97f8636dff16d5663225547bfb0701.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo voc\u00ea pode ver, seu uso permite alcan\u00e7ar resultados muito melhores na redu\u00e7\u00e3o do tempo da opera\u00e7\u00e3o Build+Push do que mesmo em uma m\u00e1quina eficiente \u2013 nesse caso, o processo de constru\u00e7\u00e3o e envio de cont\u00eaineres para o host \u00e9 acelerado quase duas vezes. Al\u00e9m disso, a cada dia voc\u00ea recebe 120 minutos de constru\u00e7\u00e3o gratuitamente, o que na maioria dos casos atende \u00e0s necessidades de cria\u00e7\u00e3o de cont\u00eaineres. <\/p>\n<p>Em seguida, vem a m\u00e9trica de desempenho mais importante \u2013 a velocidade de extra\u00e7\u00e3o ou download de cont\u00eaineres Pull. E se voc\u00ea n\u00e3o se importa muito com o tempo gasto na opera\u00e7\u00e3o push, a dura\u00e7\u00e3o do processo pull afeta seriamente o desempenho geral do sistema. Suponha que voc\u00ea tenha um cluster de tr\u00eas n\u00f3s e um deles falhe. Se voc\u00ea utilizar um sistema de gerenciamento, como o Google Kubernetes Engine, ele substituir\u00e1 automaticamente o n\u00f3 inoperante por um novo. No entanto, esse novo n\u00f3 estar\u00e1 completamente vazio, e voc\u00ea precisar\u00e1 transferir todos os seus cont\u00eaineres para que ele comece a funcionar. Se a opera\u00e7\u00e3o pull demorar demais, todo esse tempo seu cluster funcionar\u00e1 com menor desempenho.<\/p>\n<p>Existem muitos casos em que isso pode acontecer: a adi\u00e7\u00e3o de um novo n\u00f3 ao cluster, a atualiza\u00e7\u00e3o de n\u00f3s ou at\u00e9 mesmo a troca para um novo cont\u00eainer para implanta\u00e7\u00e3o. Assim, minimizar o tempo de extra\u00e7\u00e3o pull se torna um fator crucial. \u00c9 indiscut\u00edvel que um cont\u00eainer pequeno \u00e9 baixado muito mais rapidamente do que um grande. Se voc\u00ea estiver usando v\u00e1rios cont\u00eaineres em um cluster Kubernetes, a economia de tempo pode ser bastante significativa.<\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/fb0dacb37e9732fe2954323ee171a723.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVeja a compara\u00e7\u00e3o apresentada: a opera\u00e7\u00e3o pull ao trabalhar com pequenos cont\u00eaineres leva de 4 a 9 vezes menos tempo, dependendo da pot\u00eancia da m\u00e1quina, do que a mesma opera\u00e7\u00e3o utilizando go:onbuild. Usar imagens base de cont\u00eaineres menores acelera significativamente o tempo e a velocidade com que novos n\u00f3s do Kubernetes podem ser implantados e conectados \u00e0 internet.<\/p>\n<p>Vamos considerar a quest\u00e3o da seguran\u00e7a. Acredita-se que cont\u00eaineres menores s\u00e3o muito mais seguros do que os grandes, pois t\u00eam uma menor superf\u00edcie de ataque. Isso \u00e9 realmente verdade? Uma das funcionalidades mais \u00fateis do Google Container Registry \u00e9 a capacidade de escanear automaticamente seus cont\u00eaineres em busca de vulnerabilidades. Alguns meses atr\u00e1s, criei cont\u00eaineres tanto onbuild quanto multistage, ent\u00e3o vamos ver se h\u00e1 alguma vulnerabilidade l\u00e1. <\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/0ed3cd7bb8c8f5164e1115e9f1be39d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO resultado \u00e9 impressionante: um pequeno cont\u00eainer apresentou apenas 3 vulnerabilidades m\u00e9dias, enquanto no grande foram encontradas 16 cr\u00edticas e 376 outras vulnerabilidades. Ao examinar o conte\u00fado do grande cont\u00eainer, fica claro que a maioria dos problemas de seguran\u00e7a n\u00e3o est\u00e1 relacionada ao nosso aplicativo, mas sim a programas que nem sequer utilizamos. Portanto, quando as pessoas falam sobre uma grande superf\u00edcie de ataque, \u00e9 exatamente isso que elas querem dizer. <\/p>\n<p><img decoding=\"async\" alt=\"Melhores pr\u00e1ticas Kubernetes. Criando pequenos cont\u00eaineres\" src=\"\/wp-content\/uploads\/2020\/05\/4a782f4a50153adc44042e9234357c02.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA conclus\u00e3o \u00e9 clara: crie cont\u00eaineres pequenos, pois eles oferecem vantagens reais em termos de desempenho e seguran\u00e7a do seu sistema. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/502320\/\">As melhores pr\u00e1ticas do Kubernetes. Organiza\u00e7\u00e3o do Kubernetes com namespaces<\/a><\/noindex><\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"wGz_cbtCiEA\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/wGz_cbtCiEA\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Um pouco de publicidade \ud83d\ude42<\/h3>\n<p>\nObrigado por permanecer conosco. Voc\u00ea gosta dos nossos artigos? Quer ver mais materiais interessantes? Apoie-nos fazendo um pedido ou recomendando para conhecidos. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS em nuvem para desenvolvedores a partir de $4.99<\/a><\/noindex>, <b>uma alternativa \u00fanica aos servidores entry-level, que criamos para voc\u00ea:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toda a verdade sobre VPS (KVM) E5-2697 v3 (6 N\u00facleos) 10GB DDR4 480GB SSD 1Gbps a partir de $19 ou como dividir um servidor corretamente?<\/a><\/noindex> (dispon\u00edveis op\u00e7\u00f5es com RAID1 e RAID10, at\u00e9 24 n\u00facleos e at\u00e9 40GB DDR4).<\/p>\n<p><b>Dell R730xd por 2 vezes mais barato no datacenter Equinix Tier IV em Amsterd\u00e3?<\/b> Somente conosco <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB a partir de $199<\/a><\/noindex> na Holanda! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 a partir de $99!<\/b><\/b> Leia sobre <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Como construir uma infraestrutura de classe corporativa utilizando servidores Dell R730xd E5-2650 v4 com custo de 9000 euros por centavos?<\/a><\/noindex><br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/502052\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 Kubernetes \u2013 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Docker, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c. \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u0432\u043e\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":82245,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-82244","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\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov\" \/>\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\u041b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 Kubernetes. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov\" \/>\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-05-20T11:42:45+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-20T11:42:45+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\udd47Melhores pr\u00e1ticas Kubernetes. Criando cont\u00eaineres pequenos | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","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\u041b\u0443\u0447\u0448\u0438\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 Kubernetes. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 | ProHoster","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/luchshie-praktiki-kubernetes-sozdanie-nebolshih-kontejnerov","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-05-20T11:42:45+00:00","article:modified_time":"2020-05-20T11:42:45+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"82244","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 15:41:28","updated":"2022-09-28 11:52:01","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\/82244","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=82244"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/82244\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/82245"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=82244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=82244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=82244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}