Executar uma Aplicação Sem Estado com um Deployment
Esta página mostra como executar uma aplicação usando um objeto Deployment do Kubernetes.
Objetivos
- Criar uma instalação do nginx com um Deployment.
- Usar o kubectl para listar informações sobre o Deployment.
- Atualizar o Deployment.
Antes de você começar
Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o minikube ou pode usar um dos seguintes ambientes:
O seu servidor Kubernetes deve estar numa versão igual ou superior a v1.9.Para verificar a versão, digite kubectl version
.
Criando e explorando uma instalação do nginx com um Deployment
Você pode executar uma aplicação criando um objeto Deployment do Kubernetes, e pode descrever um Deployment em um arquivo YAML. Por exemplo, este arquivo YAML descreve um Deployment que executa a imagem do contêiner nginx:1.14.2:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # diz ao deployment para executar 2 pods que correspondam ao modelo
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Crie um Deployment com base no arquivo YAML:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
Exiba informações sobre o Deployment:
kubectl describe deployment nginx-deployment
A saída é semelhante a esta:
Name: nginx-deployment Namespace: default CreationTimestamp: Tue, 30 Aug 2016 18:11:37 -0700 Labels: app=nginx Annotations: deployment.kubernetes.io/revision=1 Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 1 max unavailable, 1 max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.14.2 Port: 80/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-1771418926 (2/2 replicas created) No events.
Liste os Pods criados pelo Deployment:
kubectl get pods -l app=nginx
A saída é semelhante a esta:
NAME READY STATUS RESTARTS AGE nginx-deployment-1771418926-7o5ns 1/1 Running 0 16h nginx-deployment-1771418926-r18az 1/1 Running 0 16h
Exiba informações sobre um Pod:
kubectl describe pod <pod-name>
onde
<pod-name>
é o nome de um dos seus Pods.
Atualizando o Deployment
Você pode atualizar o Deployment aplicando um novo arquivo YAML. Este arquivo YAML especifica que o Deployment deve ser atualizado para usar o nginx:1.16.1.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1 # Atualiza a versão do nginx de 1.14.2 para 1.16.1
ports:
- containerPort: 80
Aplique o novo arquivo YAML:
kubectl apply -f https://k8s.io/examples/application/deployment-update.yaml
Observe o Deployment criar Pods com novos nomes e excluir os Pods antigos:
kubectl get pods -l app=nginx
Escalonando a aplicação aumentando a contagem de réplicas
Você pode aumentar o número de Pods no seu Deployment aplicando um novo arquivo YAML. Este arquivo YAML define replicas
como 4, o que especifica que o Deployment deve ter quatro Pods:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Atualiza a contagem de réplicas de 2 para 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1
ports:
- containerPort: 80
Aplique o novo arquivo YAML:
kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml
Verifique que o Deployment possui quatro Pods:
kubectl get pods -l app=nginx
A saída é semelhante a esta:
NAME READY STATUS RESTARTS AGE nginx-deployment-148880595-4zdqq 1/1 Running 0 25s nginx-deployment-148880595-6zgi1 1/1 Running 0 25s nginx-deployment-148880595-fxcez 1/1 Running 0 2m nginx-deployment-148880595-rwovn 1/1 Running 0 2m
Excluindo um Deployment
Exclua o Deployment pelo nome:
kubectl delete deployment nginx-deployment
Controladores de Replicação -- a Forma Antiga
A forma preferida de criar uma aplicação replicada é usar um Deployment, que por sua vez utiliza um ReplicaSet. Antes do Deployment e do ReplicaSet serem adicionados ao Kubernetes, aplicações replicadas eram configuradas usando um Controlador de Replicação (ReplicationController).
Próximos passos
- Saiba mais sobre objeto Deployment.