Corre una aplicación stateless usando un Deployment
Ésta página enseña como correr una aplicación stateless usando un deployment
de Kubernetes.
Objetivos
- Crear un
deployment
de nginx. - Usar kubectl para obtener información acerca del
deployment
. - Actualizar el
deployment
.
Antes de empezar
Debes tener un cluster Kubernetes a tu dispocición, y la herramienta de línea de comandos kubectl
debe estar configurada. Si no tienes un cluster, puedes crear uno utilizando Minikube,
o puedes utilizar una de las siguientes herramientas en línea:
kubectl version
.
Creando y explorando un nginx deployment
Puedes correr una aplicación creando un deployment
de Kubernetes, y puedes describir el deployment
en un fichero YAML. Por ejemplo, el siguiente fichero YAML describe un deployment
que corre la imágen Docker nginx:1.7.9:
apiVersion: apps/v1 # Usa apps/v1beta2 para versiones anteriores a 1.9.0
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # indica al controlador que ejecute 2 pods
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
-
Crea un
deployment
basado en el fichero YAML:kubectl apply -f https://k8s.io/examples/application/deployment.yaml
-
Obtén información acerca del
deployment
:kubectl describe deployment nginx-deployment
El resultado es similar a esto:
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.7.9 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.
-
Lista los pods creados por el
deployment
:kubectl get pods -l app=nginx
El resultado es similar a esto:
NAME READY STATUS RESTARTS AGE nginx-deployment-1771418926-7o5ns 1/1 Running 0 16h nginx-deployment-1771418926-r18az 1/1 Running 0 16h
-
Muestra información acerca del pod:
kubectl describe pod <pod-name>
donde
<pod-name>
es el nombre de uno de los pods.
Actualizando el deployment
Puedes actualizar el deployment
aplicando un nuevo fichero YAML. El siguiente fichero YAML
especifica que el deployment
debería ser actualizado para usar nginx 1.8.
apiVersion: apps/v1 # Usa apps/v1beta2 para versiones anteriores a 1.9.0
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.8 # Actualiza la versión de nginx de 1.7.9 a 1.8
ports:
- containerPort: 80
-
Aplica el nuevo fichero YAML:
kubectl apply -f https://k8s.io/examples/application/deployment-update.yaml
-
Comprueba como el
deployment
crea nuevos pods con la nueva imagen mientras va eliminando los pods con la especificación antigua:kubectl get pods -l app=nginx
Escalando la aplicación aumentado el número de replicas
Puedes aumentar el número de pods en tu deployment
aplicando un nuevo fichero YAML.
El siguiente fichero YAML especifica un total de 4 replicas
, lo que significa que el deployment
debería tener cuatro pods:
apiVersion: apps/v1 # Usa apps/v1beta2 para versiones anteriores a 1.9.0
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Actualiza el número de réplicas de 2 a 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
-
Aplica el nuevo fichero YAML:
kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml
-
Verifica que el
deployment
tiene cuatro pods:kubectl get pods -l app=nginx
El resultado es similar a esto:
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
Eliminando un deployment
Elimina el deployment
por el nombre:
kubectl delete deployment nginx-deployment
ReplicationControllers
La manera preferida de crear una aplicación con múltiples instancias es usando un Deployment, el cual usa un ReplicaSet. Antes de que Deployment y ReplicaSet fueran introducidos en Kubernetes, aplicaciones con múltiples instancias eran configuradas usando un ReplicationController.
Siguientes pasos
- Aprende más acerca de Deployments.