--- # ConfigMap para configuración de WordPress apiVersion: v1 kind: ConfigMap metadata: name: wordpress-config labels: app: wordpress data: WORDPRESS_DB_HOST: "mysql-service" WORDPRESS_DB_NAME: "wordpress" WORDPRESS_DB_USER: "wordpress" --- # Secret para contraseñas (⚠️ En producción usar un gestor de secretos) apiVersion: v1 kind: Secret metadata: name: wordpress-secret labels: app: wordpress type: Opaque stringData: WORDPRESS_DB_PASSWORD: "wordpress_password" MYSQL_ROOT_PASSWORD: "root_password" MYSQL_PASSWORD: "wordpress_password" --- # PersistentVolumeClaim para MySQL apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc labels: app: mysql spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- # PersistentVolumeClaim para WordPress apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wordpress-pvc labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- # Deployment de MySQL apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment labels: app: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0 ports: - containerPort: 3306 env: - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER valueFrom: configMapKeyRef: name: wordpress-config key: WORDPRESS_DB_USER - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: wordpress-secret key: MYSQL_PASSWORD - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: wordpress-secret key: MYSQL_ROOT_PASSWORD volumeMounts: - name: mysql-storage mountPath: /var/lib/mysql livenessProbe: exec: command: - mysqladmin - ping - -h - localhost initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: exec: command: - mysqladmin - ping - -h - localhost initialDelaySeconds: 5 periodSeconds: 5 volumes: - name: mysql-storage persistentVolumeClaim: claimName: mysql-pvc --- # Service para MySQL apiVersion: v1 kind: Service metadata: name: mysql-service labels: app: mysql spec: ports: - port: 3306 targetPort: 3306 selector: app: mysql clusterIP: None --- # Deployment de WordPress apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-deployment labels: app: 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 valueFrom: configMapKeyRef: name: wordpress-config key: WORDPRESS_DB_HOST - name: WORDPRESS_DB_NAME valueFrom: configMapKeyRef: name: wordpress-config key: WORDPRESS_DB_NAME - name: WORDPRESS_DB_USER valueFrom: configMapKeyRef: name: wordpress-config key: WORDPRESS_DB_USER - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: wordpress-secret key: WORDPRESS_DB_PASSWORD volumeMounts: - name: wordpress-storage mountPath: /var/www/html volumes: - name: wordpress-storage persistentVolumeClaim: claimName: wordpress-pvc --- # Service para WordPress apiVersion: v1 kind: Service metadata: name: wordpress-service labels: app: wordpress spec: type: LoadBalancer ports: - port: 80 targetPort: 80 protocol: TCP selector: app: wordpress