Linux contêineres na unha (TDC Porto Alegre 2019)

Linux contêineres na unha (TDC Porto Alegre 2019)

Palestra apresentada no dia 20 de novembro de 2019 no The Developers Conference em Porto Alegre-RS. Mostramos um pouco do que são containers, histórico, diferenças dos tipos de virtualização e como que funciona o isolamento dos processos e os recursos utilizados para o tal. No final fizemos uma demonstração disponível em (https://github.com/wsilva/container-from-scratch-demo) montando contêineres usando Go lang isolando alguns namespaces e cgroups manualmente.

280fecb4f048de5ecf36bec281609ea4?s=128

Wellington F. Silva

November 30, 2019
Tweet

Transcript

  1. Linux Contêineres na Unha

  2. Wellington F. Silva contato: @_wsilva nicks: wsilva, boina, tom, fisi*

    roles: pai, tec. telecom, programador, sysadmin, instrutor, escritor, php zce, docker community leader, docker certified associate * deprecation in favor of Well
  3. Agenda • Disclaimer • O que são contêineres Linux •

    O que são Kernel Namespaces • O que são CGroups • O que são Rootfs • Demo
  4. Disclaimer Palestra inspirada nas talks da Liz Rice (@lizrice) e

    no artigo* de Julian Friedman (@doctor_julz) http://bit.ly/container-golang *
  5. Julian Friedman • Engenheiro líder do Garden (tecnologia de contêineres

    da Cloud Foundry's) • Trabalha para IBM • Defensor do Open Source
  6. Liz Rice • Especialista em segurança de contêineres na Aqua

    Security • Contribuidora Kubernetes • Evangelista Go Lang
  7. O que é DOCKER?

  8. O que é Container?

  9. “Ferramenta para virtualização no nível do Sistema Operacional.”

  10. –Wellington F. Silva “Ferramenta para virtualização no nível do Sistema

    Operacional.”
  11. Tipos de Virtualização

  12. Tipos de Virtualização • Full Virtualization

  13. Tipos de Virtualização • Full Virtualization • Partial Virtualization

  14. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization
  15. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization • OS Level Virtualization
  16. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization • OS Level Virtualization (Docker, rkt, Garden, Guardian, containerD, cri- O)
  17. Container NÃO é VM

  18. Evolução

  19. U nix / C hroot BSD FreeBSD Jails / Solaris

    Zones O penVZ Parallels C groups Process C ontainers AIX / W pars LXC D ocker, rkt, cloud foundry, C ontainerD 1982 2000 2005 2006 2007 2008 >= 2013
  20. Como Funciona?

  21. PROCESSOS + KERNEL NAMESPACES + CGROUPS + ROOTFS

  22. PROCESSOS

  23. PROCESSOS Aqueles que matamos com kill -9

  24. Processos • Processo Linux com ID atribuído (PID)

  25. Processos • Processo Linux com ID atribuído (PID) • Podem

    ser listados (com ps) dentro do contêiner ou fora (no host)
  26. Processos • Processo Linux com ID atribuído (PID) • Podem

    ser listados (com ps) dentro do contêiner ou fora, no host • Dentro do contêiner o PID=1, fora (no host) vai ter valor alto
  27. KERNEL NAMESPACES

  28. KERNEL NAMESPACES Tudo aquilo que o processo pode "ver"

  29. Kernel Namespaces • IPC - Interprocess communication

  30. Kernel Namespaces • IPC - Interprocess communication • PID -

    Processos
  31. Kernel Namespaces • IPC - Interprocess communication • PID -

    Processos • NET- Rede
  32. Kernel Namespaces • IPC - Interprocess communication • PID -

    Processos • NET- Rede • UTS - Unix timesharing system
  33. Kernel Namespaces • IPC - interprocess communication • PID -

    Processos • NET- rede • UTS - Unix timesharing system • USER - Usuários e grupos
  34. Kernel Namespaces • IPC - interprocess communication • PID -

    Processos • NET- rede • UTS - Unix timesharing system • USER - Usuários e grupos • MNT - Pontos de montagem
  35. CGROUPS

  36. CGROUPS Tudo aquilo que o processo pode "usar"

  37. CGroups • CPU

  38. CGroups • CPU • Memória

  39. CGroups • CPU • Memória • I/O em disco

  40. CGroups • CPU • Memória • I/O em disco •

    Interface de rede
  41. CGroups • CPU • Memória • I/O em disco •

    Interface de rede • Hardwares periféricos (pen drives, cameras, etc)
  42. ROOTFS Onde o processo vai rodar

  43. Rootfs • Filesystem é uma hierarquia de diretórios

  44. Rootfs • Filesystem é uma hierarquia de diretórios • Rootfs

    é o filesystem base onde os demais sistemas de arquivos são montados
  45. Rootfs • Filesystem é uma hierarquia de diretórios • Rootfs

    é o filesystem base onde os demais sistemas de arquivos são montados • Em linhas gerais é o / (barra) de uma distribuição Linux
  46. Resumo • Processo (é o que roda a aplicação) •

    CGroups e Namespaces (como o processo vai rodar) • Rootfs (onde o processo vai rodar)
  47. –Linus Torvalds “Talk is cheap. Show me the code.”

  48. Demo https://github.com/wsilva/container-from-scratch-demo

  49. Valeu =) Slides em https://speakerdeck.com/wsilva/ *