deployment - nodeselector - kubernetes rollout
Cómo configurar una Implementación Multi-Pod de Kubernetes (2)
La respuesta de pagids tiene la mayoría de los conceptos básicos. Debe crear 4 Deployments
para su escenario. Cada implementación creará un ReplicaSet
que programa y supervisa la colección de PODs
para la Deployment
.
Es muy probable que cada Deployment
también requiera un Service
delante de él para tener acceso. Por lo general, creo un solo archivo yaml que tiene una Deployment
y el Service
correspondiente. Aquí hay un ejemplo para un nginx.yaml
que uso:
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
name: nginx
targetPort: 80
nodePort: 32756
selector:
app: nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginxdeployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginxcontainer
image: nginx:latest
imagePullPolicy: Always
ports:
- containerPort: 80
Aquí algunos datos adicionales para aclarar:
- Un
POD
no es una unidad escalable. UnDeployment
que programa los PODs es. - Una
Deployment
pretende representar un solo grupo de POD que cumplen un solo propósito juntos. - Puede tener muchas
Deployments
trabajando juntas en la red virtual del clúster. - Para acceder a una
Deployment
que puede consistir en muchosPODs
ejecutan en diferentes nodos, debe crear un Servicio. - Las implementaciones están destinadas a contener servicios sin estado. Si necesita almacenar un estado, debe crear
StatefulSet
lugar (por ejemplo, para un servicio de base de datos).
Me gustaría implementar un grupo de aplicaciones gestionando mi implementación a través del objeto de implementación de k8s. La documentación me tiene extremadamente confundido. Mi diseño básico tiene los siguientes componentes que se escalan de forma independiente:
- Servidor API
- Servidor de interfaz de usuario
- Redis caché
- Temporizador / Servidor de tareas programadas
Técnicamente, los 4 anteriores pertenecen a pods separados que se escalan independientemente.
Mis preguntas son:
- ¿Debo crear archivos
pod.yml
y luego hacer referencia a ellos en el archivopod.yml
o puedo un archivo de implementación también incrustar definiciones de pod? - La documentación de K8 parece implicar que la parte de
spec
de laDeployment
es equivalente a la definición de un pod. ¿Es eso correcto? ¿Qué sucede si deseo describir de forma declarativa las implementaciones de varios pods? ¿Necesito múltiples archivos deploy.yml?
Puede usar la referencia de la API de Kubernetes para la Deployment y encontrará que el campo spec
-> template
es de tipo PodTemplateSpec
junto con el comentario relacionado ( Template describe los pods que se crearán ) . Responde sus preguntas. Por supuesto, se puede encontrar una descripción más extensa en la guía del usuario de Implementación .
Para responder tu pregunta...
1) Los Pods
son administrados por la Deployment
y definirlos por separado no tiene sentido, ya que son creados a pedido por la Implementación. Tenga en cuenta que podría haber más réplicas del mismo tipo de pod.
2) Para cada una de las aplicaciones en su lista, tendría que definir una Deployment
, lo que también tiene sentido cuando se trata de diferencia de conteos de réplicas y despliegues de aplicaciones.
3) no lo ha pedido, pero está relacionado : junto con las Deployments
separadas, cada una de sus aplicaciones también necesitará un Service
dedicado para que los demás puedan acceder a él.