Introdução
-Velocidade
-Importância da imutabilidade
-Configuração declarativa
-Sistemas autocorretivos
-Escalando seu serviço e suas equipes
-Desacoplamento
-Como escalar facilmente as aplicações e os clusters
-Como escalar equipes de desenvolvimento com microsserviços
-Separação de responsabilidades para consistência e escalabilidade
-Abstraindo a infraestrutura
-Eficiência
-Resumo
Criando e executando contêineres
- Imagens de contêiner
- Formato de imagem Docker
- Construindo imagens de aplicações com o Docker
- Dockerfiles
- Otimizando os tamanhos das imagens
- Segurança da imagem
- Construções de imagens em várias etapas
- Armazenando imagens em um registro remoto
- Runtime de contêineres Docker
- Executando contêineres com o Docker
- Explorando a aplicação kuard
- Limitando o uso de recursos
- Limpeza
Comandos comuns do kubectl
- Namespaces
- Contextos
- Visualizando objetos da API do Kubernetes
- Criando, atualizando e removendo objetos Kubernetes
- Usando rótulos e anotações em objetos
- Comandos de depuração
- Preenchimento automático de comandos
- Alternativas para visualizar seu cluster
Pods
- Pods no Kubernetes
- Raciocinando com Pods
- Manifesto do Pod
- Criando um Pod
- Criando um manifesto de Pod
- Executando Pods
- Listando Pods
- Detalhes sobre os Pods
- Removendo um Pod
- Acessando seu Pod
- Usando encaminhamento de portas
- Obtendo mais informações com logs
- Executando comandos em seu contêiner com exec
- Copiando arquivos de e para os contêineres
- Verificações de sanidade
- Liveness probe
- Readiness Probe
- Tipos de verificação de sanidade
- Gerenciamento de recursos
- Requisições de recursos: mínimo de recursos necessário
- Restringindo o uso de recursos com os limites
- Persistência de dados com volumes
- Usando volumes com Pods
- Maneiras diferentes de usar volumes com Pods
- Persistência de dados usando discos remotos
Rótulos e anotações
- Rótulos
- Aplicando rótulos
- Modificando rótulos
- Seletores de rótulo
- Seletores de rótulo em objetos da API
- Rótulos na arquitetura do Kubernetes
- Anotações
- Definindo as anotações
- Limpeza
Descoberta de serviços
- O que é a descoberta de serviços?
- Objeto Service
- DNS para serviços
- Verificações de readiness
- Olhando para além do cluster
- Integração com a nuvem
- Detalhes mais sofisticados
- Endpoints
- Descoberta de serviços manual
- kube-proxy e IPs de cluster
- Variáveis de ambiente do IP do cluster
- Conectando-se com outros ambientes
- Limpeza
- Balanceamento de carga HTTP com Ingress
- Especificação de Ingress versus controladores de Ingress
- Instalando o Contour
- Configurando o DNS
- Configurando um arquivo hosts local
- Usando o Ingress
- Uso mais simples possível
- Usando nomes de host
- Usando paths
- Limpeza
- Tópicos avançados e armadilhas relacionados ao Ingress
- Executando vários controladores de Ingress
- Vários objetos Ingress
- Ingress e namespaces
- Reescrita de paths
- Servindo TLS
- Implementações alternativas de Ingress
- Futuro do Ingress
ReplicaSets
- Laços de reconciliação
- Relacionando Pods e ReplicaSets
- Adotando contêineres existentes
- Deixando os contêineres em quarentena
- Design com ReplicaSets
- Especificação de um ReplicaSet
- Templates de Pod
- Rótulos
- Criando um ReplicaSet
- Inspecionando um ReplicaSet
- Encontrando um ReplicaSet a partir de um Pod
- Encontrando um conjunto de Pods para um ReplicaSet
- Escalando os ReplicaSets
- Como escalar de forma imperativa com kubectl scale
- Como escalar de forma declarativa com kubectl apply
- Escalando automaticamente um ReplicaSet
- Removendo ReplicaSets
- Deployments
- Seu primeiro deployment
- Funcionamento interno de um deployment
- Criando deployments
- Gerenciando deployments
- Atualizando deployments
- Escalando um deployment
- Atualizando uma imagem de contêiner
- Histórico de rollouts
- Estratégias de deployment
- Estratégia Recriate
- Estratégia RollingUpdate
- Rollouts mais lentos para garantir a saúde do serviço
- Removendo um deployment
- Monitorando um deployment
DaemonSets
- Escalonador de DaemonSets
- Criando DaemonSets
- Limitando os DaemonSets a nós específicos
- Adicionando rótulos em nós
- Seletores de nós
- Atualizando um DaemonSet
- Atualização contínua de um DaemonSet
- Removendo um DaemonSet
Jobs
- Objeto Job
- Padrões para Jobs
- Job one shot
- Paralelismo
- Fila de tarefas
- CronJobs
ConfigMaps e secrets
- ConfigMaps
- Criando ConfigMaps
- Usando um ConfigMap
- Secrets
- Criando secrets
- Consumindo secrets
- Registros privados do Docker
- Restrições quanto à nomenclatura
- Gerenciando ConfigMaps e secrets
- Listar, Criar e Atualizar
Controle de acesso baseado em perfis no Kubernetes
- Role-Based Access Control
- Identidade no Kubernetes
- Compreendendo os perfis e as vinculações de perfis
- Perfis e vinculações de perfis no Kubernetes
- Técnicas para gerenciar o RBAC
- Testando a autorização com o can-i
- Gerenciando o RBAC no sistema de controle de versões
- Tópicos avançados
- Agregando ClusterRoles
- Usando grupos para vinculações
Integrando soluções de armazenagem no Kubernetes
- Importando serviços externos
- Serviços sem seletores
- Limitações aos serviços externos: verificação de sanidade
- Executando singletons confiáveis
- Executando um singleton MySQL
- Provisionamento dinâmico de volume
- Armazenagem nativa do Kubernetes com StatefulSets
- Propriedades dos StatefulSets
- Replicando o MongoDB manualmente com StatefulSets
- Automatizando a criação do cluster MongoDB
- Volumes persistentes e StatefulSets
- Observação final: os liveness probes
Estendendo o Kubernetes
- O que significa estender o Kubernetes
- Pontos de extensão
- Padrões para recursos personalizados
- Somente dados
- Compiladores
- Operadores
- Por onde começar
Implantando aplicações no mundo real
- Jupyter
- Parse
- Pré-requisitos
- Construindo o parse-server
- Implantando o parse-server
- Testando o Parse
- Ghost
- Configurando o Ghost
- Redis
- Configurando o Redis
- Criando um serviço Redis
- Implantação do Redis
- Testando o nosso cluster Redis
Organizando a sua aplicação
- Princípios que devem ser seguidos
- Sistema de arquivos como fonte da verdade
- A função da revisão de código
- Flags e guardas para as funcionalidades
- Gerenciando sua aplicação no sistema de controle de versões
- Layout do sistema de arquivos
- Gerenciando versões periódicas
- Estruturando sua aplicação para desenvolvimento, testes e implantação
- Metas
- Progressão de uma release
- Parametrizando sua aplicação com templates
- Parametrizando com o Helm e com templates
- Layout do sistema de arquivos para parametrização
- Implantando sua aplicação pelo mundo
- Arquiteturas para implantação no mundo todo
- Implementando um deployment pelo mundo
- Painéis de controle e monitoração de implantações pelo mundo