As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Melhores práticas Kubernetes. Criando pequenos contêineres

À medida que você começa a criar mais serviços do Kubernetes, tarefas simples no início começam a se complicar. Por exemplo, equipes de desenvolvedores não podem criar serviços ou implantações com o mesmo nome. Se você tem milhares de pods, listar todos eles levará muito tempo, sem mencionar garantir uma boa gestão. E isso é apenas a ponta do iceberg.

Vamos ver como o namespace facilita a gestão de recursos do Kubernetes. Então, o que é um namespace? Um namespace pode ser visto como um cluster virtual dentro do seu cluster Kubernetes. Você pode ter vários namespaces isolados entre si dentro de um único cluster Kubernetes. Eles realmente podem ajudar você e suas equipes com organização, segurança e até mesmo desempenho do sistema.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Na maioria das distribuições do Kubernetes, o cluster já vem com um namespace chamado 'default'. Na verdade, existem três namespaces com os quais o Kubernetes lida: default, kube-system e kube-public. Atualmente, o kube-public não é utilizado com muita frequência.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Evitar tocar no namespace kube é uma boa ideia, especialmente em um sistema gerido como o Google Kubernetes Engine. Ele utiliza o namespace 'default' como o local onde seus serviços e aplicações são criados. Não há nada de especial nele, exceto que o Kubernetes vem configurado para usá-lo 'pronto para uso', e você não pode excluí-lo. Isso é ótimo para começar e para sistemas de baixo desempenho, mas eu não recomendaria usar o namespace default em grandes sistemas de produção. Neste último caso, uma equipe de desenvolvedores pode facilmente sobrescrever o código de outra e interromper o funcionamento de outra equipe, sem perceber.

Portanto, você deve criar vários namespaces e utilizá-los para segmentar seus serviços em unidades geridas. Um namespace pode ser criado com um único comando. Se você quiser criar um namespace chamado test, use o comando $ kubectl create namespace test ou simplesmente crie um arquivo YAML e use-o como qualquer outro recurso do Kubernetes.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Você pode visualizar todos os namespaces com o comando $ kubectl get namespace.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Após sua execução, você verá três namespaces incorporados e um novo namespace chamado "test". Vamos examinar um arquivo YAML simples destinado à criação de um pod. Você pode notar que não há menção a qualquer namespace.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Se você usar kubectl para executar este arquivo, ele criará o módulo mypod no namespace ativo atual. Este será o namespace padrão, até que você o altere. Existem duas maneiras de informar ao Kubernetes em qual namespace você deseja criar seu recurso. A primeira maneira é usar a flag de namespace ao criar o recurso.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

A segunda maneira consiste em especificar o namespace na declaração YAML.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Se você especificar o namespace no YAML, o recurso sempre será criado nesse namespace. Se você tentar usar um namespace diferente ao usar a flag de namespace, o comando falhará. Agora, se você tentar encontrar seu pod, não conseguirá.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Isso acontece porque todos os comandos são executados fora do namespace ativo atual. Para encontrar seu pod, você precisará usar a flag de namespace, porém isso rapidamente se torna cansativo, especialmente se você é um desenvolvedor em um grupo que usa seu próprio namespace e não quer usar essa flag para cada comando individual. Vamos ver como isso pode ser resolvido.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Por padrão, seu namespace ativo é chamado de default. Se você não especificar o namespace no YAML do recurso, todos os comandos do Kubernetes usarão este namespace ativo default. Infelizmente, tentar gerenciar o namespace ativo com kubectl pode falhar. No entanto, existe uma ótima ferramenta chamada Kubens, que simplifica muito esse processo. Quando você executa o comando kubens, você vê todos os namespaces com o namespace ativo destacado.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Para mudar o namespace ativo para o namespace test, você simplesmente executa o comando $ kubens test. Se você digitar novamente o comando $ kubens, verá que agora um novo namespace ativo – test – está destacado.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Isso significa que você não precisa de uma flag de namespace para ver o pod no namespace test.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Dessa forma, os namespaces estão ocultos uns dos outros, mas não isolados. Um serviço de um namespace pode se comunicar facilmente com um serviço em outro namespace, o que muitas vezes é muito útil. A capacidade de comunicação entre diferentes namespaces significa que o serviço de seus desenvolvedores pode interagir com o serviço de outra equipe de desenvolvimento em um namespace diferente.

Normalmente, quando seu aplicativo quer acessar um serviço Kubernetes, você usa o serviço de descoberta DNS embutido e simplesmente informa ao seu aplicativo o nome do serviço. No entanto, você pode criar um serviço com o mesmo nome em vários namespaces, o que não é permitido.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Felizmente, é fácil contornar isso usando a forma expandida do endereço DNS. Os serviços no Kubernetes expõem seus endpoints usando um padrão DNS comum. Isso se parece com algo assim:

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Geralmente, você só precisa do nome do serviço, e o DNS determinará automaticamente o endereço completo.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

No entanto, se você precisar acessar um serviço em outro namespace, basta usar o nome do serviço mais o nome do namespace:

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Por exemplo, se você quiser se conectar ao banco de dados do serviço no namespace de teste, pode usar o endereço database.test

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Se você deseja se conectar ao banco de dados do serviço no namespace prod, usa database.prod.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Se você realmente deseja isolar e restringir o acesso ao namespace, o Kubernetes permite fazer isso com políticas de rede Kubernetes Network Policies. Eu falarei sobre isso na próxima série.

Recebo frequentemente a pergunta de quantos namespaces criar e para quais propósitos. O que é um fragmento de dados gerenciado?

Se você criar muitos espaços de nomes, eles simplesmente ficarão no seu caminho. Se houver muito poucos, você perderá todas as vantagens de tal solução. Acredito que existem quatro etapas principais que cada empresa passa ao criar sua estrutura organizacional. Dependendo da fase de desenvolvimento em que seu projeto ou empresa se encontra, você pode adotar a estratégia apropriada para a criação de espaços de nomes.

Imagine que você faz parte de uma pequena equipe que está trabalhando no desenvolvimento de 5 a 10 microsserviços e consegue facilmente reunir todos os desenvolvedores em uma sala. Nessa situação, faz sentido executar todos os serviços prod no espaço de nomes default. Claro, para mais liberdade de ação, você pode usar 2 espaços de nomes — um separado para prod e outro para dev. É bem possível que você esteja testando seu desenvolvimento no computador local com algo como o Minikube.

Suponha que as condições mudaram e agora você tem uma equipe em rápido crescimento que está trabalhando simultaneamente em mais de 10 microsserviços. Chega um momento em que é necessário usar vários clusters ou espaços de nomes, separados para prod e dev. Você pode dividir a equipe em vários subgrupos, de modo que cada um tenha seus próprios microsserviços e cada uma dessas equipes possa escolher seu próprio espaço de nomes para facilitar o processo de gerenciamento do desenvolvimento e lançamento de software.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

À medida que cada membro da equipe começa a entender como o sistema funciona como um todo, coordenar cada alteração com todos os outros desenvolvedores se torna cada vez mais difícil. A tentativa de rodar toda a pilha em seu computador local torna-se mais complicada a cada dia.

Em grandes empresas, os desenvolvedores muitas vezes não sabem exatamente em que parte estão trabalhando. As equipes se comunicam através de contratos de serviço ou utilizam a tecnologia Service mesh, que adiciona um nível de abstração sobre a rede, similar a ferramentas de configuração como o Istio. Tentar executar toda a pilha localmente é praticamente impossível. Recomendo fortemente utilizar no Kubernetes uma plataforma de entrega contínua (CD) como o Spinnaker. Portanto, chega o momento em que cada equipe definitivamente precisa de seu próprio espaço de nomes. Cada equipe pode até escolher vários espaços de nomes para os ambientes de desenvolvimento e produção.

Finalmente, existem grandes empresas onde um grupo de desenvolvedores nem sabe da existência de outros grupos. Tal empresa pode até contratar desenvolvedores externos que interagem através de APIs bem documentadas. Dentro de cada um desses grupos, há várias equipes e vários microsserviços. Nesse caso, é necessário utilizar todas as ferramentas mencionadas anteriormente.

As melhores práticas do Kubernetes. Organização do Kubernetes com namespaces

Os programadores não devem implantar serviços manualmente e não devem ter acesso a espaços de nomes que não lhes dizem respeito. Nesta fase, faz sentido ter vários clusters para reduzir o 'raio de explosão' de aplicativos mal configurados, para simplificar os processos de cobrança e gerenciamento de recursos.

Assim, o uso correto dos espaços de nomes por sua organização torna o Kubernetes mais gerenciável, controlável, seguro e flexível.

As melhores práticas do Kubernetes. Verificação de viabilidade do Kubernetes com testes de Readiness e Liveness

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?

Um pouco de publicidade 🙂

Obrigado por permanecer conosco. Você gosta dos nossos artigos? Quer ver mais materiais interessantes? Apoie-nos fazendo um pedido ou recomendando para conhecidos. VPS em nuvem para desenvolvedores a partir de $4.99, uma alternativa única aos servidores entry-level, que criamos para você: Toda a verdade sobre VPS (KVM) E5-2697 v3 (6 Núcleos) 10GB DDR4 480GB SSD 1Gbps a partir de $19 ou como dividir um servidor corretamente? (disponíveis opções com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).

Dell R730xd por 2 vezes mais barato no datacenter Equinix Tier IV em Amsterdã? Somente conosco 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB a partir de $199 na Holanda! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — a partir de $99! Leia sobre Como construir uma infraestrutura de classe corporativa utilizando servidores Dell R730xd E5-2650 v4 com custo de 9000 euros por centavos?

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster