1. Fundamentos de Kubernetes

Kubernetes Concepts: Architecture, Pods, ReplicaSets, Deployments, Node Port Service, Cluster IP Service, External Name Service, Ingress Service, Ingress SSL, Ingress & External DNS, kubetcl - Imperative, Declarative with YAML, Secrets, Init containers, Probes, Request & limits, Namespaces, Limit Range, Resource Quota, Storage Classes, Persistent Volumes, Pvc, Load Balancers, Annotations, Canary Deployments, HPA, VPA, DaemonSets, Fluentd for logs, ConfigMaps.


Aws Services Integration with ECS (Elastic Container Service)


DevOps: Aws CodeCommit, Aws CodeBuild e Aws CodePipeline


Microservices: Service Discovery, Distributed Tracing e Canary Deployments


Kubernetes - Imperative & Declarative


Imperative: kubectl, pod, replicaset, deployment, service


Declarative: Yaml & kubectl, pod, replicaset, deployment, service


Install Aws cli Install kubectl cli Install eksctl cli


2. Criação de um cluster usando Amazon Elastic Kubernetes Service (Amazon ECS)

Aws Eks cluster: Um cluster do Amazon ECS é um agrupamento lógico de tarefas ou serviços. Além de tarefas e serviços, um cluster consiste nos recursos a seguir: A capacidade da infraestrutura, que pode ser uma combinação de qualquer uma das seguintes: Instâncias do Amazon EC2 na nuvem da AWS.

Amazon Elastic Kubernetes Service: A maneira mais confiável de iniciar, executar e escalar o Kubernetes (https://aws.amazon.com/pt/eks/)

Create EKS Cluster using eksctl: https://github.com/pahud/amazon-eks-workshop/blob/master/00-getting-started/create-eks-with-eksctl.md

Create & Associate IAM OIDC Provider for our EKS Cluster: https://github.com/aws/amazon-eks-pod-identity-webhook/issues/23

3. Fundamentos de Docker

Docker é uma plataforma que facilita a criação, o gerenciamento e a distribuição de aplicativos dentro de contêineres, que são unidades leves, portáteis e isoladas do sistema. Aqui estão alguns dos fundamentos de Docker:

1. Contêineres

  - **Isolamento:** Contêineres permitem que aplicações e suas dependências sejam empacotadas juntas, garantindo que funcionem de forma consistente em qualquer ambiente.
  - **Portabilidade:** Contêineres podem ser executados em qualquer sistema que suporte Docker, seja no ambiente de desenvolvimento, testes ou produção.
  - **Eficiência:** Contêineres compartilham o kernel do sistema operacional, o que os torna mais leves e rápidos de iniciar comparado às máquinas virtuais.

2. Imagens Docker

  - **Definição:** Uma imagem Docker é um modelo de somente leitura que contém tudo o que uma aplicação precisa para rodar, incluindo o código, as bibliotecas, o sistema de arquivos, etc.
  - **Dockerfile:** Arquivo que contém as instruções para construir uma imagem. Cada comando no Dockerfile cria uma nova camada na imagem.
  - **Versionamento:** Imagens podem ser versionadas, facilitando o rastreamento de mudanças e a reprodutibilidade.

3. Registro de Imagens

  - **Docker Hub:** O repositório padrão onde as imagens Docker podem ser armazenadas, compartilhadas e distribuídas. Existem também registries privados.
  - **Push e Pull:** Você pode enviar (push) suas imagens para um registro ou baixar (pull) imagens públicas ou privadas para usar em seus contêineres.

4. Docker Engine

  - **Daemon:** O processo que gerencia os contêineres, lida com a criação e remoção deles, entre outras funções.
  - **CLI (Command-Line Interface):** A interface de linha de comando onde você executa comandos Docker, como `docker run`, `docker build`, `docker pull`, etc.

5. Volumes

  - **Persistência de Dados:** Volumes permitem que dados sejam armazenados fora dos contêineres, garantindo que os dados persistam mesmo que o contêiner seja removido.
  - **Compartilhamento de Dados:** Volumes podem ser compartilhados entre vários contêineres, permitindo que eles acessem e modifiquem os mesmos dados.

6. Networking

  - **Bridge Network:** É a configuração de rede padrão onde os contêineres em um único host podem se comunicar entre si.
  - **Host Network:** Usa a rede do host diretamente, sem isolamento de rede.
  - **Overlay Network:** Permite que contêineres em diferentes hosts se comuniquem entre si, geralmente usada em clusters Docker Swarm.

7. Orquestração

  - **Docker Compose:** Ferramenta para definir e executar aplicativos multi-contêiner. Usa um arquivo YAML (`docker-compose.yml`) para configurar os serviços.
  - **Docker Swarm:** Ferramenta de orquestração integrada ao Docker que permite a criação e gerenciamento de clusters de contêineres.

Esses fundamentos fornecem uma base sólida para começar a usar o Docker em ambientes de desenvolvimento e produção.

4.Kubernetes Fundamentals - Usando o comando kubectl

No tópico 4 vimos as diferenças dos serviços de arquitetura: Kubernetes e AWS ECS.


O comando kubectl pode criar um proxy que encaminha comunicações para dentro da rede privada que engloba todo o cluster.


kubectl get pods