Kubernetes - Sua próxima plataforma de aplicação

Janeiro 10, 2020

0

O Kubernetes é uma plataforma popular de código-fonte aberto para orquestração de contêineres - isto é, para o gerenciamento de aplicativos criados a partir de vários tempos de execução amplamente independentes, chamados contêineres. Os contêineres se tornaram cada vez mais populares desde o lançamento do projeto de contêiner do Docker em 2013, mas aplicativos grandes e em contêiner distribuído podem se tornar cada vez mais difíceis de coordenar. Ao tornar os aplicativos em contêineres muito mais fáceis de gerenciar em escala, o Kubernetes se tornou uma parte essencial da revolução dos contêineres.

O que é orquestração de contêiner?

Os contêineres suportam a separação de preocupações do tipo VM, mas com muito menos sobrecarga e flexibilidade muito maior. Como resultado, os contêineres remodelaram a maneira como as pessoas pensam sobre o desenvolvimento, a implantação e a manutenção de software. Em uma arquitetura em contêiner, os diferentes serviços que constituem um aplicativo são empacotados em contêineres separados e implantados em um cluster de máquinas físicas ou virtuais. Mas isso gera a necessidade de orquestração de contêineres - uma ferramenta que automatiza a implantação, gerenciamento, dimensionamento, rede e disponibilidade de aplicativos baseados em contêineres.

O que é o Kubernetes?

0

Kubernetes é um projeto de código aberto que se tornou uma das ferramentas de orquestração de contêiner mais populares do mercado; permite implantar e gerenciar aplicativos de vários contêineres em escala. Embora na prática o Kubernetes seja usado com mais frequência com o Docker, a plataforma de contêiner mais popular, ele também pode funcionar com qualquer sistema de contêiner que esteja em conformidade com os padrões da Open Container Initiative (OCI) para formatos e tempos de execução de imagem de contêiner. E como o Kubernetes é de código aberto, com relativamente poucas restrições sobre como pode ser usado, ele pode ser usado livremente por qualquer pessoa que queira executar contêineres, na maioria dos locais em que desejar executá-los - no local, na nuvem pública .

Google e Kubernetes

Kubernetes começou a vida como um projeto no Google. É um sucessor do Google Borg, embora não seja um descendente direto, uma ferramenta anterior de gerenciamento de contêineres usada pelo Google internamente. O Google abriu o Kubernetes de origem em 2014, em parte porque as arquiteturas de microsserviços distribuídos que o Kubernetes facilita facilita a execução de aplicativos na nuvem. O Google vê a adoção de contêineres, microsserviços e Kubernetes como potencialmente direcionando clientes para seus serviços em nuvem (embora o Kubernetes certamente funcione também com o Azure e a AWS). Atualmente, o Kubernetes é mantido pela Cloud Native Computing Foundation, que está sob a égide da Linux Foundation.

Kubernetes x Docker e Kubernetes x Docker Swarm

O Kubernetes não substitui o Docker, mas aumenta. No entanto, o Kubernetes substitui algumas das tecnologias de nível superior que surgiram em torno do Docker.

Uma dessas tecnologias é o Docker Swarm, um orquestrador que acompanha o Docker. Ainda é possível usar o Docker Swarm em vez do Kubernetes, mas a Docker Inc. decidiu fazer do Kubernetes parte das edições Docker Community e Docker Enterprise no futuro.

Não que o Kubernetes seja um substituto para o Docker Swarm. O Kubernetes é significativamente mais complexo que o Swarm e requer mais trabalho para implantar. Mais uma vez, o trabalho visa proporcionar um grande retorno a longo prazo - uma infraestrutura de aplicativos mais gerenciável e resiliente. Para trabalhos de desenvolvimento e clusters de contêineres menores, o Docker Swarm apresenta uma opção mais simples.

Kubernetes vs. Mesos

Outro projeto que você já deve ter ouvido falar como concorrente do Kubernetes é o Mesos. Mesos é um projeto Apache que surgiu originalmente dos desenvolvedores no Twitter; na verdade, foi visto como uma resposta ao projeto do Google Borg.

De fato, o Mesos oferece serviços de orquestração de contêiner, mas suas ambições vão muito além disso: ele visa ser um tipo de sistema operacional em nuvem que pode coordenar componentes contêineres e não contêineres. Para esse fim, muitas plataformas diferentes podem ser executadas no Mesos - incluindo o próprio Kubernetes.

Arquitetura Kubernetes: Como o Kubernetes funciona

0

A arquitetura de Kubernetes utiliza vários conceitos e abstrações. Algumas delas são variações de noções familiares existentes, mas outras são específicas do Kubernetes.

Clusters Kubernetes

A abstração do Kubernetes de nível mais alto, o cluster, refere-se ao grupo de máquinas executando o Kubernetes (ele mesmo um aplicativo em cluster) e os contêineres gerenciados por ele. Um cluster Kubernetes deve ter um mestre, o sistema que comanda e controla todas as outras máquinas Kubernetes no cluster. Um cluster Kubernetes altamente disponível replica as instalações do mestre em várias máquinas. Mas apenas um mestre de cada vez executa o agendador de tarefas e o controlador-gerente.

Nós e pods do Kubernetes

0

Cada cluster contém nós do Kubernetes. Os nós podem ser máquinas físicas ou VMs. Novamente, a ideia é abstração: o que quer que o aplicativo esteja executando, o Kubernetes lida com a implantação nesse substrato. O Kubernetes ainda possibilita garantir que determinados contêineres sejam executados apenas em VMs ou apenas em bare metal.

Os nós executam pods, os objetos mais básicos do Kubernetes que podem ser criados ou gerenciados. Cada pod representa uma única instância de um aplicativo ou processo em execução no Kubernetes e consiste em um ou mais contêineres. O Kubernetes inicia, para e replica todos os contêineres em um pod como um grupo. Os pods mantêm a atenção do usuário no aplicativo, e não nos próprios contêineres. Detalhes sobre como o Kubernetes precisa ser configurado, a partir do estado dos pods em diante, são mantidos no Etcd, um armazenamento de valores-chave distribuído.

Os pods são criados e destruídos nos nós, conforme necessário, para estar em conformidade com o estado desejado especificado pelo usuário na definição de pod. O Kubernetes fornece uma abstração chamada controlador para lidar com a logística de como os pods são girados, lançados e girados. Os controladores têm alguns tipos diferentes, dependendo do tipo de aplicativo que está sendo gerenciado. Por exemplo, o controlador “StatefulSet” recentemente introduzido é usado para lidar com aplicativos que precisam de estado persistente. Outro tipo de controlador, a implantação, é usado para dimensionar um aplicativo para cima ou para baixo, atualizar um aplicativo para uma nova versão ou reverter um aplicativo para uma versão em bom estado, se houver algum problema.

Serviços Kubernetes

0

Como os pods vivem e morrem conforme necessário, precisamos de uma abstração diferente para lidar com o ciclo de vida do aplicativo. Um aplicativo deve ser uma entidade persistente, mesmo quando os pods que executam os contêineres que o compõem não são persistentes. Para esse fim, o Kubernetes fornece uma abstração chamada serviço.

Um serviço no Kubernetes descreve como um determinado grupo de pods (ou outros objetos do Kubernetes) pode ser acessado via rede. Como a documentação do Kubernetes coloca, os pods que constituem o back-end de um aplicativo podem mudar, mas o front-end não precisa saber sobre isso ou acompanhá-lo. Os serviços tornam isso possível.

Mais algumas peças internas ao Kubernetes completam a imagem. O agendador distribui as cargas de trabalho para os nós, para que eles sejam equilibrados entre os recursos e para que as implantações atendam aos requisitos das definições de aplicativo. O gerente do controlador garante que o estado do sistema - aplicativos, cargas de trabalho etc. - corresponda ao estado desejado definido nas definições de configuração do Etcd.

É importante lembrar que nenhum dos mecanismos de baixo nível usados ​​pelos contêineres, como o próprio Docker, é substituído pelo Kubernetes. Em vez disso, o Kubernetes fornece um conjunto maior de abstrações para usar esses mecanismos para manter os aplicativos em execução em escala.

Kubernetes Ingress

0

Os serviços Kubernetes são considerados executados em um cluster. Mas você deseja acessar esses serviços do mundo exterior. O Kubernetes possui vários componentes que facilitam isso com vários graus de simplicidade e robustez, incluindo NodePort e LoadBalancer, mas o componente com maior flexibilidade é o Ingress. O Ingress é uma API que gerencia o acesso externo aos serviços de um cluster, normalmente via HTTP.

O Ingress exige um pouco de configuração para ser configurado corretamente - Matthew Palmer, que escreveu um livro sobre o desenvolvimento do Kubernetes, o orienta no processo em seu site.

Painel Kubernetes

0

Um componente do Kubernetes que ajuda você a se manter atualizado sobre todos esses outros componentes é o Dashboard, uma interface do usuário baseada na Web com a qual você pode implantar e solucionar problemas de aplicativos e gerenciar recursos de cluster. O painel não é instalado por padrão, mas adicioná-lo não é um problema demais.

Vantagens do Kubernetes

Como o Kubernetes introduz novas abstrações e conceitos, e como a curva de aprendizado do Kubernetes é alta, é normal perguntar quais são os retornos de longo prazo para o uso do Kubernetes. Aqui está um resumo de algumas das maneiras específicas de executar aplicativos no Kubernetes se tornar mais fácil.

O Kubernetes gerencia a integridade do aplicativo, replicação, balanceamento de carga e alocação de recursos de hardware para você Uma das tarefas mais básicas que o Kubernetes tira de suas mãos é a tarefa de manter um aplicativo em funcionamento, em resposta às demandas dos usuários. Os aplicativos que se tornam "não íntegros" ou que não estão em conformidade com a definição de saúde que você descreve para eles podem ser curados automaticamente.

Outro benefício que o Kubernetes oferece é maximizar o uso de recursos de hardware, incluindo memória, E / S de armazenamento e largura de banda da rede. Os aplicativos podem ter limites flexíveis e rígidos definidos no uso de recursos. Muitos aplicativos que usam recursos mínimos podem ser agrupados no mesmo hardware; os aplicativos que precisam se estender podem ser colocados em sistemas onde eles têm espaço para crescer. E, novamente, a implantação de atualizações em um cluster ou a reversão, se as atualizações quebrarem, pode ser automatizada.

O Kubernetes facilita a implantação de aplicativos pré-configurados com gráficos Helm Os gerenciadores de pacotes, como o APT do Debian Linux e o Pip do Python, poupam aos usuários o problema de instalar e configurar manualmente um aplicativo. Isso é especialmente útil quando um aplicativo possui várias dependências externas.

Helm é essencialmente um gerenciador de pacotes para o Kubernetes. Muitos aplicativos de software populares devem ser executados no Kubernetes como um grupo de contêineres interdependentes. O Helm fornece um mecanismo de definição, um "gráfico" que descreve como um aplicativo ou serviço pode ser executado como um grupo de contêineres dentro do Kubernetes.

Você pode criar seus próprios gráficos do Helm do zero e talvez precise criar um aplicativo personalizado para ser implantado internamente. Mas se você estiver usando um aplicativo popular que possui um padrão de implantação comum, há uma boa chance de alguém já ter composto um gráfico Helm para ele e publicado no repositório oficial de gráficos Helm. Outro local para procurar gráficos oficiais do Helm é o diretório Kubeapps.com.

Kubernetes simplifica o gerenciamento de armazenamento, segredos e outros recursos relacionados a aplicativos

Os recipientes devem ser imutáveis; o que você colocar neles não deve mudar. Mas os aplicativos precisam de estado, o que significa que precisam de uma maneira confiável de lidar com volumes de armazenamento externo. Isso ficou ainda mais complicado pela maneira como os contêineres vivem, morrem e renascem durante a vida útil de um aplicativo.

O Kubernetes fornece abstrações para permitir que contêineres e aplicativos lidem com o armazenamento da mesma maneira dissociada que outros recursos. Muitos tipos comuns de armazenamento, dos volumes Amazon EBS aos compartilhamentos NFS antigos simples, podem ser acessados ​​por meio dos drivers de armazenamento Kubernetes, chamados volumes. Normalmente, os volumes são vinculados a um pod específico, mas um subtipo de volume chamado "Volume Persistente" pode ser usado para dados que precisam viver independentemente de qualquer pod.

Os contêineres geralmente precisam trabalhar com "segredos" - credenciais, como chaves de API ou senhas de serviço, que você não deseja que sejam codificadas em um contêiner ou armazenadas abertamente em um volume de disco. Embora haja soluções de terceiros disponíveis para isso, como os segredos do Docker e o HashiCorp Vault, o Kubernetes possui seu próprio mecanismo para lidar com os segredos de forma nativa, embora precise ser configurado com cuidado. Por exemplo, o Etcd deve ser configurado para usar SSL / TLS ao enviar segredos entre nós, em vez de em texto sem formatação.

Os aplicativos Kubernetes podem ser executados em ambientes híbridos e com várias nuvens Um dos sonhos de longa data da computação em nuvem é poder executar qualquer aplicativo em qualquer nuvem ou em qualquer mistura de nuvens públicas ou privadas. Isso não serve apenas para evitar o aprisionamento do fornecedor, mas também para tirar proveito dos recursos específicos de nuvens individuais.