añadido vscode
This commit is contained in:
30
vscode/deployments/vscode.yaml
Normal file
30
vscode/deployments/vscode.yaml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: vscode
|
||||||
|
namespace: vscode
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: vscode
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: vscode
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: vscode
|
||||||
|
image: xavor/vscode-custom:latest
|
||||||
|
ports:
|
||||||
|
- containerPort: 8443
|
||||||
|
env:
|
||||||
|
- name: PASSWORD
|
||||||
|
value: "Pozuelo12345"
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /home/coder/project
|
||||||
|
name: vscode-data
|
||||||
|
volumes:
|
||||||
|
- name: vscode-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: vscode-data
|
||||||
25
vscode/ingress/ingress.yaml
Normal file
25
vscode/ingress/ingress.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: vscode
|
||||||
|
namespace: vscode
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
||||||
|
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- vscode.c2et.net
|
||||||
|
secretName: vscode-tls
|
||||||
|
rules:
|
||||||
|
- host: vscode.c2et.net
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: vscode
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
6
vscode/kustomization.yaml
Normal file
6
vscode/kustomization.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- pvc/vscode-pvc.yaml
|
||||||
|
- deployments/vscode.yaml
|
||||||
|
- services/vscode.yaml
|
||||||
|
- ingress/ingress.yaml
|
||||||
4
vscode/namespace.yaml
Normal file
4
vscode/namespace.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: vscode
|
||||||
12
vscode/pvc/vscode-pvc.yaml
Normal file
12
vscode/pvc/vscode-pvc.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: vscode-data
|
||||||
|
namespace: vscode
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 5Gi
|
||||||
|
storageClassName: ceph-rbd
|
||||||
174
vscode/readme.md
Normal file
174
vscode/readme.md
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
# VS Code Server en Kubernetes
|
||||||
|
|
||||||
|
## 1) Resumen ejecutivo
|
||||||
|
|
||||||
|
Hemos desplegado un **servidor de Visual Studio Code (VS Code) dentro del clúster Kubernetes**. Esto permite a cualquier miembro autorizado del equipo **desarrollar desde el navegador**, sin instalar IDEs localmente, con el código y las herramientas **co‑localizadas junto a los servicios** del propio clúster.
|
||||||
|
|
||||||
|
**Beneficios clave**
|
||||||
|
|
||||||
|
* Acceso vía web segura (HTTPS) desde cualquier lugar.
|
||||||
|
* Misma experiencia que VS Code de escritorio (extensiones, terminal, Git, depuración).
|
||||||
|
* Entorno homogéneo para todo el equipo (misma versión, mismas herramientas, mismas extensiones).
|
||||||
|
* Menos fricción en equipos con políticas corporativas estrictas o dispositivos bloqueados.
|
||||||
|
* Cercanía al clúster → menos latencia en depuración y herramientas CLI.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2) ¿Para qué sirve?
|
||||||
|
|
||||||
|
* **Edición de código** de repositorios alojados en nuestro Git (pull/push desde el propio IDE).
|
||||||
|
* **Terminal integrada** para ejecutar `kubectl`, `helm`, `make`, `npm`, etc.
|
||||||
|
* **Depuración remota** de servicios corriendo en el clúster.
|
||||||
|
* **Formación y soporte**: un entorno único para demos, pair programming y sesiones prácticas.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3) ¿Cómo se usa (alto nivel)?
|
||||||
|
|
||||||
|
1. Navegar a: `https://code.<tu-dominio>` (tenemos Ingress + cert-manager con TLS).
|
||||||
|
2. **Autenticarse** (usuario/contraseña o SSO si lo integramos con el proveedor corporativo).
|
||||||
|
3. Abrir carpeta/proyecto: `File → Open Folder…` (o clonar con Git desde la terminal).
|
||||||
|
4. Instalar extensiones necesarias (Kubernetes, YAML, Docker, Go, Java, Python, etc.).
|
||||||
|
5. Usar la **terminal** integrada para comandos habituales (`kubectl`, `git`, etc.).
|
||||||
|
|
||||||
|
> Nota: La experiencia es equivalente a VS Code de escritorio, pero **sin instalar nada** en el equipo del usuario.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4) Arquitectura (resumen)
|
||||||
|
|
||||||
|
* **Deployment** (uno o varios pods) con la imagen de VS Code Server.
|
||||||
|
* **Service** (ClusterIP / NodePort de respaldo) + **Ingress** público `code.<tu-dominio>` con TLS (Let’s Encrypt / `ClusterIssuer`).
|
||||||
|
* **PVC** para **persistir** extensiones, configuración del usuario y cachés.
|
||||||
|
* **ConfigMap/Secret** para parámetros (password/SSO, ajustes, etc.).
|
||||||
|
|
||||||
|
Diagrama lógico (simplificado):
|
||||||
|
|
||||||
|
```
|
||||||
|
User (navegador HTTPS)
|
||||||
|
│
|
||||||
|
Ingress (nginx/haproxy) ──► Service ──► Pod VS Code Server
|
||||||
|
│
|
||||||
|
└── PVC (datos usuario / extensiones)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5) Despliegue
|
||||||
|
|
||||||
|
Repositorio con manifiestos **Kustomize**. Para (re)desplegar:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -k .
|
||||||
|
```
|
||||||
|
|
||||||
|
Estructura típica:
|
||||||
|
|
||||||
|
```
|
||||||
|
./
|
||||||
|
├─ namespace/
|
||||||
|
├─ deployment/
|
||||||
|
├─ service/
|
||||||
|
├─ ingress/
|
||||||
|
├─ pvc/
|
||||||
|
└─ kustomization.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Variables comunes (ejemplos):
|
||||||
|
|
||||||
|
* Host: `code.<tu-dominio>`
|
||||||
|
* Clase de Ingress: `nginx`
|
||||||
|
* Certificados: `letsencrypt-prod`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6) Seguridad
|
||||||
|
|
||||||
|
* **TLS** extremo a extremo (HTTPS) gestionado por cert-manager.
|
||||||
|
* **Autenticación**: contraseña fuerte por `Secret` o **SSO** (OIDC con el IdP corporativo / Keycloak / FreeIPA, etc.).
|
||||||
|
* **NetworkPolicies** (opcional) para limitar tráfico en el namespace.
|
||||||
|
* **RBAC**: acceso al namespace controlado; el pod no necesita privilegios del clúster.
|
||||||
|
* **Backups** del PVC (ver §9).
|
||||||
|
|
||||||
|
Buenas prácticas mínimas:
|
||||||
|
|
||||||
|
* Rotar credenciales/secrets.
|
||||||
|
* Activar **HSTS** en Ingress.
|
||||||
|
* Limitar tamaño de subida y tiempo de sesión si es necesario.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7) Experiencia y “maravillas” de trabajar en VS Code (en web)
|
||||||
|
|
||||||
|
* **Extensiones**: Marketplace completo (Kubernetes, ESLint, Prettier, GitLens, Python, Java, Go, etc.).
|
||||||
|
* **DevContainers (opcional)**: reproducibilidad total del entorno.
|
||||||
|
* **Live Share**: colaboración en tiempo real.
|
||||||
|
* **Remote Tunnels / SSH**: conectar a otros entornos si se requiere.
|
||||||
|
* **Terminal** multi‑shell con historial y tareas automatizadas.
|
||||||
|
* **Editor web**: todo en el navegador, sin instalaciones locales.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8) Operación diaria (rápida)
|
||||||
|
|
||||||
|
* **Login**: `https://code.<tu-dominio>`.
|
||||||
|
* **Abrir proyecto**: clonar o abrir carpeta local del contenedor.
|
||||||
|
* **Sincronizar**: `git pull / git push` desde Source Control o terminal.
|
||||||
|
* **Kubernetes**: extensiones + contexto `kubectl` ya disponible en el pod.
|
||||||
|
* **Extensiones**: instalar/actualizar según proyecto.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9) Mantenimiento y backups
|
||||||
|
|
||||||
|
* **Logs**: `kubectl logs -l app=vscode -f`.
|
||||||
|
* **Reinicio**: `kubectl rollout restart deployment/vscode`.
|
||||||
|
* **Actualización de imagen**: cambiar tag en el `Deployment` y `kubectl apply -k .`.
|
||||||
|
* **Backup del PVC**: incluir el claim en la política de copias (snapshot CSI o rsync/velero según plataforma).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10) Coste y recursos
|
||||||
|
|
||||||
|
* **CPU/RAM**: dimensionar requests/limits (p. ej. 500m–2 vCPU / 1–4 GB RAM por usuario).
|
||||||
|
* **Almacenamiento**: PVC 5–20 GB por usuario (extensiones y cachés).
|
||||||
|
* **Escalado**: múltiples réplicas (por usuario/grupo) o varios deployments por equipos.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11) Preguntas frecuentes
|
||||||
|
|
||||||
|
**¿Puedo usarlo sin instalar nada?** Sí, solo hace falta un navegador moderno.
|
||||||
|
|
||||||
|
**¿Y si mi portátil está “capado” o es poco potente?** No hay problema: el trabajo pesado ocurre en el clúster.
|
||||||
|
|
||||||
|
**¿Se integra con nuestro Git?** Sí. Puedes autenticarte con tokens/SSH y trabajar con ramas, PRs, etc.
|
||||||
|
|
||||||
|
**¿Es seguro exponerlo a Internet?** Con TLS, autenticación robusta y buenas prácticas, sí. Recomendado usar SSO corporativo y aplicar WAF/límites si es público.
|
||||||
|
|
||||||
|
**¿Qué pasa si el pod reinicia?** La configuración y extensiones persisten en el **PVC**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12) Anexo — Comandos útiles
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Desplegar/actualizar
|
||||||
|
kubectl apply -k .
|
||||||
|
|
||||||
|
# Ver recursos
|
||||||
|
kubectl get all -n <namespace>
|
||||||
|
|
||||||
|
# Logs en tiempo real
|
||||||
|
kubectl logs -l app=vscode -n <namespace> -f
|
||||||
|
|
||||||
|
# Reiniciar deployment
|
||||||
|
kubectl rollout restart deployment/vscode -n <namespace>
|
||||||
|
|
||||||
|
# Describir ingress
|
||||||
|
kubectl describe ingress vscode -n <namespace>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> **Estado actual**: Servicio desplegado y accesible por Ingress con TLS. Pendiente/En curso: integración SSO (si aplica) y política de backups del PVC.
|
||||||
12
vscode/services/vscode.yaml
Normal file
12
vscode/services/vscode.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: vscode
|
||||||
|
namespace: vscode
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: vscode
|
||||||
|
ports:
|
||||||
|
- port: 8080
|
||||||
|
targetPort: 8080
|
||||||
Reference in New Issue
Block a user