Day 4
Sumário
- 🎥 Intro Day-4 - 02:28
- 📖 O que iremos ver hoje?
- 🎥 O que é um ReplicaSet? - 06:49
- 📖 ReplicaSet
- 🎥 O Deployment e o ReplicaSet - 13:03
- 📖 O Deployment e o ReplicaSet
- 🎥 Criando o nosso ReplicaSet - 14:01
- 📖 Criando o nosso ReplicaSet
- 🎥 O que é um DaemonSet? - 04:45
- 📖 DaemonSet
- 🎥 Criando o nosso DaemonSet - 22:42
- 📖 Criando um DaemonSet
- 🎥 Porque não usamos o kubectl create agora - 02:22
- 🎥 O que são as Probes no Kubernetes? - 05:56
- 📖 As Probes do Kubernetes
- 🎥 Liveness Probe - 12:53
- 📖 Liveness Probe
- 🎥 Readiness Probe - 12:27
- 📖 Readiness Probe
- 🎥 StartUp Probe - 13:26
- 📖 StartUp Probe
- 📖 Exemplo com todas as Probes
- 🎥 Encerramento Day-4 - 02:30
Legenda
🎥 - Aula gravada
📖 - Material complementar
📝 - Atividade
Dia 4
No dia 4, você aprenderá sobre ReplicaSet, DaemonSet e Probes. Você aprenderá a criar, gerenciar e monitorar ReplicaSets e DaemonSets, além de aprender a configurar Probes para garantir a saúde dos seus containers.
Material complementar: Leitura complementar do Day-4
O que é um ReplicaSet?
O ReplicaSet é um recurso do Kubernetes que é responsável por garantir que um conjunto de pods esteja sempre em execução e disponível para os usuários. Ele é responsável por garantir que o número de réplicas de um pod esteja sempre de acordo com o desejado.
O Deployment e o ReplicaSet
O Deployment é um recurso do Kubernetes que é responsável por gerenciar a implantação de aplicações. Ele é responsável por garantir que um conjunto de pods esteja sempre em execução e disponível para os usuários. O Deployment utiliza o ReplicaSet para garantir que o número de réplicas de um pod esteja sempre de acordo com o desejado.
Criando o nosso ReplicaSet
Para criar um ReplicaSet, você precisa criar um arquivo YAML com a definição do ReplicaSet e aplicar o arquivo YAML no cluster.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-replicaset
name: nginx-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: nginx-replicaset
template:
metadata:
labels:
app: nginx-replicaset
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
Mas não é recomendado criar ReplicaSets diretamente, pois o Deployment é uma abstração mais poderosa e flexível que o ReplicaSet.
Se você alterar alguma propriedade do ReplicaSet e aplicar o arquivo YAML, os pods não serão atualizados. Para atualizar os pods, você precisa excluir o ReplicaSet e criar um novo.
O que é um DaemonSet?
O DaemonSet é um recurso do Kubernetes que é responsável por garantir que um pod esteja em execução em todos os nós do cluster. Por exemplo, você pode utilizar um DaemonSet para garantir que um pod de monitoramento esteja em execução em todos os nós do cluster.
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: nginx-daemonset
name: nginx-daemonset
spec:
selector:
matchLabels:
app: nginx-daemonset
template:
metadata:
labels:
app: nginx-daemonset
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
Se você alterar alguma propriedade do DaemonSet e aplicar o arquivo YAML, os pods vão ser atualizados automaticamente após a aplicação do arquivo YAML.
Porque não usamos o kubectl create agora
O comando kubectl create
não cria recursos do tipo ReplicaSet e DaemonSet. Para criar um ReplicaSet ou DaemonSet, você precisa utilizar o comando kubectl apply
.
kubectl create --help
# Available Commands:
# clusterrole Create a cluster role
# clusterrolebinding Create a cluster role binding for a particular cluster role
# configmap Create a config map from a local file, directory or literal value
# cronjob Create a cron job with the specified name
# deployment Create a deployment with the specified name
# ingress Create an ingress with the specified name
# job Create a job with the specified name
# namespace Create a namespace with the specified name
# poddisruptionbudget Create a pod disruption budget with the specified name
# priorityclass Create a priority class with the specified name
# quota Create a quota with the specified name
# role Create a role with single rule
# rolebinding Create a role binding for a particular role or cluster role
# secret Create a secret using specified subcommand
# service Create a service using a specified subcommand
# serviceaccount Create a service account with the specified name
# token Request a service account token
O que são as Probes no Kubernetes?
As Probes são mecanismos que o Kubernetes utiliza para verificar a saúde dos containers. Existem três tipos de Probes: Liveness Probe, Readiness Probe e StartUp Probe.
Liveness Probe
A Liveness Probe é utilizada para verificar se o container está em execução. Se o container falhar na Liveness Probe, o Kubernetes irá reiniciar o container.
Readiness Probe
A Readiness Probe é utilizada para verificar se o container está pronto para receber tráfego. Se o container falhar na Readiness Probe, o Kubernetes irá remover o container do serviço.
StartUp Probe
A StartUp Probe é utilizada para verificar se o container está pronto para receber tráfego após a inicialização. A StartUp Probe é utilizada para verificar se o container está pronto para receber tráfego após a inicialização.
Exemplo com todas as Probes
apiVersion: v1
kind: Pod
metadata:
labels:
app: liveness-probe
name: liveness-probe
spec:
containers:
- name: liveness-probe
image: nginx
livenessProbe: # Liveness Probe
httpGet: # Faz uma requisição HTTP GET para o container
path: / # Caminho da requisição
port: 80 # Porta da requisição
# tcpSocket: # Faz uma requisição TCP para o container
# port: 80 # Porta da requisição
initialDelaySeconds: 15 # Tempo para iniciar a verificação
periodSeconds: 5 # Intervalo entre as verificações
timeoutSeconds: 5 # Tempo limite para a verificação
failureThreshold: 3 # Número de falhas para reiniciar o container
readinessProbe: # Readiness Probe
exec: # Executa um comando no container
command: # Comando a ser executado
- curl
- -f
- http://localhost:80
initialDelaySeconds: 15 # Tempo para iniciar a verificação
periodSeconds: 5 # Intervalo entre as verificações
timeoutSeconds: 5 # Tempo limite para a verificação
failureThreshold: 3 # Número de falhas para remover o container do serviço
startupProbe: # StartUp Probe
tcpSocket: # Faz uma requisição TCP para o container
port: 80 # Porta da requisição
initialDelaySeconds: 15 # Tempo para iniciar a verificação
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
Desafio
Objetivos
Criar o deployment de 3 aplicações diferentes, contendo limites de recursos de CPU e memória, estrarégia de atualização e a configuração de probes.
Solução
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deployment
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: nginx-deployment
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 3
startupProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: apache-deployment
name: apache-deployment
spec:
replicas: 3
selector:
matchLabels:
app: apache-deployment
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: apache-deployment
spec:
containers:
- name: apache
image: httpd:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 3
startupProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 15
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tomcat-deployment
name: tomcat-deployment
spec:
replicas: 3
selector:
matchLabels:
app: tomcat-deployment
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: tomcat-deployment
spec:
containers:
- name: tomcat
image: tomcat:latest
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 5
timeoutSeconds: 5
failureThreshold: 3
startupProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
E rodar o comando:
kubectl apply -f deployments.yaml