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