Como começar na carreira de DevOps
March 4, 2022 portugues devops carreira
Resumo
Esse texto tem como objetivo oferecer o meu ponto de vista sobre o início na “carreira de DevOps”. Falarei sobre quais caminhos você pode seguir e o que eu faria se estivesse começando hoje.
É importante ressaltar que comecei minha carreira a 16 anos atrás, ou seja, estou fazendo um grande esforço para demonstrar quais são os passos mais relevantes a serem dados por quem está começando hoje, dadas as necessidades, expectativas e o contexto atual do mercado.
A ideia é melhorar esse documento a medida que eu for recebendo retornos das pessoas, ou seja, se você leu esse material no lançamento, talvez precise voltar aqui depois e olhar a novidades.
Esse artigo é uma versão melhorada do artigo antigo (de 2018), que tinha o mesmo objetivo.
Colaboração
Imagine esse texto como uma colagem de muitas ideias e materiais produzidos por outras pessoas. Ele provavelmente sofrerá alteração ao longo do tempo. Isso quer dizer que se você acha que algo deve ser colocado aqui, envie um pull request para modificação desse arquivo, para que eu possa analisar o seu ponto de vista e acrescentar no texto, se for o caso.
DevOps é carreira?
Então, a resposta direta e resumida é: NÃO, mas por outro lado o mercado já usa esse termo para denominar pessoas e vagas de trabalho relacionadas à entrega contínua, infraestrutura ágil e afins, não entrarei nesse embate no texto. Assumirei que quando falarmos de “carreira devops” estaremos falando sobre tudo o que o mercado entende a respeito disso, ok?
Não adianta lutar contra isso, pois é uma batalha perdida.
Você precisa praticar
Antes de lhe mostrar os livros, cursos e vídeos para estudo, é muito importante falar que se você não praticar, você dificilmente aprenderá de fato. Talvez consiga gravar um comando ou outro, mas aprender mesmo só praticando.
O conselho mais importante é: Leu/assistiu algo? Pratica logo em seguida.
Outra dica é criar projetos pessoais para praticar as habilidades acumuladas. Se tiver dificuldade em criar projetos pessoais, meu conselho é a mentoria de IaC.
Metodologia
Organizarei os conteúdos/temas com base nos elementos mais básicos que você precisará para começar. Tentarei definir o nível de aprofundamento necessário que você precisará ter/buscar em cada um deles, mas tudo isso é muito subjetivo, sendo assim continue estudando até se sentir confiante.
-
- 1.1. Sistemas operacionais
- 1.2. Redes
- 1.3. Programação
-
- 2.1. Cloud
- 2.2. Containers
- 2.3. Infraestrutura como código
- 2.4. CICD
- 2.5. Kubernetes
-
- 3.1. Git
- 3.2. Comunicação HTTP
1. Por onde começar?
Existem algumas tecnologias, padrões e conceitos que serão a base de tudo que você irá aprender durante toda sua carreira, logo, se eu fosse começar hoje daria especial atenção para esses “pré requisitos”.
Sei que cada um de nós vive uma realidade completamente distinta e, nem sempre é fácil estudar. Cada um tem seu tempo, processo de aprendizado e isso é muito distinto. Portanto, apresentarei o conteúdo de maneira geral e, vocês podem acessar de acordo com a necessidade, da forma que melhor se ajustar ao seu processo.
Em minha opinião, existem 3 domínios que precisam ser estudados minimamente antes do que qualquer outra coisa, pois eles tem o básico que você precisa pra entender o restante. Isso não é uma regra que funciona com todo mundo, ou seja, se você achar mais legal estudar outra coisa avançada sem saber isso, sem problemas.
Os domínios são:
- Sistema operacionais
- Redes
- Programação
1.1. Sistemas operacionais
Você precisa entender minimamente o que é um sistema operacional, e o mais usado em servidores é o Linux. Eu diria que se você estudar o Linux, aprender o Windows será uma tarefa menos complexa no futuro.
Segue abaixo alguns vídeos para começar:
Um bom material para você começar e também se aprofundar é o Guia foca.
Se quiser se aprofundar com cursos, a Linuxtips é uma boa opção:
Se quiser aprofundar com livro, esse são uma boas opções:
O que você precisa saber para começar é importante que consiga ao menos executar comandos na console e fazer o que chamamos de “troubleshooting” básico, que é a atividade de executar comandos para obter dados do problema que você está investigando.
Exemplo: Você inicia uma aplicação web e tenta acessar no seu navegador, mas ela não funciona, daí você executa ss -napt
para listar todas portas com os ips que estão “escutando” o tráfego. Percebe que a sua porta não está lá e depois executa ps -aux
para descobrir que o processo não está rodando, ou seja, algo aconteceu na inicialização do serviço, por fim, talvez seja o caso de olhar o log da aplicação para entender o que possa ter acontecido, ou iniciar ela em modo “debug”, que é quando você inicia a aplicação de uma forma que ela informa mais sobre comportamento do que o normal.
PS: Log é normalmente um arquivo de texto com informações sobre como sua aplicação está lidando com seu trabalho.
1.2. Redes
Você precisa entender minimamente como uma máquina se comunica com a outra. Não acho que será necessário se aprofundar em todos os protocolos possíveis, mas entender o básico de um endereçamento IP, a pilha TCP/IP, cabeçalho HTTP, socket de rede, rotas e saber o que é loopback.
- Esses vídeos vão do Kretcheu vão ajudar você a começar a entender o básico.
Se quiser aprofundar com livro, esses são uma boa opção:
- Redes de computadores e a internet uma nova abordagem - James Kurose e Keith Ross
- Livro Redes de Computadores - Andrew S Tanenbaum
O que você precisa saber para começar é importante que consiga ao menos entender como um computador conseguiu se comunicar com o outro e mais, você vai ter elementos para ajudar no troubleshooting que expliquei na parte de sistemas operacionais, pois aqui ficará mais claro o que são as portas, sockets e endereços IP.
PS: Os livros da sessão de redes são muito densos, ou seja, não precisa ler todo para começar.
1.3. Programação
Você precisa ter noções de programação para as automatizações, contudo, não são necessários conhecimentos aprofundados em algorítmos, porém, o básico das linguagens deve ser entendido. A maioria dos scripts simples podem ser feitos em Shell. Para tarefas mais complexas, aconselho que você aprenda o básico de Python, Ruby ou Golang.
Um bom material pra começar é o Pense Python, que lhe ensinará algoritmo ao mesmo tempo que passa conhecimentos sobre python também. Os exercícios são a parte mais importante desse material, não deixe de fazer.
O que você precisa saber para começar é entender como funciona minimamente um processo de desenvolvimento de software. Saber rodar, entender como funciona o processo de debug, que consiste em pesquisar onde está o problema daquele software, e por fim ter empatia com quem escreve software, pois você entende minimamente que não é algo simples.
Se quiser se aprofundar em desenvolvimento de software, segue abaixo algumas sugestões:
-
Python Fluente de Luciano Ramalho é uma obra prima e merece sua atenção.
2. Próximos passos
Com o básico, você pode iniciar o aprendizado em elementos mais centrais do que seria o seu dia a dia de trabalho. São em sua maioria ferramentas que serão utilizadas, com base nos conhecimentos dos domínios básicos que apresentei anteriormente.
Os novos domínios são
- Cloud
- Containers
- Infraestrutura como código
- CICD
- Kubernetes
2.1. Cloud
Você precisa entender o que é a Cloud, como proposta de entrega de serviços mantidos por outra empresa e como usar as ofertas mais comuns, da cloud mais usada.
Pra começar eu indico alguns materiais:
- Uma série de vídeos em português do Um Inventor Qualquer sobre AWS
- Vídeo completo da live do Bonde do OCI da Linuxtips OCI é a cloud da Oracle. Não é a mais usada, mas ajuda você a entender os fundamentos das clouds em geral.
- Material oficial da Oracle sobre sua cloud
- Cursos oficiais e grátis da AWS (a maioria em inglês, mas tem cursos em português)
O que você precisa saber para começar é qual a ideia geral de uma cloud e um entendimento básico dos seus produtos mais comuns, que são os produtos que configuram sua rede, cria máquinas, banco de dados, permissão de acesso e object store.
Se quiser se aprofundar, a Linuxtips é uma boa opção, mas é pago:
Na coursera tem cursos que também são muito bons:
2.2. Containers
Você precisa entender o que é um container. Não caia na armadilha de considerar ele uma máquina mais enxuta, pois esse é o erro mais comum de todo mundo que começa estudar containers.
Container é um processo isolado em execução. Se você estudou sistemas operacionais, processos deve ter sido um assunto que você leu, se não leu, eu aconselho fortemente voltar lá e ler essa parte, inclusive os comandos pra listar e manipular processos.
Pra começar eu indico alguns materiais:
- O livro que criei e ajudei a organizar - Docker para Desenvolvedores - Você pode baixar ele de graça, só zerar o valor de doação.
- Decomplicando docker da Linuxtips
- Curso online do Caio Delgado
O que você precisa saber para começar é a utilização mais simples de container, que se resume a fazer build de imagem, e com isso saber o que é Dockerfile, iniciar containers expondo portas, montando volumes. É importante também fazer troubleshooting, que seria comandos como docker exec, docker logs e outros para encontrar os motivos que seus container não está iniciando corretamente.
Se quiser se aprofundar, a Linuxtips é uma boa opção, mas é pago:
2.3. Infraestrutura como código
Você precisa entender o objetivo da Infraestrutura como código (IaC - Infra as Code). É mandatório saber qual problema esse modelo de manutenção de infraestrutura resolve. Resumidamente podemos dizer que IaC tem como objetivo criar a possibilidade de que a partir de um arquivo com definições específicas a sua infra será criada automaticamente, sem necessidade de intervenção manual.
É como se você pudesse dizer para a ferramenta assim:
“Ei! Eu preciso de um servidor, com 2GB, 4 CPU, 100GB de disco, seja criado no datacenter de Nova York, ela precisa de apenas uma placa de rede, o firewall deve liberar apenas o acesso a porta 22 do SSH (Porta usada para conectar remotamente na linha de comando para manutenção) e 80 do HTTP (Porta usada para comunicação web)”
Com base nesse exemplo, você teria um arquivo assim:
Nome do arquivo: servidor.exemplo.config
servidor1:
memoria: 2GB
cpu: 4
disco: 100GB
datacenter: nova_york
firewall:
http:
porta: 80
ação: liberar
ssh:
porta: 22
ação: liberar
Com posse do arquivo, você teria um binário, que é um arquivo especial do seu sistema operacional, que pode ser executado. Esse é o software em si. Esse binário lerá o arquivo de configuração apresentado acima (servidor.exemplo.config).
A execução seria mais ou menos assim:
binario –configuracao servidor.exemplo.config aplicar
- binario é o nome do binario no exemplo apresentado.
- –configuracao é o parâmetro desse binario exemplo.
- servidor.exemplo.config é o nome do arquivo de configuração.
- aplicar é o comando para aplicar a infraestrutura baseada no arquivo de configuração.
PS: Os exemplos de comando e arquivo de configuração apresentados acima são puramente um exemplo didático, ou seja, nenhuma das ferramentas que IaC que conheço funciona com esses exatos parâmetros, comandos e formato de arquivo de configuração. A ideia desses exemplos é apenas apresentar o funcionamento mais elementar de uma ferramenta de IaC.
Como materiais para começar, eu aconselho esses abaixo:
- Ansible 101 - Infraestrutura como Código com Ansible do Caio Delgado
- Terraform 101 - Instalação e Deploy AWS EC2 o Caio Delgado
- Descomplicando o Terraform | HashiWeek comigo e Badtux do Linuxtips
- Curso do Igor sobre Terraform
O que você precisa saber pra começar é como usar os recursos fundamentais de ferramentas de criação de infra baixa, que o mais famoso é terraform, e o mesmo para uma ferramenta de gerência de configuração, que é o ansible, ou seja, aprendendo de terraform e ansible você já tem uma boa fundação para começar.
Materiais para se aprofundar:
- Cursos da carreira IaC expert da Linuxtips, eu sou instrutor de alguns cursos
- Livro Ansible for Devops do Jeff Geerling
- Plataforma de labs da Hashicorp
2.4. CICD
Você precisa entender que CICD são duas coisas em uma, separando temos CI, que é Continuous Integration (Integração contínua) que é a ideia de você está sempre reunindo seu código em uma local, para que ele possa ser validado/tratado e ter um feedback rápido sobre a sua situação, pois a ideia é que cada membro do time possa fazer alterações no mesmo.
CD é Continuous Delivery (Entrega contínua), que é uma a ideia de seu código precisa ser entregue em algum ambiente o mais rápido possível. Esse modelo vai além da ferramenta, ele é uma forma de como pensar seus problemas e quebrar o código para atender cada parte dos desafios em pequenas entregas. A ferramenta nesse caso, é responsável pelo pipeline estará focada na melhor forma de como viabilizar isso tecnicamente.
Materiais para começar a entender:
- Meu artigo sobre o que é deploy
- Meu artigo sobre o que é pipeline
- Meu artigo sobre O que deve ter no seu pipeline
- Livro Deploy em produção para desenvolvedores
O que você precisa saber para começar é como configurar um pipeline em alguma ferramenta, que pode ser o github actions.
Se quiser se aprofundar, o meu conselho é investir nesse livro aqui:
- Entrega Contínua do Jezz Humble e David Farley O livro é caro, mas vale a pena como investimento.
2.5. Kubernetes
Você precisa entender que o kubernetes, também comumente chamado de k8s, é um orquestrador de containers, isso quer dizer que ele é responsável por iniciar o container e prover todas as funcionalidades necessárias para ele funcionar corretamente. Tal como guardar segredos, configurações, localização de containers por nome, agrupamento por tags, alta disponibilidade, escalabilidade e afins.
Materiais para começar a entender:
O que você precisa saber para começar são os elementos mais básicos do k8s, tal como os comandos mais comuns para iniciar um novo container, fazer deploy, listar os pods, services e afins.
Se quiser se aprofundar:
3. Outros assuntos importantes
Existem outros assuntos que merecem atenção, e eles podem ser encarados depois de você iniciar em tudo que falei até o momento, mas perceba que isso não é uma regra. Tanto faz a ordem, desde que você consiga avançar.
3.1. Git
Git é uma ferramenta para fornecer controle de versão dos seus códigos. É usada para garantir que você terá o controle de cada mudança do seu código. É dessa forma que você conseguirá voltar para uma versão anterior, caso a mais nova esteja com problemas, por exemplo.
Materiais para começar a entender:
- Curso Git e Github para iniciantes do Willian Justen
- Vídeo COMO USAR GIT E GITHUB NA PRÁTICA da Rafaella Ballerini
O que você precisa saber para começar são os comandos mais básicos, que são git init, git add, git commit, git status e git push. Eles são os mais usados em boa parte das oportunidades que você terá no começo da carreira.
Para quem deseja se aprofundar, a documentação dele é uma boa pedida:
3.2. Comunicação HTTP
Você precisa entender que a maioria da comunicação que será feita nas aplicações que você tomará conta será com HTTP, sendo assim, é importante ter um conhecimento mínimo do assunto.
Materiais para começar:
O que você precisa saber para começar é como funciona a comunicação, quais métodos existem, juntamente com seus propósitos, assim como HTTPS e como funciona o certificado.
Materiais para se aprofundar:
Conclusão
É importante perceber que isso aqui são os primeiros passos, ou seja, talvez uma vaga ou outra precise de outros assuntos, mas eu tentei apresentar os assuntos que fazem sentido ter minimamente para a maioria das vagas que já tive oportunidade de conhecer.
Agradecimentos
Somatório que sempre revisa tudo que escrevo.
Agradeço também as contribuições das pessoas que seguem abaixo: