DevOps

Tendências de TI para 2019

O ano já começou a todo vapor! Por isso, nada melhor do que estar por dentro das tendências na área de TI para 2019. Além das coisas mudarem muito rápido, sempre aparece alguma novidade. Então, vamos começar o ano nos atualizando com as novidades e quais tecnologias continuam em alta neste ano que se inicia.

DevOps

Hoje em dia, quem conhece a cultura e as ferramentas DevOps conquista um bom destaque no mercado. Neste ano, a previsão é que este segmento da área de TI fique mais aquecido ainda.

Relembrando: DevOps é um modelo que combina práticas e ferramentas com a intenção de aumentar a capacidade de uma empresa distribuir seus serviços de forma muito mais rápida. Ela visa também a integração da área de desenvolvimento com a área de operação, pois assim conseguimos alcançar uma maior qualidade nas entregas, além de evitar falhas de comunicação entre as áreas, bem como atrasos e retrabalhamos nos projetos.

Essa é uma prática que vem ganhando muito destaque por causa dos processos de integração contínua e entrega contínua. As entregas são menores, visando as liberações de versões mais seguras, além dos ciclos de desenvolvimento menores, fazendo com que a qualidade aumente.

Outro ponto muito importante é o auxílio que ele traz no gerenciamento e controle sobre o ambiente e infraestrutura. Como a infraestrutura é gerenciada através de técnicas de desenvolvimento de software, tanto ela quanto os servidores são implantados muito rapidamente.

Docker DevOps - Para desenvolvedores
Curso de Docker DevOps - Para desenvolvedores
CONHEÇA O CURSO

Mas, como podemos implementar a cultura e as ferramentas DevOps?

Existem diversas ferramentas para nos ajudar. Possivelmente, você já deve ter ouvido falar sobre Docker. O Docker é um exemplo, assim como o Kubernetes, o Openshift, o Jenkins e outras ferramentas. Essas ferramentas facilitam a criação e manutenção desses ambientes, geralmente baseados em containers. Com elas, você consegue criar, implantar, migrar e muito mais, de um ambiente para outro, de maneira muito eficiente, rápida e segura.

Inteligência Artificial

A Inteligência Artificial continuará em alta, pois cada vez mais empresas estão utilizando ferramentas de IA para melhorar suas operações.

Hoje, podemos dar vários exemplos do uso de ferramentas de IA que impactam em nosso dia a dia. Um exemplo bem palpável é a popularização do uso de chatbots de atendimento ao cliente, que está sendo inserida para melhorar o suporte e rapidez nas informações. Outro exemplo é o algoritmo de reconhecimento facial que o Facebook utiliza para identificar pessoas em uma foto.

Entre as ferramentas de IA que vêm ficando mais populares e que continuarão em alta em 2019, nós podemos citar o TensorFlow. O TensorFlow é uma biblioteca de software muito poderosa para computação numérica usando grafos computacionais, sendo o principal software para desenvolvimento em Deep Learning e aplicações de Inteligência Artificial.

Outra ferramenta de IA que podemos citar e que vêm ganhando cada vez mais demanda pelo mercado de trabalho é o Azure Cognitive Services, da Microsoft. O Cognitive Services amplia o acesso de APIs de aprendizado de máquina.

Esses serviços permitem a criação de aplicativos inteligentes com algoritmos e funcionalidades avançadas (como reconhecimento de objetos em fotos, visão computacional, reconhecimento de fala e outras), podendo ser utilizados em apps, sites e bots para que eles entendam as necessidades do usuário, tudo isso sem precisar de conhecimentos específicos em IA. Todos estes serviços são oferecidos através de APIs e aplicações hospedadas no ambiente do Microsoft Azure, ou seja, através de Cloud Computing.

Frameworks de gestão

Apesar de não ser uma novidade, os frameworks de gestão sempre estarão em alta, pois o mercado em geral vem ficando cada vez mais alinhado com as boas práticas de gestão alinhadas com os processos de desenvolvimento.

Hoje, é imprescindível saber pelo menos um pouco sobre os principais frameworks como ITIL, SCRUM, Kanban e outros. Esses frameworks são importantes por estabelecerem boas práticas de TI no mundo corporativo, fazendo com que a gestão de projetos seja simples, dinâmica e com foco na melhoria geral dos resultados.

O ITIL é um dos frameworks mais adotados atualmente, tendo como foco o alinhamento dos serviços de TI aos objetivos do negócio. Após a sua adoção, os processos de TI tendem a ficar mais consistentes, além da maior eficácia na entrega dos serviços.

Visando ajudar o gerenciamento desses serviços, um outro framework também muito utilizado hoje em dia é o Scrum. Ele é muito aplicado a projetos de desenvolvimento de software, dividindo o trabalho em tarefas menores e incrementais, sempre monitoradas por meio de reuniões diárias. Tudo isso para que os objetivos sejam alcançados da melhor maneira possível.

Outro framework de gestão que vem se destacando cada vez mais é o Kanban. Ele é um quadro onde você sinaliza através de cartões ou post-its o andamento da sua tarefa, com a intenção de que todos os envolvidos do projeto saibam o que está acontecendo. É uma ótima ferramenta, pois além de ser bem visual, você consegue se manter atualizado rapidamente com relação ao andamento do projeto.

ITIL - Fundamentos - Parte 1
Curso de ITIL - Fundamentos - Parte 1
CONHEÇA O CURSO

Concluindo

Essas são algumas das tendências que continuam em alta nesse ano. Certamente, as melhores vagas na área de TI em 2019 exigirão que você conheça alguns dos tópicos que foram abordados. Aqui na TreinaWeb, além de cursos das tendências que abordamos neste artigo, também existem diversos cursos de desenvolvimento de software e muitos outros que vão fazer você alavancar sua carreira na área de TI.

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.

Analista DevOps Júnior
Formação: Analista DevOps Júnior
A formação Analista DevOps nível Júnior da TreinaWeb visa introduzir desenvolvedores a tecnologias como o Docker e o servidor HTTP Nginx, tecnologias estas intimamente relacionadas ao notável universo DevOps.
CONHEÇA A FORMAÇÃO

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.

No final das contas: o que é o Kubernetes?

Nos nossos últimos posts sobre DevOps, pudemos ver algumas ferramentas que podem ser utilizadas. No último deles, vimos como o Docker pode nos ajudar e como vem sendo adotado pelas organizações pelas suas inúmeras vantagens.

Mas, fazendo uso dos containers no Docker, uma situação pode ocorrer de maneira comum: quanto mais você começa a utilizar os containers, mais eles podem crescer em número, se multiplicando em uma velocidade bem alta. Para resolver isso, entra uma ferramenta chamada Kubernetes. Este artigo tem como objetivo ilustrar como o Kubernetes pode nos ajudar a lidar com esse tipo de situação.

Docker - Primeiros Passos
Curso de Docker - Primeiros Passos
CONHEÇA O CURSO

O que vem a ser o Kubernetes?

O Kubernetes (muitas vezes também referenciado como k8s) é uma plataforma de código aberto utilizada para orquestrar e gerenciar clusters de containers. Assim, você consegue eliminar a maior parte dos processos manuais necessários para implantar e escalar os aplicativos em containers, além de gerenciar esses clusters com facilidade e efetividade.

Como o Kubernetes organiza seus componentes?

O funcionamento do Kubernetes é ligeiramente complexo, já que existem várias abstrações e componentes responsáveis pelo funcionamento de todo o ecossistema. Vamos verificar os principais conceitos e componentes essenciais.

O Kubernetes consegue fazer com que tanto elementos físicos como elementos virtuais possam se comunicar de maneira transparente. Cada um destes grupos compostos por elementos físicos e virtuais é chamado de cluster. Diferentes clusters podem se comunicar através de uma rede criada pelo Kubernetes para essa finalidade.

Os componentes dentro de um cluster podem assumir uma de duas responsabilidades possíveis: eles podem fazer o papel de master ou o papel de node. Os componentes que assumem o papel de server são responsáveis por estabelecer a comunicação com outros clusters, expor as APIs do Kubernetes com relação ao cluster em questão, realizar verificações de estabilidade dos serviços expostos e realizar operações conhecidas como scheduling, que é basicamente uma operação de atribuição de serviços aos recursos disponíveis dentro do cluster.

Os componentes que assumem o papel de node ficam responsáveis por realizar os trabalhos designados pelas aplicações que neles são executadas. Os nodes podem utilizar recursos dentro do próprio cluster ou até mesmo recursos presentes em outros clusters, já que cada cluster pode se comunicar com outros clusters pela rede que é criada pelo Kubernetes e gerenciada pelos componentes master.

É importante salientar que o Kubernetes gerencia os elementos responsáveis pela função de node através de containers, como o Docker. O master, dentro de cada cluster, fica responsável por repassar as instruções a serem executadas (como uma resposta a uma requisição, por exemplo) aos componentes node. Os componentes que fazem o papel de node então criam e deletam containers para atender a estas requisições. Os processos de criação e destruição de containers pelos nodes ficam parametrizados por regras de escalabilidade, como fluxo de rede, carga da demanda para cada um dos serviços a serem executados dentro destes clusters. Essas configurações podem ser feitas pela própria API do Kubernetes de maneira direta, ou através de arquivos de configuração, nos formatos normalmente JSON ou YAML.

O Kubernetes ainda organiza seus componentes em outras abstrações importantes. A mais elementar destas abstrações é chamada de pod. Um pod consiste de uma unidade de trabalho do Kubernetes formada por containers que trabalham dentro do mesmo node e possuem uma “relação de trabalho” muito próxima, chegando até mesmo a compartilhar recursos entre si. É como se estes containers envolvidos dentro de um pod representasse uma única aplicação. O Kubernetes encapsula estes containers próximos para que haja um controle do ciclo de vida destes mais granular, cuidado do ciclo de vida destes da mesma maneira, já que estes containers são tão próximos e provavelmente cuidam da mesma aplicação.

Paralelamente a isso, ainda temos os volumes. Os volumes são basicamente containers para persistência de informações de maneira transiente ou definitiva. Pods podem compartilhar informações entre si através de containers persistentes, por exemplo. Componentes dentro de um pod também podem compartilhar informações entre si através de volumes transientes, volumes estes que também são destruídos quando um pod conclui seu ciclo de vida.

Ainda temos outros dois componentes interessantes: os replication controllers e os replication sets. Os replication controllers se comportam como templates para criação sistêmica de pods. Eles servem para fazer a escalabilidade horizontal dos pods e, consequentemente, de uma aplicação, através das duplicatas de um pod que podem ser geradas de maneira padronizada. Já os replication sets constituem um tipo de replication controller um pouco mais evoluído, pois são capazes de tratar os aspectos de escalabilidade de maneira mais fina, além de melhorar a identificação dos pods que são gerados. Aos poucos, o Kubernetes vem substituindo os replication controllers pelos replication sets.

Abaixo podemos ver um diagrama, disponibilizado pela própria Google.

Por que utilizar o Kubernetes?

Como vimos, as aplicações de produção podem abranger múltiplos containers, que devem ser implantadas em vários hosts do servidor. Com os recursos do Kubernetes, você consegue implantar containers em escala para essas cargas de trabalho e assim executar as demandas que são recebidas pelo cluster.

Além da orquestração de containers em vários hosts, o Kubernetes também possibilita outras coisas, como o melhor aproveitamento de hardware, controle das implantações e atualizações das aplicações, escalada das aplicações rapidamente em containers e, claro, gerenciar os serviços de forma que as aplicações sejam executadas da mesma maneira como foram implantadas.

O Kubernetes pode ser executado em várias plataformas, como no seu computador, VMs em um provedor de nuvem e em vários servidores. Os clusters podem abranger hosts em clouds públicas ou privadas.

Vale ressaltar que não temos o porquê comparar o Docker e o Kubernetes. O Kubernetes usa o Docker para criar os containers de nós do cluster. Ele tem a função de gerenciar, controlar e monitorar o estado desses containers ao longo do cluster. Apesar disso, o Kubernetes não foi desenvolvido especialmente para o Docker: você pode utilizar outra estrutura (como o Rancher) e desfrutar de todo o poder que o Kubernetes oferece.

Concluindo…

É fato que os containers chegaram para mudar a maneira como são executadas as aplicações web, visando trazer mais segurança e agilidade. Porém, a utilização sistêmica dos containers pode trazer problemas de gerenciamento, principalmente quando precisamos de ambientes com múltiplas instâncias de containers sendo executadas simultaneamente.

Isso se torna mais desafiador ainda quando precisamos que este ambiente seja auto gerenciável, ou seja, que este ambiente saiba quando e quantas instâncias de containers precisam ser criadas de acordo com o nível da carga de trabalho.

É para esse tipo de situação que o Kubernetes foi criado. Com o Kubernetes, podemos obter um ambiente auto gerenciável, auto escalável e containerizado de maneira relativamente simples, graças aos poderosos recursos que esta ferramenta oferece. Não é à toa, o Kubernetes hoje é praticamente sinônimo, ao lado do OpenShift, de ferramenta de gerenciamento e escalabilidade de containers.

No final das contas: o que é o Docker e como ele funciona?

Provavelmente, você já deve ter ouvido falar sobre o Docker e ficado em dúvida sobre o que ele realmente faz ou sobre o que é esse tal de container. Por isso, vamos abordar nesse artigo o que realmente vem a ser o Docker.

Docker - Primeiros Passos
Curso de Docker - Primeiros Passos
CONHEÇA O CURSO

Docker

O Docker é uma plataforma open source que facilita a criação e administração de ambientes isolados. Ele possibilita o empacotamento de uma aplicação ou ambiente dentro de um container, se tornando portátil para qualquer outro host que contenha o Docker instalado. Então, você consegue criar, implantar, copiar e migrar de um ambiente para outro com maior flexibilidade. A ideia do Docker é subir apenas uma máquina, ao invés de várias. E, nessa única máquina, você pode rodar várias aplicações sem que haja conflitos entre elas.

Vale lembrar que a tecnologia e a empresa compartilham o mesmo nome. A empresa Docker Inc. desenvolve a tecnologia com base no trabalho realizado pela comunidade do Docker. Essa comunidade trabalha gratuitamente para melhorar essas tecnologias em benefícios de todos.

Então, podemos dizer que o Docker é uma máquina virtual?

O Docker é algo parecido com uma máquina virtual extremamente leve, mas não se trata de fato de uma máquina virtual. O Docker utiliza containers que possuem uma arquitetura diferente, permitindo maior portabilidade e eficiência. O container exclui a virtualização e muda o processo para o Docker. Então, não podemos dizer que o Docker é uma máquina virtual. Veja na imagem abaixo as diferenças entre o Docker e uma virtualização.

Podemos ver que, na virtualização, temos um maior consumo de recursos, uma vez que para cada aplicação precisamos carregar um sistema operacional. Já no Docker, podemos ver que não existe essa necessidade de múltiplos sistemas operacionais convidados.

O que são esses containers?

Um container é um ambiente isolado. Um container contém um conjunto de processos que são executados a partir de uma imagem, imagem esta que fornece todos os arquivos necessários. Os containers compartilham o mesmo kernel e isolam os processos da aplicação do restante do sistema.

Por exemplo: se você está desenvolvendo uma aplicação para um cliente, você pode fazer suas configurações nessa aplicação… Mas, em um ambiente convencional, você precisará replicar estas configurações para os outros ambientes de execução. Com o Docker, você estará fazendo isso em um ambiente isolado e, por causa da facilidade para replicação de containers, você acaba criando ambientes padronizados, tanto em desenvolvimento como em produção, por exemplo. Assim, você pode disponibilizar essa arquitetura toda para seu cliente, onde ele estiver: basta replicar os containers, que serão executados da mesma maneira em qualquer lugar.

Como o container possui uma imagem que contém todas as dependências de um aplicativo, ele é portátil e consistente em todas as etapas de desenvolvimento. Essa imagem é um modelo de somente leitura que é utilizada para subir um container. O Docker nos permite construir nossas próprias imagens e utilizá-las como base para os containers.

Vale lembrar que, apesar do Docker ter sido desenvolvido inicialmente com base na tecnologia LXC (Linux Containers – sendo, portanto, mais associado aos containers Linux), hoje essa tecnologia tornou-se independente de sistema operacional: podemos utilizar o Docker em ambientes Linux, Windows e até mesmo MacOS.

Por que utilizar o Docker?

Depois de conhecer um pouco mais sobre o Docker, você já deve ter percebido algumas vantagens de sua utilização, como economia de recursos, melhor disponibilidade do sistema (pelo compartilhamento do SO e de outros componentes), possibilidades de compartilhamento, simplicidade de criação e alteração da infraestrutura, manutenção simplificada (reduzindo o esforço e o risco de problemas com as dependências do aplicativo), entre muitas outras. Sendo assim, você terá muitos motivos e oportunidades para fazer uso do Docker.

Se quiser aprender mais como funciona o Docker na prática, dê uma olhadinha nos nossos cursos de Docker.

Docker - Primeiros Passos
Curso de Docker - Primeiros Passos
CONHEÇA O CURSO
Docker DevOps - Para desenvolvedores
Curso de Docker DevOps - Para desenvolvedores
CONHEÇA O CURSO
Docker DevOps - Para operações
Curso de Docker DevOps - Para operações
CONHEÇA O CURSO

Até mais!