Ya tengo mi cluster montado, es hora de empezar a montar la web que estará al amparo de Kubernetes. El objetivo de esta SPA es que no tenga computación que el JavaScript que se ejecuta sólo sea del lado del cliente y no del servido, para eso utilizaremos otro lenguaje.
Entonces que quiero realmente ?. Quiero un contenedor para la aplicación que contenga los archivos y un servidor que las sirva, por ejemplo Nginx.
No os parece genial ?. Tenemos nuestro servidor Nginx con un volumen montado que es el que sirve. Entonces sólo necesitamos poner nuestros archios allí para servir la web
Configuración
Personalmente los pv me gusta nombrarlos con la capacidad, para luego no tener problemas a elegir alguno y demás, por lo tanto aquí tenemos hydra-nfs-bucket-18G03-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: hydra-nfs-bucket-18g03-pv
spec:
storageClassName: storage-nfs
mountOptions:
- nfsvers=4.1
capacity:
storage: 18Gi
accessModes:
- ReadWriteMany
nfs:
server: <TU-IP>
path: "/bucket/18g03"
También soy muy fan de poner cada cosa en su namespace, para tenerlo todo ordenador y poder auditarlo en el futuro
00-namespace.yaml
kind: Namespace
apiVersion: v1
metadata:
name: infra-web-spa-ns
Ahora toca el yaml que reclama el volumen 01-vpc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: infra-web-spa-pvc
labels:
app: infra-web-spa
namespace: infra-web-spa-ns
spec:
storageClassName: storage-nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 18Gi
volumeName: hydra-nfs-bucket-18g03-pv
Un deployment bastante simple y sencillo de entender, como este
apiVersion: apps/v1
kind: Deployment
metadata:
name: infra-web-spa-deployment
namespace: infra-web-spa-ns
spec:
replicas: 2
selector:
matchLabels:
app: infra-web-spa
template:
metadata:
labels:
app: infra-web-spa
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
volumeMounts:
- name: infra-web-spa-pvc
mountPath: "/usr/share/nginx/html"
volumes:
- name: infra-web-spa-pvc
persistentVolumeClaim:
claimName: infra-web-spa-pvc
Suelo tener la configuración separada, aunque según va aumentando la configuración, creo que es mejor ponerlo todo en un mismo archivo, bueno ya os contaré si eso pasa.
I por ultimo el servicio
apiVersion: v1
kind: Service
metadata:
name: web-nfs-service
namespace: infra-web-spa-ns
spec:
selector:
app: infra-web-spa
type: NodePort
ports:
- port: 80
nodePort: 30010
Llegados a este ultimo, yo he utilizado un Nodeport, para probar si todo funcionaba correctamente, pero sentiros libres de elegir lo que queráis!