Ghost con Longhorn en Kubernetes

Kubernetes 21 de abr. de 2020

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:

Almacenamiento persistente en Kubernetes con Longhorn
Para este tutorial utilizaremos la herramienta Helm en su versión 3, dado queHelm no es un componente de Kubernetes, sino una herramienta, os dejo un link ala documentación muy bien explicada: Installing HelmLearn how to install and get running with Helm.HelmHelm[https://helm.sh/docs/intro/install/…

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).

Etiquetas

Carlos Mora Clavero

Soy un estudiante al que le gusta aprender cosas nuevas en sus ratos libres sobre sistemas, hardware, programación, etc.