Skip to main content

Wordpress

image.png

Manifiesto

# Namespace
apiVersion: v1
kind: Namespace
metadata:
  name: wordpress
---
# Secret para MariaDB
apiVersion: v1
kind: Secret
metadata:
  name: mariadb-secret
  namespace: wordpress
type: Opaque
stringData:
  mariadb-root-password: rootpass123
  mariadb-user: wordpress
  mariadb-password: wordpresspass123
---
# PVC para WordPress
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-data
  namespace: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd
  resources:
    requests:
      storage: 5Gi
---
# PVC para MariaDB
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mariadb-data
  namespace: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd
  resources:
    requests:
      storage: 5Gi
---
# MariaDB StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mariadb
  namespace: wordpress
spec:
  selector:
    matchLabels:
      app: mariadb
  serviceName: mariadb
  replicas: 1
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      containers:
        - name: mariadb
          image: mariadb:11
          env:
            - name: MARIADB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-root-password
            - name: MARIADB_DATABASE
              value: wordpress
            - name: MARIADB_USER
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-user
            - name: MARIADB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-password
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mariadb-storage
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: mariadb-storage
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: ceph-rbd
        resources:
          requests:
            storage: 5Gi
---
# MariaDB Service
apiVersion: v1
kind: Service
metadata:
  name: mariadb
  namespace: wordpress
spec:
  clusterIP: None
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: mariadb
---
# WordPress Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
        - name: wordpress
          image: wordpress:latest
          ports:
            - containerPort: 80
          env:
            - name: WORDPRESS_DB_HOST
              value: mariadb.wordpress.svc.cluster.local
            - name: WORDPRESS_DB_NAME
              value: wordpress
            - name: WORDPRESS_DB_USER
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-user
            - name: WORDPRESS_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-password
          volumeMounts:
            - name: wordpress-storage
              mountPath: /var/www/html
      volumes:
        - name: wordpress-storage
          persistentVolumeClaim:
            claimName: wordpress-data
---
# WordPress Service
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: wordpress
spec:
  selector:
    app: wordpress
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP
---
# Ingress para WordPress con TLS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress
  namespace: wordpress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-staging" # Cambia a letsencrypt-prod en producción
spec:
  tls:
    - hosts:
        - wordpress.k8s.dominio.com  # Ajusta tu dominio
      secretName: wordpress-tls
  rules:
    - host: wordpress.k8s.dominio.com # Ajusta tu dominio
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: wordpress
                port:
                  number: 80