Containers

O que é o Kubernetes?

O Kubernetes, k8s (k + 8 caracteres + s, entendeu?) ou “kube”, para aqueles que gostam de ser concisos, é uma plataforma open source que automatiza as operações dos containers Linux. Essa plataforma elimina grande parte dos processos manuais necessários para implantar e escalar as aplicações em containers. Em outras palavras, se você desejar agrupar em clusters os hosts executados nos containers Linux, o Kubernetes ajudará a gerenciar esses clusters com facilidade e eficiência. Esses clusters podem abranger hosts em clouds públicas, privadas ou híbridas.

Originalmente, o Kubernetes foi criado e desenvolvido pelos engenheiros do Google. O Google foi um dos pioneiros no desenvolvimento da tecnologia de containers Linux. Além disso, a empresa já revelou publicamente que tudo no Google é executado em containers (inclusive, essa é a tecnologia por trás dos serviços de cloud da empresa). O Google gera mais de dois bilhões de implantações de containers por semana que são viabilizadas por uma plataforma interna: o Borg. O Borg foi o antecessor do Kubernetes. As lições aprendidas ao longo dos anos de desenvolvimento do Borg foram a principal influência para o desenvolvimento da tecnologia do Kubernetes.

Uma curiosidade sobre o Kubernets é que os sete raios do logotipo fazem referência ao nome original do projeto, “Project Seven of Nine” (Projeto Sete de Nove).

A Red Hat foi uma das primeiras empresas a trabalhar com o Google no desenvolvimento do Kubernetes, antes mesmo do lançamento da plataforma. Foi assim que nos tornamos o segundo maior colaborador com o projeto upstream dessa tecnologia. Em 2015, o Google doou o projeto Kubernetes à Cloud Native Computing Foundation, recém-formada na época.


Por que o Kubernetes é essencial?

Aplicações de produção abrangem múltiplos containers. que devem ser implantados em vários hosts do servidor. O Kubernetes oferece os recursos de orquestração e gerenciamento necessários para implantar containers em escala para essas cargas de trabalho. Com a capacidade de orquestração do Kubernetes, é possível criar serviços de aplicações que abrangem múltiplos containers, programar o uso desses containers no cluster, escalá-los e gerenciar a integridade deles com o passar do tempo.

Também é necessário integrar o Kubernetes com os serviços de rede, armazenamento, segurança, telemetria e outros para oferecer uma infraestrutura de containers global.

Kubernetes explained - diagram

No entanto, isso obviamente depende do uso que cada empresa faz dos containers em seus próprios ambientes. Uma aplicação rudimentar dos containers Linux os trata como máquinas virtuais rápidas e eficientes. Quando escalado para um ambiente de produção e diversas aplicações, fica claro que é necessário ter vários containers alocados funcionando em conjunto para disponibilizar serviços individuais. Isso multiplica substancialmente o número de containers no ambiente. À medida que eles se acumulam, a complexidade também aumenta.

O Kubernetes corrige vários problemas comuns com a proliferação de containers, organizando-os em "pods". Os pods adicionam uma camada de abstração aos containers agrupados. Assim, é mais fácil programar as cargas de trabalho e fornecer os serviços necessários a esses containers, como serviços de rede e armazenamento. Outros componentes do Kubernetes são úteis no balanceamento de cargas entre os pods. Com isso, é possível garantir que o número de containers em execução é suficiente para suportar as cargas de trabalho.

Com a implementação correta do Kubernetes (e a ajuda de outros projetos open source, como Atomic Registry, Open vSwitch, heapster, OAuth e SELinux), as empresas podem orquestrar todas as partes da infraestrutura de containers.

Descubra os benefícios que os containers oferecem para sua empresa


O que é possível fazer com o Kubernetes?

A principal vantagem que as empresas observarão ao usar o Kubernetes em seus ambientes é que elas terão em mãos uma plataforma para programar e executar containers em clusters de máquinas físicas ou virtuais. Em termos mais abrangentes, com o Kubernetes é mais fácil implementar e confiar totalmente em uma infraestrutura baseada em containers para os ambientes de produção. Como o propósito do Kubernetes é automatizar completamente as tarefas operacionais, ele permite que os containers realizem muitas das tarefas possibilitadas por outros sistemas de gerenciamento ou plataformas de aplicações.

O Kubernetes possibilita:

  • Orquestrar containers em vários hosts.
  • Aproveitar melhor o hardware para maximizar os recursos necessários na execução das aplicações corporativas.
  • Controlar e automatizar as implantações e atualizações de aplicações.
  • Montar e adicionar armazenamento para executar aplicações com monitoração de estado.
  • Escalar rapidamente as aplicações em containers e recursos relacionados.
  • Gerenciar serviços de forma declarativa, garantindo que as aplicações sejam executadas sempre da mesma maneira como foram implantadas.
  • Verificar a integridade e autorrecuperação das aplicações com posicionamento, reinício, replicação e escalonamento automáticos.

No entanto, o Kubernetes depende de outros projetos para oferecer plenamente esses serviços orquestrados. Com a inclusão de outros projetos open source, é possível atingir a capacidade total do Kubernetes. Dentre esses projetos necessários, incluem-se:

  • Registro, como o Atomic Registry ou o Docker Registry.
  • Rede, como o OpenvSwitch e roteamento de borda inteligente.
  • Telemetria, como o heapster, o kibana, o hawkular e o elastic.
  • Segurança, como o LDAP, o SELinux, o RBAC e o OAUTH com camadas de multilocação.
  • Automação, com a adição de playbooks do Ansible para a instalação e o gerenciamento do ciclo de vida do cluster.
  • Serviços, oferecidos em um catálogo variado de conteúdos previamente criados de padrões de aplicações populares.

Aprenda a linguagem do Kubernetes

Assim como qualquer tecnologia, há vários termos específicos que podem representar uma barreira inicial. Vamos explicar alguns dos termos mais comuns para ajudar você a entender melhor o Kubernetes.

Master: a máquina que controla os nós do Kubernetes. É nela que todas as atribuições de tarefas se originam.

Nó: são máquinas que realizam as tarefas solicitadas e atribuídas. A máquina mestre do Kubernetes controla os nós.

Pod: um grupo de um ou mais containers implantados em um único nó. Todos os containers em um pod compartilham o mesmo endereço IP, IPC, nome do host e outros recursos. Os pods separam a rede e o armazenamento do container subjacente. Isso facilita a movimentação dos containers pelo cluster.

Replication controller:  controla quantas cópias idênticas de um pod devem ser executadas em um determinado local do cluster.

Serviço: dissocia as definições de trabalho dos pods. Os proxies de serviço do Kubernetes automaticamente levam as solicitações de serviço para o pod correto, independentemente do local do pod no cluster ou se foi substituído.

Kubelet: um serviço executado nos nós que lê os manifestos do container e garante que os containers definidos foram iniciados e estão em execução.

kubectl: a ferramenta de configuração da linha de comando do Kubernetes.


Uso do Kubernets em produção

Kubernetes é uma tecnologia open source. Esse tipo de tecnologia não conta com uma estrutura de suporte formal na qual as empresas podem confiar totalmente. Problemas com a implantação do Kubernetes durante a execução no ambiente de produção podem representar uma grande dor de cabeça para você e os seus clientes.

Para isso, existe o Red Hat OpenShift . O OpenShift é uma solução de nível corporativo que oferece a tecnologia do Kubernetes e muito mais. Essa solução já traz todos os elementos extras que tornam o Kubernetes potente e viável para as empresas, incluindo componentes de registro, rede, telemetria, segurança, automação e serviços. Com o Red Hat OpenShift, os desenvolvedores da sua empresa poderão criar novas aplicações em containers, hospedá-las e implantá-las na cloud. Tudo isso com a escalabilidade, o controle e a orquestração necessários para transformar boas ideias em negócios valiosos de forma rápida e fácil.

Além disso, a maior vantagem dessa solução é que essa plataforma foi desenvolvida e conta com o suporte da Red Hat, a empresa líder global em tecnologia open source.


Veja como o Kubernetes se encaixa na sua infraestrutura

Kubernetes diagram

O Kubernetes é executado em um sistema operacional (por exemplo, no Red Hat Enterprise Linux Container Host) e interage com pods de containers executados em nós. A máquina mestre do Kubernetes aceita os comandos de um administrador (ou equipe de DevOps) e retransmite essas instruções aos nós subservientes. Essa retransmissão é realizada em conjunto com vários serviços para automaticamente decidir qual nó é o mais adequado para a tarefa. Depois, são alocados os recursos e atribuídos os pods do nó para cumprir a tarefa solicitada.

Portanto, do ponto de vista da infraestrutura, são poucas as mudanças em comparação com a forma como você já gerencia os containers. O controle sobre os containers acontece em um nível superior, tornando-o mais refinado, sem a necessidade de microgerenciar cada container ou nó separadamente. Será necessário realizar algum trabalho, mas em sua maioria trata-se somente de uma questão de atribuir um master do Kubernetes e definir os nós e pods.

E quanto ao docker?

A tecnologia do docker ainda realiza as mesmas tarefas do seu objetivo original. Quando o Kubernetes programa um pod para um nó, o kubelet no nó instruirá o docker a iniciar os containers especificados. O kubelet, então, continuamente coleta do docker os status desses containers e agrega as informações no master. O docker insere os containers nesse nó e os inicia e interrompe normalmente. A diferença é que um sistema automatizado solicita que o docker realize essas tarefas em todos os nós de todos os containers, em vez do administrador fazer essas solicitações manualmente.

É possível fazer muito mais com os containers