O que é o OpenShift?

Continuando com os posts sobre as ferramentas de DevOps, vamos abordar uma ferramenta que vem se tornando cada vez mais popular: o OpenShift, da Red Hat.

O que vem a ser o OpenShift?

O OpenShift é uma plataforma de código aberto desenvolvida pela Red Hat que auxilia no processo de orquestração de containers baseada em Kubernetes e containers Linux de maneira independente da plataforma na qual os containers serão executados.

Através de uma interface muito amigável e intuitiva, o OpenShift oferece a possibilidade de controlar todo o ciclo de vida de uma aplicação baseada em containers, desde o deploy até a execução efetiva.

Isso é possível graças a integração facilitada com várias outras ferramentas e SDKs para diferentes linguagens, o que torna o OpenShift uma ferramenta muito competente e completa não somente para o gerenciamento de containers, mas também para o controle de todo o ciclo de vida de uma aplicação.

O diagrama abaixo, fornecido pela própria Red Hat, oferece uma visão geral das ferramentas que são integradas e orquestradas pelo OpenShift.

Pela imagem acima, podemos perceber que o OpenShift oferece uma infinidade de serviços, como gerenciamento dos processos de integração contínua/entrega contínua (CI/CD), gerenciamento de configurações e logs, monitoramento da saúde das aplicações e containers que estão sendo gerenciados e até mesmo aspectos de segurança, isso tudo de maneira completamente desacoplada do container e/ou da infraestrutura que você esteja utilizando.

Segundo a Red Hat, o OpenShift consegue oferecer todos estes serviços por ser fundamentado em uma arquitetura baseada em microsserviços que conseguem se “encaixar” uns aos outros e prover as diferentes funcionalidades que cada projeto necessita.

Como o OpenShift funciona?

Segundo a Red Hat, o OpenShift funciona em cima de um sistema baseado em camadas, onde cada camada é responsável por determinada funcionalidade. A sobreposição destas camadas é que faz com que o OpenShift consiga oferecer a quantidade de funcionalidades que são oferecidas.

A imagem abaixo, retirada da própria documentação do OpenShift ilustra estas sobreposições de camadas.

No diagrama acima, percebemos inicialmente um benefício importantíssimo do OpenShift: ele é agnóstico a ferramentas de Continuous Integration/Continuous Delivery e também a ferramentas de automação de operações, como ferramentas de automação de provisionamento de infraestrutura. Isso quer dizer que você pode utilizar o OpenShift com o Jenkins, CircleCI, TravisCI, GitLab, Terraform ou qualquer uma das ferramentas desse nicho.

O OpenShift roda em cima de cluster baseado no Kubernetes, cluster no qual os componentes são organizados em um esquema de microsserviços. Estes componentes do coração do OpenShift ficam em um nó master dentro dessa infraestrutura. Entre estes componentes que ficam dentro desse nó master, podemos destacar:

  • API/Authentication: controle de acesso às APIs do OpenShift e do Kubernetes. Esse processo de autenticação é baseado no padrão OAuth e em certificados SSL;
  • Data Store: responsável por armazenar o estado e outras informações e meta-informações dos componentes do OpenShift. O OpenShift geralmente utiliza o etcd, uma estrutura de armazenamento baseada em chave/valor, para realizar o armazenamento destes dados;
  • Scheduler: responsável por distribuir as cargas de trabalho entre nós dos clusters de componentes do OpenShift. Trata-se de um dos principais componentes do OpenShift;
  • Management/Replication: mecanismo responsável pelo processo de replicação e por coletar informações sobre o estado dos componentes e elementos do cluster. Ele é basicamente um loop infinito que, de tempos em tempos, coleta estes dados e atualiza o estado dos componentes, armazenando estes estados no Data Store (etcd). Estes processos são controlados através de estruturas chamadas controllers. Os principais controllers dentro do OpenShift são: replication controller, endpoint controller, namespace controller e service account controller. É importante salientar que as informações coletadas pelos controllers refletem na API exposta pelo nó master, assim como os comandos dados às APIs do OpenShift e do Kubernetes são executados de fato também pelos controllers.

As aplicações acabam ficando armazenadas nos outros nós da infraestrutura do OpenShift. Na ilustração acima, por exemplo, temos uma estrutura inspirada no Docker: temos as aplicações dentro de containers, containers estes que ficam agrupados pelos pods. Todos estes pods desenvolvem seu ciclo de vida dentro de um nó, ou seja: uma máquina que faz parte do cluster Kubernetes gerenciado pelo OpenShift.

A relação entre o OpenShift e o OKD

O OKD é basicamente uma distribuição “personalizada” do Kubernetes. OKD é um acrônimo para “Origin Kubernetes Distribution”. O OKD foi criado pela Red Hat para que existisse uma distribuição do Kubernetes mais otimizada para processos tradicionais em ambientes baseados em nuvem, como aplicações multi-tenancy e aplicação de processos de continuous delivery/continuous integration. Ou seja: o OKD é um Kubernetes otimizado para as situações previamente citadas, otimizações estas realizadas pela Red Hat.

O OKD não é concorrente do OpenShift. Na verdade, o core do OpenShift é justamente o OKD. A estrutura baseada em Kubernetes que é utilizada pelo OpenShift é, na verdade, o OKD. Caso você julgue necessário, você pode utilizar o OKD de maneira direta, ou seja: sem passar necessariamente pelo OpenShift.