O que é Kubernetes e quais suas aplicações?
O Kubernetes é uma plataforma portátil, extensível e de código aberto para o gerenciamento de cargas de trabalho e serviços em contêineres, que facilita a configuração declarativa e a automação. Tem um grande ecossistema de crescimento rápido. Os serviços, suporte e ferramentas do Kubernetes estão amplamente disponíveis.
O nome Kubernetes se origina do grego, significando timoneiro ou piloto. O Google abriu o código do projeto Kubernetes em 2014. O Kubernetes combina mais de 15 anos de experiência do Google executando cargas de trabalho de produção em escala, com as melhores ideias e práticas da comunidade.
Voltando no tempo
Vamos dar uma olhada em porque o Kubernetes é tão útil, voltando no tempo.
Era de implantação tradicional: no início, as organizações executavam aplicativos em servidores físicos. Não havia como definir limites de recursos para aplicativos em um servidor físico, e isso causava problemas de alocação de recursos. Por exemplo, se vários aplicativos fossem executados em um servidor físico, poderia haver instâncias em que um aplicativo ocuparia a maior parte dos recursos e, como resultado, o desempenho dos outros aplicativos seria inferior. Uma solução para isso seria executar cada aplicativo em um servidor físico diferente. Mas isso não escalonou, porque os recursos eram subutilizados e era caro para as organizações manter muitos servidores físicos.
Era da implantação virtualizada: como solução, a virtualização foi introduzida. Ela permite que você execute várias máquinas virtuais (VMs) em uma única CPU de servidor físico. A virtualização permite que os aplicativos sejam isolados entre as VMs e fornece um nível de segurança, pois as informações de um aplicativo não podem ser acessadas livremente por outro aplicativo.
A virtualização permite uma melhor utilização de recursos em um servidor físico e permite melhor escalabilidade, porque um aplicativo pode ser adicionado ou atualizado facilmente, além de reduzir os custos de hardware e muito mais. Com a virtualização, você pode apresentar um conjunto de recursos físicos como um cluster de máquinas virtuais descartáveis.
Cada VM é uma máquina completa que executa todos os componentes, incluindo o seu próprio sistema operacional, além do hardware virtualizado.
Era de implantação de contêiner: os contêineres são semelhantes às VMs, mas têm propriedades de isolamento relaxadas para compartilhar o sistema operacional (SO) entre os aplicativos. Portanto, os contêineres são considerados leves. Semelhante a uma VM, um contêiner tem o seu próprio sistema de arquivos, compartilhamento de CPU, memória, espaço de processo e muito mais. Como eles são desacoplados da infraestrutura subjacente, eles são portáveis em nuvens e distribuições de sistema operacional.
Os contêineres se tornaram populares porque fornecem benefícios extras, como:
- Criação e implantação de aplicativos ágeis: maior facilidade e eficiência na criação de imagens de contêiner em comparação com o uso de imagens de VM.
- Desenvolvimento, integração e implantação contínuos: fornece criação e implantação de imagem de contêiner confiável e frequente com reversões rápidas e eficientes (devido à imutabilidade da imagem).
- Separação de interesses de Dev e Ops: crie imagens de contêiner de aplicativo no momento de construção / liberação em vez de no momento de implantação, desacoplando assim os aplicativos da infraestrutura.
- A capacidade de observação não apenas mostra informações e métricas no nível do sistema operacional, mas também a integridade do aplicativo e outros sinais.
- Consistência ambiental no desenvolvimento, teste e produção: funciona da mesma forma em um laptop e na nuvem.
- Portabilidade de distribuição de nuvem e sistema operacional: roda no Ubuntu, RHEL, CoreOS, no local, nas principais nuvens públicas e em qualquer outro lugar.Gerenciamento centrado em aplicativos: aumenta o nível de abstração da execução de um sistema operacional em hardware virtual para a execução de um aplicativo em um sistema operacional usando recursos lógicos.
- Micro serviços fracamente acoplados, distribuídos, elásticos e liberados: os aplicativos são divididos em partes menores e independentes e podem ser implantados e gerenciados dinamicamente – não uma pilha monolítica em execução em uma grande máquina de propósito único.
- Isolamento de recursos: desempenho previsível de aplicativos.
- Utilização de recursos: alta eficiência e densidade.
Por que você precisa do Kubernetes e o que ele pode fazer?
Os contêineres são uma boa maneira de agrupar e executar os seus aplicativos. Em um ambiente de produção, você precisa gerenciar os contêineres que executam os aplicativos e garantir que não haja tempo de inatividade. Por exemplo, se um contêiner cair, outro contêiner precisa ser iniciado. Não seria mais fácil se esse comportamento fosse controlado por um sistema?
É assim que o Kubernetes vem ao resgate! O Kubernetes fornece uma estrutura para executar sistemas distribuídos de forma resiliente. Ele cuida do dimensionamento e do failover do seu aplicativo, fornece padrões de implementação e muito mais. Por exemplo, o Kubernetes pode gerenciar facilmente uma implantação canário para o seu sistema.
O Kubernetes oferece a você:
Descoberta de serviço e balanceamento de carga: O Kubernetes pode expor um contêiner usando o nome DNS ou seu próprio endereço IP. Se o tráfego para um contêiner for alto, o Kubernetes será capaz de balancear a carga e distribuir o tráfego de rede para que a implantação seja estável.
Orquestração de armazenamento: O Kubernetes permite montar automaticamente um sistema de armazenamento de sua escolha, como armazenamentos locais, provedores de nuvem pública e muito mais.
Implementações e reversões automatizadas: Você pode descrever o estado desejado para seus contêineres implantados usando o Kubernetes, e ele pode alterar o estado real para o estado desejado em uma taxa controlada. Por exemplo, você pode automatizar o Kubernetes para criar novos contêineres para a sua implantação, remover os contêineres existentes e adotar todos os seus recursos para o novo contêiner.
Empacotamento automático: Você fornece ao Kubernetes um cluster de nós que pode ser usado para executar tarefas em contêiner. Você informa ao Kubernetes de quanta CPU e memória (RAM) cada contêiner precisa. O Kubernetes pode encaixar contêineres em seus nós para fazer o melhor uso dos seus recursos.
O Kubernetes de autocorreção reinicia os contêineres que falham, substitui os contêineres, elimina os contêineres que não respondem à verificação de integridade definida pelo usuário e não os anuncia aos clientes até que estejam prontos.
Gerenciamento de segredo e configuração: O Kubernetes permite armazenar e gerenciar informações confidenciais, como senhas, tokens OAuth e chaves SSH. Você pode implantar e atualizar segredos e configuração de aplicativo sem reconstruir suas imagens de contêiner e sem expor segredos na sua configuração de pilha.
O que o Kubernetes não é
O Kubernetes não é um sistema PaaS (Platform as a Service – plataforma como serviço) tradicional e completo. Como o Kubernetes opera no nível do contêiner, e não no nível do hardware, ele fornece alguns recursos geralmente aplicáveis, comuns às ofertas de PaaS, como implantação, escalonamento, balanceamento de carga e permite que os usuários integrem as suas soluções de registro, monitoramento e alerta. No entanto, o Kubernetes não é monolítico e essas soluções padrão são opcionais e conectáveis. O Kubernetes fornece os blocos de construção para a construção de plataformas de desenvolvedor, mas preserva a escolha e flexibilidade do usuário onde é importante.
Kubernetes:
Não limita os tipos de aplicativos suportados. O Kubernetes visa oferecer suporte a uma variedade extremamente diversa de cargas de trabalho, incluindo cargas de trabalho sem estado, com estado e de processamento de dados. Se um aplicativo puder ser executado em um contêiner, ele deve ser executado perfeitamente no Kubernetes.
Não implanta código-fonte e não constrói o seu aplicativo. Os fluxos de trabalho de integração contínua, entrega e implantação (CI / CD) são determinados pelas culturas e preferências da organização, bem como pelos requisitos técnicos.
Não fornece serviços de nível de aplicativo, como middleware (por exemplo, barramentos de mensagem), estruturas de processamento de dados (por exemplo, Spark), bancos de dados (por exemplo, MySQL), caches, nem sistemas de armazenamento em cluster (por exemplo, Ceph) como serviços integrados. Esses componentes podem ser executados no Kubernetes e/ou acessados por aplicativos executados no Kubernetes por meio de mecanismos portáteis, como o Open Service Broker.
Não dita soluções de registro, monitoramento ou alerta. Ele fornece algumas integrações como prova de conceito e mecanismos para coletar e exportar métricas.
Não fornece nem exige um idioma/sistema de configuração (por exemplo, Jsonnet). Ele fornece uma API declarativa que pode ser direcionada por formas arbitrárias de especificações declarativas.
Não fornece nem adota sistemas abrangentes de configuração, manutenção, gerenciamento ou autocorreção de máquinas.
Além disso, o Kubernetes não é um mero sistema de orquestração. Na verdade, elimina a necessidade de orquestração. A definição técnica de orquestração é a execução de um fluxo de trabalho definido: primeiro faça A, depois B e depois C. Em contraste, o Kubernetes compreende um conjunto de processos de controle independentes e combináveis que conduzem continuamente o estado atual em direção ao estado desejado fornecido. Não deve importar como você vai de A para C. O controle centralizado também não é necessário. Isso resulta em um sistema mais fácil de usar e mais poderoso, robusto, resiliente e extensível.
Referencia: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/