Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPCommunitySummit2020.pdf

Avatar for Gustavo Antão Gustavo Antão
September 08, 2020

 PHPCommunitySummit2020.pdf

Construindo a imagem de uma app PHP para produção no Kubernetes

Avatar for Gustavo Antão

Gustavo Antão

September 08, 2020
Tweet

Other Decks in Technology

Transcript

  1. Construindo a imagem de uma app PHP para produção no

    Kubernetes Porque é importante se preocupar com a otimização das imagens antes de ir para produção.
  2. Gustavo Antão Sysadmin Linux desde 1999, há cerca de 2

    anos faço parte do time de SRE da Tray. Atualmente tenho focado estudos e trabalho no mundo dos containers.
  3. O que é um contêiner? Um conteiner ou contentor, é

    uma unidade de acondicionamento e transporte auto contida. • Independente • Garante o isolamento do seu conteúdo • Possui formato padronizado • Otimiza utilização de espaço • (Trans)Portável
  4. O que são containers Linux? Linux Containers são um tipo

    de virtualização a nível de sistema operacional, ou seja, não há virtualização de hardware. Essa tecnologia trabalha utilizando recursos do Kernel do Linux como cgroups e namespaces para entregar um isolamento a nível de S.O. de forma que os arquivos e processos contidos nesse isolamento não interferem no sistema hospedeiro ou em outros containers.
  5. O que é o K8S? O que é o Kubernetes

    O Kubernetes é uma plataforma portável, extensível e open-source para o gerenciamento de serviços e cargas de trabalho “conteinerizadas”, que facilita tanto a configuração declarativa quanto a automação. Tem um ecossistema grande e em rápido crescimento, Serviços Kubernetes, suporte e ferramentas estão amplamente disponíveis.* Fonte: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ * Tradução livre
  6. Quem disse? Kubertenes Best Practices - Webserie do Google Cloud

    Platform. https://youtu.be/wGz_cbtCiEA ?list=PLIivdWyY5sqL3xfXz5xJv wzFW_tlQB_GB
  7. Porque utilizar imagens menores? Control Plane Worker Node Worker Node

    Worker Node Worker Node Worker Node Worker Node Cada Worker Node tem que fazer o pull da imagem do container. A quantidade de Worker Nodes no seu cluster será a quantidade de pulls feitos na imagem.
  8. Imagem Oficial - Base alpine docker pull php:7.4.9-fpm-alpine Imagem Distro

    Tamanho php:7.4.9-fpm Debian 405MB php:7.4.9-fpm-alpine Alpine 82MB Quase 5 vezes menor
  9. Adicionando extensões • Mbstring • Zip • Intl • GD

    • Imap • XML • Mysqli • Json • Bcmath • Bzip2 • PDO • Ldap
  10. Resultado Imagem Distro Tamanho php:7.4.9-fpm Debian 405MB php:7.4.9-fpm-alpine Alpine 82MB

    php-7.4.9-oficial-extensions Debian 490MB php-7.4.9-alpine-extensions Alpine 242MB
  11. Builder Pattern PHP E se fizermos a instalação das extensões

    no estágio de build e depois as copiarmos para a imagem final?
  12. Resultado Imagem Distro Tamanho php:7.4.9-fpm Debian 405MB php:7.4.9-fpm-alpine Alpine 82MB

    php-7.4.9-oficial-extensions Debian 490MB php-7.4.9-alpine-extensions Alpine 242MB php-7.4.9-alpine-extensions-builder-pattern Alpine 132MB
  13. Resultado Imagem Distro Tamanho php:7.4.9-fpm Debian 405MB php:7.4.9-fpm-alpine Alpine 82MB

    php-7.4.9-oficial-extensions Debian 490MB php-7.4.9-alpine-extensions Alpine 242MB php-7.4.9-alpine-extensions-builder-pattern Alpine 132MB php-7.4.9-custom-alpine Alpine 81.4MB Imagem final 6 vezes menor que a oficial com as extensões.
  14. Análise do Trivy Imagem Tamanho Total CVE’s Low Medium High

    php-7.4-fpm-oficial-extensions 490MB 509 403 97 9 php-7.4-fpm-alpine-extensions 242MB 0 0 0 0 php-7.4-fpm-alpine-extensions-builder-pattern 132MB 0 0 0 0 php-7.4-fpm-custom-alpine 81.4MB 0 0 0 0 * https://github.com/aquasecurity/trivy
  15. Seguindo o 5º fator - Build, release, run * Imagem

    retirada do site 12factorapp.com
  16. Conclusões • Performance e Segurança • Não é complicado •

    Caso não queira ter trabalho nenhum use a imagem oficial com a tag alpine • Tente estar em conformidade com o 12factor