lsmod (1)
Fábio Luciano
Meu nome é Fábio Luciano, trabalho como arquiteto de soluções na empresa SONDA.
Sou gay e casado 🏳️🌈;
Sou apaixonado por tecnologia e por software livre 🐧;
Sou ansioso pra cacete 😰.
Organizar meus conhecimentos sobre o assunto em algum lugar;
Enfrentar o medo de falar publicamente; e
Disseminar o conhecimento.
Apresentação dos conceitos;
Demonstrações das funcionalidades;
Discussão sobre o assunto.
Este é um documento em construção
DocBook
AsciiDoc
AsciiDoctor
PlantUML
Docker
Shell
Travis
Github Pages
Open Source;
Sistemas Operacionais e sua arquitetura;
Conteinerização;
Conversational Development;
(Dev(Sec)?|Chat)Ops;
Arquitetura de Software;
Arquitetura de Soluções;
Descentralização;
Colaboração;
Liberdade.
GPLv3;
Apache;
MIT.
A Catedral e o Bazar
Catedral
Bazar
Linux
Metadistribuições
Slackware;
Gentoo;
Arch Linux;
Distribuições
Debian;
Red Hat;
As comunidades relacionadas são incríveis (irc, fórum, etc.);
As documentações são incríveis (Arch Linux);
Salvo exceções, sempre há alguém disposto a ajudar.
Interface entre o usuário e o hardware
Gerenciamento de dispositivos (Entradas e Saídas)
Prover um ambiente para o funcionamento de programas
Interface para o gerenciamento de dados
Monitorar a saúde do hardware
Tudo é representado como arquivo;
Pseudo filesystems
dev
, proc
e sys
, fd
Possui clara separação entre o espaço do usuário e o do kernel;
Os processos são separados em namespaces
;
A Comunicação entre o user space
e kernel space
é feita por intermédio de bibliotecas ou sinais.
Onde os processos do usuário são executados;
Região fracionada e limitada da memória.
Onde os processos do kernel são executados;
Região fracionada e privilegiada da memória.
Único meio de comunicação entre o User Space
e Kernel Space
;
Gerenciamento de Processos, memória, arquivos, dispositivos, rede e etc.
SIGHUP - Reinicializa o processo;
GITTERM - Termina de forma graciosa Ctrl+c;
SIGKILL - Termina sem fazer nenhum tipo de checagem Ctrl+d.
Gerenciamento da memória;
Decide como os dados serão persistidos e recuperados;
Memória virtual;
Paginação;
Controle de Acesso.
Define em tempo de execução a alocação de recursos para um processo;
Priorização dinâmica.
Também chamado de módulos;
Interface de comunicação entre o Kernel
e os devices.
lsmod (1)
1 | Lista os módulos(drivers) carregados no Kernel. |
Failed to generate image: PlantUML image generation failed: /documents/src/resources/plantuml/resources/plantuml/plantuml.cfg (No such file or directory)
@startuml
skinparam dpi 300
title Comunicação da aplicação com o kernel
box "User Space"
participant Aplicação
participant GLIBC
participant vDSO
end box
box "Kernel Space"
participant SysCall
participant Kernel
participant Hardware
end box
Aplicação -> GLIBC
alt vDSO
create vDSO
GLIBC -> vDSO
vDSO --> GLIBC
else SysCall
GLIBC -> SysCall
end
SysCall -> Kernel
Kernel -> Hardware
Hardware --> Kernel
Kernel --> SysCall
SysCall --> GLIBC
GLIBC --> Aplicação
@enduml
#include <stdio.h> (1)
#include <unistd.h> (1)
void main () {
printf(":)\n"); (2)
usleep(520000*1000);
}
1 | Importa a biblioteca de manipulação de entrada e saída |
2 | Imprime na saída padrão |
gcc printf.c -o printf (1)
1 | Compila o programa e define o arquivo de saída |
chmod +x ./printf (1)
strace ./printf (2)
1 | Concede permissão de execução ao programa |
2 | Imprime todas as SysCalls chamadas pelo programa |
Muda o diretório raiz de um processo;
Enclausuramento de recursos;
ldd ./printf (1)
mkdir -p chroot/{lib,lib64,} (2)
cp -v /lib/x86_64-linux-gnu/libc.so.6 ./chroot/lib (3)
cp -v /lib64/ld-linux-x86-64.so.2 ./chroot/lib64 (3)
cp ./printf ./chroot/bin (3)
sudo chroot ./chroot/ /bin/printf (4)
1 | Imprime as bibliotecas que o binário utiliza |
2 | Cria a estrutura de diretórios necessário (FHS ) |
3 | Copia as bibliotecas e binário para e estrutura criada |
4 | Exacuta o programa enclausurado |
Mount (mnt
)
Process (pid
)
Network (net
)
Interprocess Communication (ipc
)
UNIX Timesharing System (uts
)
User ID (user
)
CGroup
Padrão namespace global;
Os namespaces podem ser visualizados em /proc/<processid>/ns/*
unshare
setns
clone
unshare --user /bin/bash (1)
UNSHARED_PID=`echo $$` (2)
cd /proc/$UNSHARED_PID/ns (3)
ls -l (4)
1 | Destaca a execução do binário em um namespace user diferente |
2 | Imprime o pid do processo criado e o associa a uma variável |
3 | Muda o workdir para o diretório com a lista de namespaces do processo |
4 | Lista os namespaces |
hostname (1)
unshare --uts /bin/bash (2)
hostname teste (3)
hostname (4)
Ctrl + d (5)
hostname (6)
1 | Recupera o hostname atual |
2 | Destaca a execução do binário em um namespace user diferente |
3 | Altera o hostname da máquina |
4 | Recupera o novo hostname |
5 | Envia o SIGNAL SIGKILL |
6 | Imprime o hostname no processo principal |
Diretórios e arquivos em diferentes branches;
Top-Down search nas layers;
Todas as layers inferiores são read-only
;
COW(copy-on-write
).
Empacotamento de código e aplicações;
Empacotamento de dependências e versões;
Empacotamento de configurações.
Reusabilidade e Reproducibilidade.
Hardware
Sistema Operacional(Host)
Hypervisor - Habilita a virtualização/gerenciamento dos recursos
Sistema Operacional(Hospedeiro)
Binários e bibliotecas
Aplicações
Hardware
Sistema Operacional(Host)
Daemon(Daemon based)
Binários e bicliotecas
Aplicações
Daemon | Daemonless | Systemd |
---|---|---|
Podman | ||
Docker | Buildah | Rkt |
Mais popular software de containers;
Elementos da stack:
Daemon
API
Client
Docker Hub(Registrador)
Dockerfile
Container
Volumes
Network
Segue a especificação image-spec
do projeto opencontainers
;
Descreve procedimentos necessários para se criar um ambiente;
Possui uma DSL(Domain-Specific Language)
FROM alpine (1)
RUN apk update (2)
RUN apk add curl (3)
1 | Informa a imagem base(conjunto de layers) que será utilizada |
2 | Atualiza a lista de pacotes |
3 | Instala o pacote curl |
Uma imagem é um conjunto de layers sobrepostas;
Cada instrução criará uma nova layer
na imagem final;
Cada layer aumenta o tamanho da imagem.
Segue a especificação runc
do projeto opencontainers
;
É uma imagem em execução com a adição de uma branch writtable no topo;
Pode possuir volumes e networks;
Controle de recursos com CGROUPS
e CAPABILITIES
.
Onde os dados serão persistidos;
Possuem três tipos:
Host
Anônimo
Nomeado
Pode ser estendido com a utilização de plugins(nfs)
Onde os dados do container serão trafegados
Pode ser estendido com a utilização de plugins(cluster)
Segue a especificação cni
do projeto containernetworking
;
Isolamento - Uma imagem com binários e dependências.
Paridade e Portabilidade - Prod/Dev
Entrega rápida - Automação de build e deploy
Desenvolver software é uma conversa;
O que precisa ser implementado;
O que precisa ser modificado;
Como será implementado;
Onde será implantado;
Como será controlado.
É a aplicação do agile com um objetivo simples: Finalizar uma conversa;
A conversa deve ter como objetivo a criação de um produto;
Passa por todas as áreas da linha de negócio;
Alinha-se a organização para que os processos sejam executados.
Ciclos de conversas pequenos;
A conversa deve passar por todos os estágios do CDS;
Abra a conversa, mas não espere consenso;
Resultados orientados por conversação.
Trata a infraestrutura como código;
Está intimamente ligado às práticas do DevOps
;
Permite a adoção de práticas do desenvolvimento;
Controle de versão
Revisão por pares
Segmentação de ambientes
Testes
Terraform
Cloud Formation
Ansible
Chef
Puppet
A infraestrutura é definida utilizando HCL;
Utiliza grafos para controlar as dependências dos recursos;
Possui implementação para diversos providers(AWS, Azure, Google, etc.);
Todos os recursos necessários podem ser criados programáticamente.
resource "aws_subnet" "subnet-public-1" {
vpc_id = "${aws_vpc.vpc-devops.id}"
cidr_block = "${cidrsubnet(aws_vpc.vpc-devops.cidr_block, 8, 1)}"
ipv6_cidr_block = "${cidrsubnet(aws_vpc.vpc-devops.ipv6_cidr_block, 8, 1)}"
availability_zone = "${data.aws_availability_zones.available.names[0]}"
map_public_ip_on_launch = true
tags {
Name = "${cidrsubnet(aws_vpc.vpc-devops.cidr_block, 8, 2)} - subnet-public-1"
}
}
Engine de automação;
Idempotência
Utiliza yaml
para descrever os procedimentos;
Módulos:
Infraestrutura na núvel;
Gerenciamento de Configuração;
Construção e implantação de aplicações..
As máquinas alvo da execução são organizadas em um inventory
Utiliza o protocolo SSH
para se comunicar as máquinas do inventory
;
As execuções são agrupadas em playbooks
;
Cada execução é chamada de play
.
- name: Docker | Install or Upgrade
block:
- name: Docker | Install the package
package:
name: docker.io
state: present
force_apt_get: true
become: true
- name: Docker | Add current user to docker group
user:
name: "{{ ansible_user }}"
groups: docker
append: yes
become: true
Filosofia e práticas a serem implementas;
A aplicação impactam duas áreas Desenvolvimento(Dev) e Operação(Ops);
Sua aplicação envolve o negócio, pessoas e tecnologia;
A adoção DevOps
não resolverá problemas do projeto;
A adoção Devops
fará com que os problemas sejam expostos;
DevOps
não é Jenkins;
DevOps
não é um cargo;
Seu maior valor será adquirido com equipes que seguem metodologias ágeis;
Longo processo pra implantação e entrega;
Falta de automação de processos no CDS;
Demora na identificação e resolução de problemas.
Automação
Automação leva a consistência
Automação do processo de build;
Automação de verificações de qualidade;
Testes unitários;
Testes funcionais;
Testes de integração;
Testes de regressão;
Automação do processo de release;
Automação de verificações de acessibilidade;
Automação do processo de gerenciamento de configuração;
Automação do processo de deploy.
Automação do monitoramento;
Possuem objetivos diferentes, quase opostos;
Desenvolvimento - Liberação de artefatos de maneira rápida e constante;
Operação - Não são favoráveis a mudança, pois introduzem riscos alterando a estabilidade;
O Desenvolvimento quebra a estabilidade da Operação;
A operação impede a implantação de um artefato do desenvolvimento.
O trabalho dos Devs e Ops são caixas-preta mutualmente;
Dev
e Ops
compartilham objetivos e métricas;
Envolver os dois times com o objetivo da implantação da aplicação;
Alcançar o cumprimento de prazos e o time to market;
Liberação de pequenas frações testadas exaustivamente;
Minimizar problemas da entrega e implantação;
Recuperação rápida em caso de falhas;
Integração Contínua;
Qualidade Contínua;
Entrega Contínua;
Implantação Contínua;
Monitoramento Contínuo.
Dev
e Ops
trabalham juntos pra alcançar a estabilidade e rapidez das entregas;
Processo de desenvolvimento estável e reproduzível;
Qualidade
Segue os mesmos princípios que o DevOps
Acrescenta verificações de segurança ao processo;
O Objetivo é encontrar vulnerabilidades em qualquer estágio do CDS;
Conversation-driven
Procedimentos são traduzidos em comandos;
Os comandos são orquestrados por um robô;
Comumente utilizado em ferramentas como Slack
, HipChat
, IRC
;
Utiliza um robô que monitorará as conversas(Hubot);
Os comandos executarão:
Ações, que serão traduzidos para procedimentos;
Ações, que trarão informações.
Aumenta a colaboração/integração no desenvolvimento do produto;
Aumenta o compatilhamento de informações;
Aumenta a visibilidade e monitoramento de pontos críticos;
Aumenta o conhecimento da equipe sobre o que está sendo desenvolvido;
Aumenta a automação;
Aumenta a velocidade de ações e execuções de instruções;
Aumenta a segurança;
Log automático de ações e diálogos;
Redução de e-mails
Compartilhar informações e problemas;
Velocidade de feedbacks;
Automação de tarefas;
É uma alternativa ao REST(Representational State Transfer);
Especificação criada e utilizada pelo Facebook;
Possui diversas implementações;
Passa a responsabilidade para o frontend.
Representa uma entidade do sistema;
Geralmente mapeado a um Domínio/Modelo;
Onde serão listados todos os campos de uma entidade consumível;
É a model
do HTTP.
Representa uma consulta aos tipos existentes;
Onde serão definidas as relações entre os Types
;
Cada field
deve ser resolvido;
Podem ser filtrados utilizando argumentos;
Query
→ Field
→ Resolver
Onde as modificações aos Types
serão persistidas;
Agrupa as operações POST
, PUT
e DELETE
do HTTP(REST
);
Possui ligação direta a um Type
;
Agrupa Types
, Queries
e Mutations
disponíveis;
Funciona como um contrato de todas os elementos disponíveis;
Amazon Web Service
Google Cloud
Microsoft Azure
Habilidade de proteger informações, sistemas e ativos enquanto entrega valor ao negócio, enquanto se avalia e mitiga os riscos.
Habilidade de executar sistemas e entregar valor ao negócio enquanto mantêm o custo-benefício.
The ability of a system to recover from infrastructure or service disruptions, dynamically acquire computing resources to meet demand, and mitigate disruptions such as misconfigurations or transient network issues.
The ability to run and monitor systems to deliver business value and to continually improve supporting processes and procedures.
The ability to use computing resources efficiently to meet system requirements, and to maintain that efficiency as demand changes and technologies evolve.