-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: day-2, day-3, day-4, day-5 and day-6
- Loading branch information
nataliagranato
committed
Apr 30, 2024
1 parent
37cd112
commit db93179
Showing
15 changed files
with
639 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
# Kubernetes e Pods | ||
|
||
## O que é um Pod no Kubernetes? | ||
|
||
Um Pod é a menor e mais simples unidade no modelo de objeto do Kubernetes. Um Pod representa um processo único em um cluster e pode conter um ou mais contêineres. Os contêineres dentro de um Pod compartilham o mesmo contexto de rede e podem se comunicar entre si usando `localhost`. | ||
|
||
## Comandos Básicos do kubectl | ||
|
||
### kubectl get pods | ||
|
||
Este comando lista todos os Pods que estão atualmente em execução no cluster ou no namespace especificado. | ||
|
||
Exemplo de uso: | ||
|
||
```bash | ||
kubectl get pods | ||
``` | ||
|
||
### kubectl describe pod | ||
|
||
Este comando mostra detalhes sobre um Pod específico. | ||
|
||
Exemplo de uso: | ||
|
||
```bash | ||
kubectl describe pods <nome_do_pod> | ||
``` | ||
|
||
### Utilizando kubectl attach e kubectl exec | ||
|
||
**kubectl attach** | ||
Este comando permite que você execute um comando específico dentro de um contêiner em um Pod. | ||
|
||
Exemplo de uso: | ||
|
||
```bash | ||
kubectl exec <nome_do_pod> -- <comando> | ||
``` | ||
|
||
**kubectl exec** | ||
Este comando permite que você execute um comando específico dentro de um contêiner em um Pod. | ||
|
||
Exemplo de uso: | ||
|
||
```bash | ||
kubectl exec <nome_do_pod> -- <comando> | ||
``` | ||
|
||
## Criando um Pod com Multi-contêineres | ||
|
||
Aqui está um exemplo de um manifesto para criar um Pod com vários contêineres: | ||
|
||
```yaml | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: meu-pod-multicontainer | ||
spec: | ||
containers: | ||
- name: nginx-container | ||
image: nginx | ||
- name: busybox-container | ||
image: busybox | ||
command: ['sh', '-c', 'echo Hello, world!'] | ||
``` | ||
Para criar o Pod, salve o manifesto acima em um arquivo chamado meu-pod.yaml e execute o seguinte comando: | ||
``` | ||
kubectl apply -f meu-pod.yaml | ||
``` | ||
|
||
## Limitando Recursos de CPU e memória de um Pod | ||
|
||
Aqui está um exemplo de um manifesto para criar um Pod com limites de recursos de CPU e memória: | ||
|
||
```yaml | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: meu-pod-multicontainer | ||
spec: | ||
containers: | ||
- name: nginx-container | ||
image: nginx | ||
resources: | ||
requests: | ||
memory: "64Mi" | ||
cpu: "250m" | ||
limits: | ||
memory: "128Mi" | ||
cpu: "500m" | ||
- name: busybox-container | ||
image: busybox | ||
command: ['sh', '-c', 'echo Hello, world! && sleep infinity'] | ||
|
||
``` | ||
|
||
# Requests e Limits no Kubernetes | ||
|
||
`Requests` e `limits` são conceitos fundamentais no Kubernetes que ajudam a gerenciar o uso de recursos em um cluster. | ||
|
||
## Requests | ||
|
||
`Requests` são o que o contêiner está garantido para ter como recurso. Quando um contêiner é criado, o Kubernetes reserva a quantidade de recurso especificada na solicitação para o contêiner. Isso é usado pelo agendador do Kubernetes para decidir em qual nó colocar o Pod. Se um nó não tem recursos suficientes disponíveis para atender à solicitação do Pod, o Pod não será agendado para aquele nó. | ||
|
||
## Limits | ||
|
||
`Limits`, por outro lado, são a quantidade máxima de recurso que um contêiner pode usar. Se um contêiner excede o limite de um recurso, ele pode ser encerrado ou ter sua CPU limitada, dependendo do recurso e das configurações do cluster. | ||
|
||
A importância de definir `requests` e `limits` adequados é dupla: | ||
|
||
1. **Eficiência de recursos**: Ao definir `requests` e `limits`, você pode garantir que seus Pods estão usando os recursos de maneira eficiente, sem consumir mais do que o necessário. | ||
|
||
2. **Isolamento de recursos**: `requests` e `limits` também ajudam a evitar que um Pod monopolize todos os recursos em um nó, o que pode afetar outros Pods no mesmo nó. | ||
|
||
Portanto, é uma boa prática definir `requests` e `limits` para seus contêineres para garantir o uso eficiente dos recursos e a coexistência harmoniosa de múltiplos Pods em um único nó. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: meu-pod-multicontainer | ||
spec: | ||
containers: | ||
- name: nginx-container | ||
image: nginx | ||
- name: busybox-container | ||
image: busybox | ||
command: ['sh', '-c', 'echo Hello, world! && sleep infinity'] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: meu-pod-multicontainer | ||
spec: | ||
containers: | ||
- name: nginx-container | ||
image: nginx | ||
resources: | ||
requests: | ||
memory: "64Mi" | ||
cpu: "250m" | ||
limits: | ||
memory: "128Mi" | ||
cpu: "500m" | ||
- name: busybox-container | ||
image: busybox | ||
command: ['sh', '-c', 'echo Hello, world! && sleep infinity'] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,165 @@ | ||
# Kubernetes Deployments | ||
|
||
## O que é um Deployment? | ||
|
||
Um Deployment no Kubernetes é um objeto que pode declarar, atualizar e dimensionar aplicativos. Ele usa um Pod Template, que contém especificações para os Pods. O estado desejado é descrito no Deployment e o Controlador de Deployment muda o estado atual para o estado desejado em um ritmo controlado. | ||
|
||
## Criando um Deployment | ||
|
||
Você pode criar um Deployment através de um manifesto. Aqui está um exemplo de um manifesto de Deployment: | ||
|
||
```yaml | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: nginx-deployment | ||
spec: | ||
selector: | ||
matchLabels: | ||
app: nginx | ||
replicas: 3 | ||
template: | ||
metadata: | ||
labels: | ||
app: nginx | ||
spec: | ||
containers: | ||
- name: nginx | ||
image: nginx:1.26-bookworm | ||
ports: | ||
- containerPort: 80 | ||
``` | ||
Para criar o Deployment, você pode salvar o manifesto acima em um arquivo chamado nginx-deployment.yaml e executar o seguinte comando: | ||
```bash | ||
kubectl apply -f nginx-deployment.yaml | ||
``` | ||
|
||
### Vendo os detalhes de um Deployment | ||
|
||
Você pode ver os detalhes de um Deployment usando o comando `kubectl describe`: | ||
|
||
```bash | ||
kubectl describe deployment nginx-deployment | ||
``` | ||
|
||
### Atualizando um Deployment | ||
|
||
Você pode atualizar um Deployment alterando o manifesto e reaplicando-o com kubectl apply, ou pode usar o comando kubectl set image: | ||
|
||
```bash | ||
kubectl set image deployment/nginx-deployment nginx=nginx:1.26 | ||
``` | ||
|
||
Você também pode editar o Deployment diretamente: | ||
|
||
```bash | ||
kubectl edit deployment nginx-deployment | ||
``` | ||
|
||
E utilizar o comando `kubectl apply` para aplicar alterações. | ||
|
||
```bash | ||
kubectl apply -f nginx-deployment.yaml | ||
``` | ||
|
||
### Estratégias de atualização de um Deployment | ||
|
||
Existem duas estratégias de atualização para um Deployment: Recreate e Rolling Update. Por padrão, o Rolling Update é usado. | ||
|
||
- **Recreate**: Todos os Pods existentes são mortos antes que os novos sejam criados. Aqui está um exemplo: | ||
|
||
```yaml | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: nginx-deployment | ||
spec: | ||
strategy: | ||
type: Recreate | ||
selector: | ||
matchLabels: | ||
app: nginx | ||
replicas: 3 | ||
template: | ||
metadata: | ||
labels: | ||
app: nginx | ||
spec: | ||
containers: | ||
- name: nginx | ||
image: nginx:1.26 | ||
ports: | ||
- containerPort: 80 | ||
``` | ||
- **Rolling Update (padrão)**: O Deployment atualiza os Pods em um ritmo controlado, matando e recriando os Pods um de cada vez. Aqui está um exemplo: | ||
```yaml | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: nginx-deployment | ||
spec: | ||
strategy: | ||
type: RollingUpdate | ||
selector: | ||
matchLabels: | ||
app: nginx | ||
replicas: 3 | ||
template: | ||
metadata: | ||
labels: | ||
app: nginx | ||
spec: | ||
containers: | ||
- name: nginx | ||
image: nginx:1.26 | ||
ports: | ||
- containerPort: 80 | ||
``` | ||
### Fazendo um Rollback de um Deployment | ||
Você pode fazer rollback para uma revisão anterior de um Deployment usando o comando `kubectl rollout undo`: | ||
|
||
```bash | ||
kubectl rollout undo deployment/nginx-deployment | ||
``` | ||
|
||
### Pausando e Resumindo um Deployment | ||
|
||
Você pode pausar um Deployment para evitar que ele faça alterações nos Pods. Para pausar um Deployment, use o comando `kubectl rollout pause`: | ||
|
||
```bash | ||
kubectl rollout pause deployment/nginx-deployment | ||
``` | ||
|
||
O comando `kubectl rollout` permite que você gerencie a implantação gradual de atualizações para seus Deployments. Você pode pausar, retomar e verificar o status de um rollout, além de fazer rollback para uma revisão anterior. | ||
|
||
### Escalando um Deployment | ||
|
||
Você pode escalar um Deployment alterando o número de réplicas no manifesto e reaplicando-o com kubectl apply, ou usando o comando kubectl scale: | ||
|
||
```bash | ||
kubectl scale deployment nginx-deployment --replicas=5 | ||
``` | ||
|
||
### Verificando o ReplicaSet que o Deployment está gerenciando | ||
|
||
Você pode verificar o ReplicaSet que um Deployment está gerenciando usando o comando `kubectl get`. Aqui está um exemplo: | ||
|
||
```bash | ||
kubectl get rs -l app=nginx | ||
``` | ||
|
||
Este comando lista todos os ReplicaSets que têm a label `app=nginx`, que é a label usada no Deployment do exemplo anterior. | ||
|
||
### Excluindo um Deployment | ||
|
||
Você pode excluir um Deployment usando o comando kubectl delete: | ||
|
||
```bash | ||
kubectl delete deployment nginx-deployment | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: nginx-deployment | ||
spec: | ||
strategy: | ||
type: Recreate | ||
selector: | ||
matchLabels: | ||
app: nginx | ||
replicas: 3 | ||
template: | ||
metadata: | ||
labels: | ||
app: nginx | ||
spec: | ||
containers: | ||
- name: nginx | ||
image: nginx:1.26 | ||
ports: | ||
- containerPort: 80 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: nginx-deployment | ||
spec: | ||
strategy: | ||
type: RollingUpdate | ||
selector: | ||
matchLabels: | ||
app: nginx | ||
replicas: 3 | ||
template: | ||
metadata: | ||
labels: | ||
app: nginx | ||
spec: | ||
containers: | ||
- name: nginx | ||
image: nginx:1.26 | ||
ports: | ||
- containerPort: 80 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: nginx-deployment | ||
spec: | ||
selector: | ||
matchLabels: | ||
app: nginx | ||
replicas: 3 | ||
template: | ||
metadata: | ||
labels: | ||
app: nginx | ||
spec: | ||
containers: | ||
- name: nginx | ||
image: nginx:1.26-bookworm | ||
ports: | ||
- containerPort: 80 |
Oops, something went wrong.