Nextcloud en Kubernetes: descubre cómo instalarlo
Si quieres configurar Nextcloud en Kubernetes, es recomendable que utilices S3 como backend de almacenamiento y MariaDB como base de datos. Puedes mejorar el rendimiento con algunos cambios en la configuración.
Combinar Nextcloud y Kubernetes vale la pena
Combinar Nextcloud y Kubernetes con S3 como backend de almacenamiento es en muchos casos una solución prometedora para el sector privado y empresarial. El software de nube no comercial es adecuado tanto para trabajar con servidores locales como con hosts externos y destaca en comparación con numerosas alternativas a Nextcloud por una excelente arquitectura de seguridad. Kubernetes es un sistema de gestión de aplicaciones en contenedores de código abierto y puede utilizarse tanto localmente como para computación en la nube. Este sistema es considerado extremadamente flexible, altamente escalable y muy fiable. Te mostramos cómo configurar Nextcloud en Kubernetes.
¿Quieres utilizar Nextcloud con Docker? En ese caso, echa un vistazo al artículo de nuestra guía. En ella también hablamos de la instalación de Nextcloud en Ubuntu 22.04.
¿Qué requisitos deben cumplirse?
Antes de que puedas comenzar a configurar Nextcloud en Kubernetes, es necesario cumplir con algunos requisitos. Necesitarás suficiente almacenamiento y ya deberías haber creado un clúster de Kubernetes. Puedes crearlo en tu ordenador o utilizar un almacenamiento en la nube, dependiendo de los recursos que necesites o tengas disponibles. También debes haber configurado el gestor de paquetes Helm para Kubernetes. Si ya has cumplido estos requisitos, puedes comenzar con los pasos individuales.
Instalar Nextcloud en Kubernetes: los pasos más importantes
Ahora que están sentadas las bases necesarias, puedes comenzar a configurar la combinación de Nextcloud y Kubernetes. Hemos resumido los pasos más importantes a continuación para que puedas hacerlo sin problemas.
Configurar DNS
El primer paso es crear un registro A para un subdominio que pueda dirigirse a la dirección IP deseada. Si estás utilizando una solución local, tu dirección IP pública será el destino correcto; de lo contrario, proporciona la IP de tu servicio en la nube. Los pasos necesarios para ello pueden variar un poco dependiendo del proveedor de DNS que se esté usando.
Añadir y actualizar Helm
Para preparar los recursos para Kubernetes, se utiliza el gestor de paquetes mencionado antes: Helm. Asegúrate de tenerlo instalado en tu dispositivo y de estar conectado a tu clúster de Kubernetes. Si todo está configurado, añade el repositorio de Helm y actualízalo con los siguientes dos comandos:
helm repo add nextcloud https://nextcloud.github.io/helm/
helm repo update
shellCrear values.yaml
Crea ahora un nuevo Helm chart utilizando el siguiente comando:
nano values.yaml
shellDespués, añade las siguientes especificaciones en este archivo.
Configurar los Cronjobs
En primer lugar, define un límite de tiempo para los Cronjobs. En sistemas operativos similares a Unix Estas, estos son tareas que se ejecutan automáticamente en segundo plano y se repiten. En el caso de Nextcloud en Kubernetes, se trata principalmente de labores de mantenimiento. En el ejemplo, se indica que se ejecuten cada cinco minutos. Sin embargo, especialmente con conjuntos de datos más grandes, puede ser recomendable realizar el mantenimiento con mayor frecuencia. Este es el código correspondiente:
cronjob:
annotations: {}
curlInsecure: false
enabled: true
failedJobsHistoryLimit: 5
image: {}
schedule: '*/5* *** '
successfulJobsHistoryLimit: 2
shellDesactivar el HPA
Ahora desactiva el HPA (Horizontal Pod Autoscaler). Este escalador ajusta de manera automática el número de pods. Si estás utilizando ReadWriteOnce para Nextcloud y deseas controlar la escalabilidad, deberías desactivar el HPA y centrarte en un solo pod. Esta es una solución mucho más conveniente si solo algunos usuarios quieren acceder a los datos. El código se escribe así:
hpa:
cputhreshold: 60
enabled: false
maxPods: 10
minPods: 1
shellSobrescribir la etiqueta de la imagen
Para asegurarte de que se tenga en cuenta la versión actual de Helm, sobrescribe la etiqueta de la imagen usando este código:
image:
repositor: nextcloud
tag: 28.0.2-apache
pullPolicy: IfNotPresent
shellAhora se selecciona la versión 28.0.2 o una más reciente.
Elegir una base de datos
Al elegir tu base de datos, tienes tres opciones: MariaDB, PostgreSQL o SQLite. Para el ejemplo, se ha optado por MariaDB. Configura esta base de datos de la manera descrita a continuación y desactiva los otros dos sistemas.
internalDatabase:
enabled: false
mariadb:
db:
name: nextcloud
password: db-password
user: nextcloud
enabled: true
master:
persistence:
accessMode: ReadWriteOnce
enabled: true
size: 8Gi
replication:
enabled: false
rootUser:
password: root-db-password
forcePassword: true
postgresql:
enabled: false
shellMonitoreo para métricas
Si quieres hacer un seguimiento con Prometheus o Grafana, puedes añadir el siguiente código de manera opcional:
metrics:
enabled: true
https: false
image:
pullPolicy: IfNotPresent
repository: xperimental/nextcloud-exporter
tag: v0.3.0
replicaCount: 1
service:
annotations:
prometheus.io/port: '9205'
prometheus.io/scrape: 'true'
labels: {}
type: ClusterIP
timeout: 5s
shellPermitir archivos de configuración personalizados
Por defecto, Nextcloud en Kubernetes utiliza un archivo llamado config.php para la configuración. Si deseas simplificar o hacer más flexible esta configuración, puedes utilizar tus propios archivos de configuración. Aquí tienes el código necesario para hacerlo:
nextcloud:
configs:
custom.config.php: |-
<?php
$CONFIG = array (
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://drive.example.com',
'filelocking.enabled' => 'true',
'loglevel' => '2',
'enable_previews' => true,
'trusted_domains' =>
[
'nextcloud',
'drive.example.com'
]
);
shellPara hacerlo, simplemente tienes que reemplazar el marcador de posición “example.com” con tu propio dominio.
Configurar Redis
El siguiente archivo de configuración personalizado se implementará para mejorar el almacenamiento en caché utilizando Redis. Helm instala Redis por defecto sin protección de contraseña, por lo que es recomendable añadir una capa adicional de seguridad para evitar problemas futuros al iniciar sesión. Para ello, se puede utilizar el siguiente código para ello:
redis.config.php: |-
<?php
$CONFIG = array (
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => getenv('REDIS_HOST'),
'port' => getenv('REDIS_HOST_PORT') ?: 6379,
'password' => getenv('your-password-for-redis')
)
);
shellConfigurar el backend de almacenamiento
El último archivo de configuración se añade para el backend de almacenamiento S3. A continuación, se muestra cómo se integra en el código:
s3.config.php: |-
<?php
$CONFIG = array (
'objectstore' => array(
'class' => '\\OC\\Files\\ObjectStore\\S3',
'arguments' => array(
'bucket' => 'bucket-name',
'autocreate' => true,
'key' => 's3-access-key',
'secret' => 's3-secret-key',
'region' => 's3-region',
'hostname' => 's3-endpoint',
'use_ssl' => true,
'use_path_style' => true
)
)
);
shellDesactivar la configuración de Redis
Como anteriormente sobrescribiste la configuración predeterminada de Redis, ahora debes desactivarla para evitar errores. El código adecuado para ello es el siguiente:
defaultConfigs:
.htaccess: true
apache-pretty-urls.config.php: true
apcu.config.php: true
apps.config.php: true
autoconfig.php: false
redis.config.php: false
smtp.config.php: true
shellDefinir host, administrador y contraseña
Ahora, define el host, el administrador y la contraseña correspondientes para utilizar Nextcloud en Kubernetes. Escribe para ello este código:
host: drive.example.com
password: your-password
username: admin-name
shellSimplemente, sustituye los marcadores de posición por tus datos.
Configurar notificaciones por correo electrónico
Tienes la opción de configurar un servicio SMTP (protocolo simple de transferencia de correo) para recibir notificaciones de Nextcloud. Si quieres activarla, utiliza el siguiente código:
mail:
domain: example.com
enabled: false
fromAddress: user
smtp:
authtype: LOGIN
host: example.com
name: username
password: your-password
port: 465
secure: ssl
shellConfiguración del disco persistente
La siguiente configuración de persistencia está destinada a los datos que Nextcloud almacena en el disco correspondiente. Esto no incluye tus datos de usuario, que se guardarán en S3 como estaba previsto.
persistence:
accessMode: ReadWriteOnce
annotations: {}
enabled: true
size: 8Gi
shellProtección con contraseña para Redis
Es recomendable proteger Redis con una contraseña, lo cual también ayuda a prevenir errores de autenticación. Para ello, sigue el siguiente código y asegúrate de reemplazar ‘your-password-for-redis’ por tu contraseña personal:
redis:
enabled: true
password: 'your-password-for-redis'
usePassword: true
shellLimitar las réplicas
Como ya has desactivado el HPA, deberías limitar el número de réplicas a 1. Esta es la instrucción que debes aplicar:
replicaCount: 1
shellInstalar Nextcloud en Kubernetes
Por último, instala Nextcloud en Kubernetes y añade MariaDB y Redis. Usa este comando:
kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell