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