Ghost con Longhorn en Kubernetes
Para este tutorial necesitamos tener instalado Longhorn en nuestro cluster de Kubernetes, ya que lo usaremos para hacer persistentes los datos de Ghost como por ejemplo: los posts, las imágenes, la base de datos, etc.
Si todavía no tienes Longhorn instalado puedes instalarlo siguiendo el siguiente tutorial:
Instalación de Ghost
Para instalarlo es muy sencillo, simplemente creamos un archivo ghost.yaml y le pegamos el contenido del bloque de código siguiente:
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ghost
namespace: ghost
spec:
storageClassName: longhorn
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ghost
namespace: ghost
labels:
app: ghost
tier: frontend
spec:
replicas: 1
selector:
matchLabels:
app: ghost
tier: frontend
template:
metadata:
namespace: ghost
labels:
app: ghost
tier: frontend
spec:
containers:
- name: ghost
image: ghost
imagePullPolicy: Always
ports:
- containerPort: 2368
volumeMounts:
- name: content
mountPath: /var/lib/ghost/content
env:
- name: url
value: "https://byted.xyz"
volumes:
- name: content
persistentVolumeClaim:
claimName: ghost
---
apiVersion: v1
kind: Service
metadata:
name: ghost-service
spec:
type: NodePort
selector:
app: ghost
tier: frontend
ports:
- port: 2368
targetPort: 2368
# Parametro opcional
# Por defecto, el CP de Kubernetes elegira el puerto de un rango (por defecto: 30000-32767)
nodePort: 30007
Ahora solo tenemos que modificar la url (https://byted.xyz) a la url que vayáis a usar para vuestro Ghost. Y si lo véis necesario, podéis cambiar el tamaño del volumen persistente de ghost (yo lo tengo en 20GiB porque creo que es más que suficiente).
Guardamos el fichero ghost.yaml y ya solo tenemos usar kubectl para aplicar los cambios:
kubectl apply -f ghost.yaml
Una vez hecho esto se creará el PV, el PVC, el Deployment y el Service y ya podremos acceder a Ghost a través de la url: http://IP_worker:30007.
Nota: al usar volúmenes persistentes de Longhorn no podemos crear un Deployment con más de 1 réplica ya que Longhorn solo permite RWO (Read Write Once, es decir, lectura y escritura en un solo host simultáneo).