Proveedores¶
Que es un proveedor¶
Un proveedor es la capa que ejecuta el deploy o destroy de los servicios hacia una plataforma destino. Cada servicio en pctl.yaml declara su proveedor en provider.name.
Proveedores integrados¶
| Proveedor | Plataforma | Descripcion |
|---|---|---|
aws | AWS EKS | Kubernetes en Amazon. Deployment, Service, HPA, RBAC, PVC, imagePullSecret |
gcp | GCP GKE | Kubernetes en Google Cloud. Deployment, Service, HPA, RBAC, PVC, imagePullSecret |
docker | Docker local/SSH | Contenedores Docker en la maquina local o servidor remoto via SSH |
Deteccion de servicios¶
Cada proveedor filtra servicios por provider.name. Un stack puede mezclar proveedores:
services:
api:
provider:
name: aws
options: { ... }
worker:
provider:
name: aws
options: { ... }
monitoring:
provider:
name: docker
En este caso, el proveedor AWS procesa api y worker. El proveedor Docker procesa monitoring. GCP no procesa nada.
Archivo de estado¶
Despues de cada operacion, pctl escribe un archivo pctl.{name}.json en el directorio actual:
Contenido:
{
"my-app-api": {
"provider": "aws",
"cluster": "prod",
"namespace": "app",
"registryUrl": "507738...ecr.../api",
"image": "507738...ecr.../api:1710234567890",
"labels": {
"managed-by": "pctl",
"pctl-stack": "my-app",
"pctl-service": "my-app-api"
},
"fingerprint": "a1b2c3d4e5...",
"hasPorts": true,
"hasHpa": true,
"hasRbac": false,
"hasPvc": false,
"hasPv": false,
"hasPullSecret": false,
"pushedByPctl": true
}
}
El estado registra los recursos creados y sus flags. Se usa para:
- Saber que eliminar en
destroy - Detectar servicios removidos de la configuracion
- Calcular diffs para evitar redespliegues innecesarios
Fingerprint y diff¶
Cada servicio genera un fingerprint SHA-256 basado en:
- Toda la configuracion del servicio (excluyendo
provider) - Hash MD5 del Dockerfile (si
imageempieza con./)
Si el fingerprint no cambio desde el ultimo despliegue, el servicio se omite:
Esto evita reconstruir imagenes, subir a registries y aplicar manifiestos Kubernetes cuando nada cambio.
Labels¶
Todos los recursos creados por pctl llevan tres labels:
| Label | Valor | Ejemplo |
|---|---|---|
managed-by | pctl | pctl |
pctl-stack | {name} | my-app |
pctl-service | {name}-{service} | my-app-api |
Los labels se usan para:
- Filtrar recursos en
kubectlodocker ps - Identificar pods durante la espera de terminacion en destroy
- Asegurar que pctl solo toca recursos que el creo
Flujo de deploy¶
- Leer estado previo de
pctl.{name}.json - Para cada servicio del proveedor:
- Calcular fingerprint
- Comparar con estado previo → omitir si no cambio
- Construir imagen si es Dockerfile
- Subir a registry si aplica
- Crear/actualizar recursos (Deployment, Service, HPA, etc.)
- Guardar nuevo estado
- Detectar servicios en el estado previo que ya no estan en la configuracion → eliminarlos
- Escribir estado final
Flujo de destroy¶
- Leer estado de
pctl.{name}.json - Para cada servicio del proveedor:
- Eliminar todos los recursos asociados
- Esperar terminacion de pods/contenedores
- Limpiar namespaces vacios (Kubernetes)
- Marcar servicios como
destroyeden el estado