|
|
@@ -0,0 +1,58 @@
|
|
|
+# RegBrowser - tareas de construcción y despliegue en Kubernetes
|
|
|
+#
|
|
|
+# Uso: make -C k8s <objetivo>
|
|
|
+# Ej.: make -C k8s deploy
|
|
|
+
|
|
|
+IMAGE := harbor.reymota.es/reymota/regbrowser:latest
|
|
|
+NAMESPACE := regbrowser
|
|
|
+DEPLOY := regbrowser
|
|
|
+
|
|
|
+.DEFAULT_GOAL := help
|
|
|
+.PHONY: help build push deploy robot-secret restart status logs uninstall purge
|
|
|
+
|
|
|
+help: ## Muestra esta ayuda
|
|
|
+ @grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | \
|
|
|
+ awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-12s\033[0m %s\n", $$1, $$2}'
|
|
|
+
|
|
|
+build: ## Construye la imagen Docker desde la raíz del proyecto
|
|
|
+ docker build -t $(IMAGE) ..
|
|
|
+
|
|
|
+push: build ## Sube la imagen a Harbor
|
|
|
+ docker push $(IMAGE)
|
|
|
+
|
|
|
+robot-secret: ## Crea/renueva el pull secret del robot account. Uso: make -C k8s robot-secret TOKEN='<token>'
|
|
|
+ @test -n "$(TOKEN)" || { echo "Error: falta TOKEN. Uso: make -C k8s robot-secret TOKEN='<token>'"; exit 1; }
|
|
|
+ kubectl create secret docker-registry myregistrykey \
|
|
|
+ --docker-server=harbor.reymota.es \
|
|
|
+ --docker-username='robot$$reymota+regbrowser-pull' \
|
|
|
+ --docker-password='$(TOKEN)' \
|
|
|
+ -n $(NAMESPACE) --dry-run=client -o yaml | kubectl apply -f -
|
|
|
+ kubectl rollout restart deploy/$(DEPLOY) -n $(NAMESPACE)
|
|
|
+ kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
|
|
|
+
|
|
|
+deploy: ## Aplica los manifiestos y espera a que esté disponible
|
|
|
+ kubectl apply -f namespace.yaml
|
|
|
+ @if ! kubectl get secret myregistrykey -n $(NAMESPACE) >/dev/null 2>&1; then \
|
|
|
+ echo ">> Falta el pull secret; créalo con: make -C k8s robot-secret TOKEN='<token>'"; \
|
|
|
+ exit 1; \
|
|
|
+ fi
|
|
|
+ kubectl apply -f secrets.yaml -f pvc.yaml -f deployment.yaml -f service-ingress.yaml
|
|
|
+ kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
|
|
|
+
|
|
|
+restart: ## Reinicia el deployment (para hacer pull de la última imagen)
|
|
|
+ kubectl rollout restart deploy/$(DEPLOY) -n $(NAMESPACE)
|
|
|
+ kubectl rollout status deploy/$(DEPLOY) -n $(NAMESPACE) --timeout=180s
|
|
|
+
|
|
|
+status: ## Estado de pods, service, ingress y pvc
|
|
|
+ kubectl get pods,svc,ingress,pvc -n $(NAMESPACE)
|
|
|
+
|
|
|
+logs: ## Sigue los logs del pod
|
|
|
+ kubectl logs -f deploy/$(DEPLOY) -n $(NAMESPACE)
|
|
|
+
|
|
|
+uninstall: ## Elimina la app (deployment, service, ingress, secrets) conservando namespace y BD
|
|
|
+ kubectl delete deployment/$(DEPLOY) service/regbrowser ingress/regbrowser \
|
|
|
+ secret/myregistrykey secret/regbrowser-secrets \
|
|
|
+ -n $(NAMESPACE) --ignore-not-found
|
|
|
+
|
|
|
+purge: ## Elimina TODO incluida la BD (borra el namespace completo). ¡La BD se pierde!
|
|
|
+ kubectl delete namespace $(NAMESPACE) --ignore-not-found
|