Introdução
→ Comece por aqui!
Módulo 1 - Introdução
- Como usar o canal no Discord?
- Gerenciamento do seu plano
- Ordem recomendada dos cursos
Base
→ Introdução ao DevOps
Módulo 1 - Introdução ao DevOps
- O problema de não utilizar DevOps!
- Como são organizados os times de DevOps (Squads/Plataforma)?
- Source Control Management (SCM)
- Infrastructure as Code (IaC)
- Continuous Integration (CI)
- Continuous Deployment & Continuous Delivery (CD)
- Scrum: Desenvolvimento ágil
- Chaos Engineering: Derrubando a produção
- DevSecOps... Qual a diferença?
Módulo 2 - Mentoria & Respondendo dúvidas
- Especialista ou Generalista na área de DevOps?
- Como começar uma mudança DevOps?
- O que um DevOps faz no dia a dia?
- Qual certificação fazer para DevOps?
- Qual o escopo do Júnior, Pleno e Sênior?
- Conselho: Encontra a ferramenta certa para o problema
→ Formação Linux
Módulo 1 - Introdução
Módulo 2 - Linux e distribuições
- O que são distribuições? Quais são as principais do mercado?
Módulo 3 - Instalação do Linux
- Instalação do CentOS 7 usando VirtualBox
- Instalação do CentOS 7 usando o Vagrant
Módulo 4 - Estrutura de diretórios do Linux (FHS)
- Introdução ao File System Hierarchy
Módulo 5 - Processo de boot
- Processo de Boot do Linux - O que acontece por trás dos panos?
Módulo 6 - systemd
- systemd vs SysV & target vs runlevel
- systemd vs SysV & target vs runlevel - Prática
Módulo 7 - Partições e sistema de arquivos
- Criação de partições - Prático
- Montar partições automaticamente ao longo do boot
- Recuperar sistemas de arquivos com fsck
Módulo 8 - LVM
- Criar partições com LVM - Prático
Módulo 9 - Gerenciamento de pacotes
- Introdução ao gerenciamento de pacotes
Módulo 10 - Bash
- Arquivos de inicialização do Bash
- Aspas simples e aspas duplas
- Gerenciar arquivos e diretórios (cp & touch)
- Gerenciar arquivos e diretórios (mv & mkdir)
- Processamento de texto - parte 1
- Processamento de texto - parte 2
- Processamento de texto - parte 3
- Processamento de texto - parte 4
- Processamento de texto - parte 5
- Expressões Regulares e file globbing
- Expressões Regulares e file globbing - parte 2
- Expressões Regulares e file globbing - parte 3
- Redirecionamento de comandos
Módulo 11 - Documentações
Módulo 12 - Compactação e compressão
- Comandos tar, gzip, bzip2, xz
Módulo 13 - Gerenciamento de processos
- Obter informações de processos - parte 1
- Obter informações de processos - parte 2
- Obter informações de processos - parte 3
Módulo 14 - Hardware e módulos
- Obter informações sobre hardware PCI
- Obter informações sobre hardware USB
- Gerenciar módulos (drivers)
- Gerenciar módulos (drivers) - Prático
Módulo 15 - Vim
Módulo 16 - Gerenciamento de permissões
- Gerenciar permissões normais - parte 1
- Gerenciar permissões normais - parte 2
- Gerenciar permissões normais - parte 3
- Gerenciar permissões especiais - parte 1
- Gerenciar permissões especiais - parte 2
Módulo 17 - Link simbólico e Link físico
- Link físico e link simbólico (hardlink e softlink)
- Link físico e link simbólico (hardlink e softlink) - parte 2
Módulo 18 - Encontrar arquivos e diretórios
- Utilitários para encontrar arquivos e diretórios
- Utilitários para encontrar arquivos e diretórios - parte 2
- Utilitários para encontrar arquivos e diretórios - parte 3
Módulo 19 - Introdução ao Shell Script
- Introdução ao Shell Script
Módulo 20 - Agendamento de tarefas com Cron
- Agendar tarefas com Cron - parte 1
- Agendar tarefas com Cron - parte 2
Módulo 21 - Gerenciamento de usuários
- Gerenciar usuários - Parte 2
- Gerenciar usuários (sudo)
- Gerenciar grupos e senhas
Módulo 22 - Redes
- Configuração de IP, máscara e rota - Não persistente
- Configuração de IP, máscara e rota
- Ferramentas de redes - parte 1 (nc)
- Ferramentas de redes - parte 2 (ss)
- Ferramentas de redes - parte 3 (nmtui)
- Ferramentas de redes - parte 4 (outros)
Módulo 23 - SSH
- Configurar OpenSSH - parte 2
- Configurar autenticação com chaves assimétricas
- Configurar autenticação com chaves assimétricas - parte 2
Módulo 24 - NTP
- Configurar chronyd - parte 2
Módulo 25 - RAID
- RAID prático com mdadm - parte 2
Módulo 26 - DNS
- Configurar DNS Autoritativo e integrar com DNS Cache
- Configurar DNS Autoritativo e integrar com DNS Cache - parte 2
Módulo 27 - FTP
Módulo 28 - NFSv4
Módulo 29 - HTTP (Servidor Web)
- Configurar Servidor Web Apache
- Configurar Virtual Host no Apache
- Configurar Proxy Reverso com NGINX
- Integrando Proxy Reverso + Virtual Host + DNS
Módulo 30 - Squid
- Configurar SQUID como servidor de cache
- Configurar SQUID como servidor de cache (client)
- Restringir acesso ao SQUID (ACL)
Módulo 31 - DHCP
Módulo 32 - Rsyslog
Módulo 33 - Rsync
- Criando script de back-up com Rsync
- Agendar back-up do Rsync no Cron
Módulo 34 - SMTP
- Configurar Postfix como RelayServer para Gmail
Módulo 35 - IMAP
- Integrando Dovecot + Postfix + Bind (MX) + Thunderbird
Módulo 36 - Firewall
- Configurar Firewalld - parte 2
Módulo 37 - LDAP
- Introdução ao LDAP e ACLs
- Introdução ao LDAP e ACLs - parte 2
- Squid e Postfix com LDAP - parte 2
Módulo 38 - SAMBA
- Introdução ao SAMBA & ID mapping
- Introdução ao SAMBA & ID mapping - parte 2
- Arquitetando uma Infraestrutura
- Instalação do SAMBA AD no CentOS 7
- Configurando clientes para autenticar no AD
- Configurando clientes para autenticar no AD (cliente)
- Configurando servidor de arquivos SAMBA
- BÔNUS: Vagrantfiles para DHCP & NTP
→ Shell Script para DevOps
Módulo 1 - Introdução
- Introdução ao Treinamento
Módulo 2 - Base de Bash
- O que acontece quando você executa um Script?
- Redirecionamento de comandos
- Explorando um File Descriptor
- Como evitar o uso do pipe
Módulo 3 - Estruturas de Shell
Módulo 4 - Funções Nativas
- Comparando desempenho: Builtin vs External
- Expansões: Parameter expansion
- Expansões: Variable indirection
- Expansões: Lower and uppercase
- Expansões: Command substitution
- Expansões: Process substitution
- Expansões: Word splitting
- Expansões: Pattern matching
Módulo 5 - Redirecionamento
Módulo 6 - Complementos
Módulo 7 - Projeto prático: Construindo uma CLI
- Subindo Fedora para testar
- Importando código com source
→ Fundamentos de Redes para DevOps
Módulo 1 - Camada de Aplicação (L7)
- Introdução ao Treinamento!
- HTTP Message (Request vs Response)
- Developer Mozilla - A bíblia do HTTP
- HTTP Persistent vs Non-persistent
- Como instalar o wireshark?
- O que é e para que serve um arquivo HAR?
- O que é e para que serve um Proxy?
- O que é e para que serve uma API?
- Compreendendo como consumir uma API
- Um projeto de API que desenvolvi...
- Ferramenta curl pt. 2 - Interagindo com API usando curl
- A estrutura gigantesca do DNS
- Como funciona uma busca DNS?
- Ferramenta de troubleshooting DNS: dig
- Como funciona o TLS handshake?
- Explorando TLS no Wireshark
- Resolvendo problemas no TLS handshake
Módulo 2 - Camada de Transporte (L4)
- Qual a diferença entre Camada 4 e Camada 3?
- Ferramenta para troubleshooting: ss
- Ferramenta de troubleshooting: nc
- Comunicação socket TCP usando Python | pt. 1
- Comunicação socket TCP usando Python | pt. 2
- Olhando a comunicação no Wireshark!
Módulo 3 - Camade de Rede (L3)
- NAT: Network Address Translation
- Ferramenta de troubleshooting: tcpdump
- Ferramenta de troubleshooting: MTR
- Ferramenta de troubleshooting: traceroute
Especialidades
→ Terraform para AWS
Módulo 1 - Introdução
- Introdução ao Treinamento
Módulo 2 - AWS mão na massa!
- Subnets (privada e pública)
- Tags nas Subnets para AWS Load Balancer Controller
- Internet Gateway e Route Table
- Bastion Host para confirmar ;)
- NAT Gateway e Route Table
- Deploy AWS Load Balancer Controller
Módulo 3 - Introdução ao Terraform e início do projeto
- Setup do repositório no GitHub
- Migrando o backend do tfstate
- Pre-commit hooks para Terraform
- terraform.tfvars (valores para variáveis)
- Region dinâmica e tags para ALB
- Desacoplando tags usando locals
- Internet Gateway e Route Table
Módulo 4 - Introdução ao Terraform Modules
- Introdução ao Terraform Modules
- E nasce o módulo de Networking!
Módulo 5 - Módulo do Cluster
- Alterando regra de HTTPS para API server
- Entendendo o Fingerprint do OIDC
Módulo 6 - Módulo do Managed Node Group
- Configuração do kubeconfig para kubectl
Módulo 7 - Módulo do AWS Load Balancer Controller
- IAM role do Controller | pt. 1
- IAM role do Controller | pt. 2
Módulo 8 - Finalização do super-módulo!
- Instalação do terraform-docs
- Gerando a documentação do módulo e sub-módulos
- Pre-commit com terraform-docs
- Modularizando o super-módulo
- Utilizando o módulo (teste final)!
→ Kubernetes: Do Básico ao Avançado
Módulo 1 - Criação do Cluster
- Como funciona e por que utilizar o Kubernetes?
- Arquitetura do Kubernetes: Control Plane
- Arquitetura do Kubernetes: Data Plane
- kind: Criação de um cluster de testes local
- kubeadm: Configuração das VMs para criação do cluster no Vagrant
- kubeadm: Instalação de todos os requisitos nas VMs
- kubeadm: Criação do cluster Kubernetes (finalmente)
- kubespray: Planejando um cluster de Alta Disponibilidade
- kubespray: Criação das VMs no Proxmox com Terraform
- kubespray: Criação automatizada de um cluster Production-Ready
- DICA: alias dos kuberneteiros
- Como fazer merge de dois kubeconfigs?
- Debugando a comunicação entre o kubectl e API server
- Obtendo mais informações do cluster (explorando o get)
- etcd: Configurando o etcdctl
- etcd: Back-up e snapshot do etcd
Módulo 2 - YAML
- Usando arquivos YAML com Kubernetes
- Obtendo YAML de objetos (+bônus krew)
Módulo 3 - Namespaces
- O que é e para que serve uma namespace?
- Usando namespaces na prática
Módulo 4 - Pods
- troubleshooting: Não consigo ler os logs nem dar exec no pod!
- troubleshooting: Pod só se comunica com pod do mesmo host!
- Trabalhando com pods (+super dica alterando o command do pod)
- troubleshooting: Acessando um container de um pod sem o "kubectl exec"
- lifecycle: Como um pod é terminado?
Módulo 5 - Deployments
- Introdução aos deployments
- Deployment -> ReplicaSet -> Pod
- kubectl explain: Obtendo documentação
- maxSurge e maxUnavailable: Otimizando deployment
- Resources: Como delimitar recursos computacionais?
- request & limits na prática
- goldilocks: Como descobrir o request/limits ideal para a aplicação
- troubleshooting: Como analisar OOM (Out Of Memory) no cluster Kubernetes?
- Introdução aos probes (healthchecks) do Kubernetes
- Readiness vs Liveness: Qual a diferença?
- Readiness probes na prática
- Liveness probes na prática
Módulo 6 - DaemonSets
- Introdução aos DaemonSets
Módulo 7 - StatefulSets
- Stateful vs Stateless: Qual a diferença?
- Introdução aos StatefulSets
- Deploy do local-path-provisioner
- Pod Disruption Budget (pdb) - Garantindo a disponibilidade da aplicação
Módulo 8 - Jobs e CronJobs
- Introdução aos "Batch Jobs"
Módulo 9 - Services
- O que são e para que serem os Services?
- Tipos de Services (ClusterIP, NodePort, LoadBalancer, ExternalName)
- Service Discovery (DNS no Kubernetes)
- Como uma requisição chega no Pod?
- Alterar o modo de operação do kube-proxy
- kube-proxy: Iptables mode
- Como um LoadBalancer é criado?
- Debugando LoadBalancer no Iptables
- TrafficPolicies! Diminuindo latência
- Blue-green deployment "raíz"
Módulo 10 - Ingress
- Como funciona a comunicação utilizando Ingress?
- Deploy do NGINX Ingress Controller
- Primeiro Ingress resource
- IngressClasses! (Múltiplos controllers)
- Múltiplos services no mesmo Ingress
- TLS: Configuração da HTTPS
Módulo 11 - ConfigMap & Secrets
- Introdução a ConfigMaps e Secrets
- Configuração de VirtualHost do NGINX via ConfigMap
- Explorando um pouco mais os Secrets
Módulo 12 - Storage
- Introdução a Storage no Kubernetes
Módulo 13 - Autoscaling
- Escala Horizontal vs Escala Vertical
- Teoria: HPA, kube-controller e metrics APIs
- Simulando scaling e entendendo o algoritmo
- Introdução e Deploy do VPA
Módulo 14 - Networking
- Introdução a CNI (Container Networking Interface)
- Como funciona a intercomunicação pela CNI? | Flannel
- Query DNS dentro do cluster | CoreDNS
- ndots e seu impacto no DNS
→ Docker: Do Básico ao Avançado
Módulo 1 - Introdução ao Docker
- Introdução ao treinamento
- Qual a diferença entre Container e VM?
- Por que utilizar containers?
- Open Container Initiative
- Como Docker é utilizado nas empresas?
- Linux primitives: namespaces
- Linux primitives: cgroups
Módulo 2 - Primeiros passos
Módulo 3 - Imagens, containers e OverlayFS
- Comandos: containers pt. 2
- Comandos: containers pt. 3
- Como funciona o OverlayFS?
- Explorando o OverlayFS na prática
- Como deve funcionar logs em containers
Módulo 4 - Networking
- EXTRA: Introdução ao macvlan
- EXTRA: Configuração do GNS3
- EXTRA: Criação do Docker Host e importar no GNS3
- EXTRA: macvlan na prática com Open vSwitch a VLAN tags
Módulo 5 - Storage
Módulo 6 - Build de imagens
- Como uma imagem é criada?
- Primeiro Dockerfile: nodejs
- Injetando variável ambiente
- Non-privileged users dentro do Dockerfile
- Mais um motivo pelo qual a ordem importa!
- Health checks: python (flask)
Módulo 7 - Multistaging e distribuição de imagens
- Como funciona multi-staging?
- Pushando imagens para o Docker Hub
- Exportando e importando uma imagem (como .tar)
Módulo 8 - Restart policies e events (+projeto)
- Projeto 1: Criando o script
- Projeto 1: Criando o script pt. 2
- Projeto 1: Ajustando a data
- Projeto 1: Integrando com Discord
Módulo 9 - Docker Compose
- Para que serve o Docker Compose?
- Instalando Docker Compose
- Docker Compose: rodando nossa app nodejs
- Aplicação real no compose: Ghost
Módulo 10 - Docker Swarm
- O que é Orquestração de Containers?
- Introdução ao Docker Swarm
- Criando o primeiro cluster
- Projeto 2: HAProxy com backend em dnsrr (service discovery)
- Projeto 2: Aplicando os conceitos
- Projeto 3: DNS Bind9 com Routing Mesh
- Projeto 3: Configurando o Bind9
- Projeto 3: Integrando Bind com o Routing Mesh
- Overlay Network: Encriptando o tráfego
- Projeto 4: Wordpress em HA com NFS
- Projeto 4: Configurando NFS
- Projeto 4: Wordpress em HA com NFS (prática)
- Configurando o deployment
Módulo 11 - Segurança
- Docker Content Trust pt. 1
- Docker Content Trust pt. 2
- Docker Content Trust pt. 3
- Docker Content Trust pt. 4
- Docker Context (TLS) pt. 1
- Docker Context (TLS) pt. 2
Projetos
→ REST API com Flask: Do código ao deploy!
Módulo 1 - (Projeto 1 - PaaS) - Setup do ambiente
- Repositório no GitHub e chaves SSH
- Setup do ambiente de desenvolvimento (venv e pip)
- Primeira execução do Flask
Módulo 2 - (Projeto 1 - PaaS) - Docker
- Configuração do MongoEngine
Módulo 3 - (Projeto 1 - PaaS) - Flask / Codando
- Primeiro insert com reqparse
- Desacoplando a aplicação pt. 1
- Desacoplando a aplicação pt. 2
- Ajustando nossos arquivos Docker
Módulo 4 - (Projeto 1 - PaaS) - Flask / Testes unitários
- O primeiro teste a gente nunca esquece!
Módulo 5 - (Projeto 1 - PaaS) - Heroku, MongoDB Atlas & GitHub Actions
- Configurando o Insomnia para Produção
- A primeira pipeline no GitHub Actions
- Configurando secrets da pipeline
Módulo 6 - (Projeto 2 - k8s) - Flask / Codando
- Uso de Branches e melhorias no Dockerfile
- Rota de patch de usuários
- Rota de delete de usuários
Módulo 7 - (Projeto 2 - k8s) - Health Checks / Probes
- HealthChecks / Probes no código
- Ajuste no HealthCheck para testar comunicação com o banco
Módulo 8 - (Projeto 2 - k8s) - Scans de Qualidade
- Black! Qualidade de código
- Bandit! Segurança de código
- Resolvendo o problema de segurança
Módulo 9 - (Projeto 2 - k8s) - Kubernetes (desenvolvimento)
- Criando cluster Kubernetes com Kind
- Makefile: Automatizando criação do cluster local
- Encontrando o Helm Chart do MongoDB
- Deploy do Helm Chart do MongoDB
- Adicionando o MongoDB no Makefile
- Alterando a imagePullPolicy
- Probes e Secret para credenciais
- Injetando as variáveis ambiente
- Expondo a aplicação com Service e Ingress
- Automação do setup completo de desenvolvimento
Módulo 10 - (Projeto 2 - k8s) - Helm (produção)
- Ajustando os outputs do Terraform
- WARNING: Não esqueça de destruir a infra!
- Parametrizando o Deployment
- Parametrizando o Deployment pt. 2
- Parametrizando Ingress e Service
- Como gerenciar Secrets no Kubernetes?
- Instalação do Sealed Secrets e Kubeseal
- Sealed Secrets no Terraform
Módulo 11 - (Projeto 2 - k8s) - Terraform
- Arquitetura do Projeto na AWS
- Portando Sealed Secrets e ECR para o módulo
- Security Group do Bastion
- Security Group do MongoDB
- Security Group do MongoDB pt. 2
Módulo 12 - (Projeto 2 - k8s) - Ansible
- Provisionando instância de testes com Vagrant
- Ansible Role: mongodb_linux
- Ansible Role: mongodb_repository
- Ansible Role: mongodb_install
- Ansible Role: mongodb_mongod
- Ansible Role: mongodb_auth
- Validando a conexão com banco usando Docker Compose
- Aplicando playbook via Bastion na AWS
Módulo 13 - (Projeto 2 - k8s) - DNS (Route 53 & External DNS)
- Atualizando Secrets e subindo a app via Helm!
- Configurando Ingress (AWS Load Balancer Controller)
- Testando o funcionamento com curl
- Registrando domínio automaticamente no Route 53
- Adicionado TLS no Ingress (ALB)
Módulo 14 - (Projeto 2 - k8s) - GitHub Actions (CI/CD)
- Reescrevendo step de Build
- RBAC do Kubernetes | aws-auth
- Outputs do GitHub Actions
- Deploy com Helm na pipeline
Bônus
→ Mini-cursos
Curso 1 - Cobbler: Servidor PXE no Linux
- Ajustando as diretivas de server e next_server
- Troubleshooting do TFTP (Connection Timeout)
- Gerando bootloaders para o TFTP
- Troubleshooting... Não funciona em UEFI!
- Configuração da Interface gráfica
- Configuração de usuários da Interface gráfica
- Overview da Interface gráfica
- Importando a ISO do Oracle Linux
- Importando a ISO do Fedora Server
- Modificando o Kickstart template para inserir chaves SSH
- Automatizando o deploy do Cobbler com Vagrant + Ansible
→ Encontros ao Vivo
Módulo 1
- Encontro #1 - Imagem Docker do NGINX com Virtual Host
→ Softskill: Habilidades não-técnicas essenciais!
Módulo 1 - LinkedIn
- Perfil: Experiências pt. 2
- Perfil: Formação, certificados, certificações...
- Perfil: Recapitulando tudo
- Como crescer o meu perfil?