Contents
Introduction
Kubernetes has become the de facto standard for container orchestration in production environments. Running WordPress on Kubernetes can deliver enhanced scalability, resilience and maintainability for your sites. In this article, we will explore step by step how to deploy, manage and scale WordPress on a Kubernetes cluster using industry-proven techniques.
Why Kubernetes for WordPress
- High Availability: Native self-healing, automatic pod restarts and multi-zone deployments.
- Scalability: Horizontal Pod Autoscaling to accommodate traffic spikes.
- Portability: Cloud-agnostic deployments across AWS, GCP, Azure or on-premises.
- Infrastructure as Code: Declarative manifests simplify versioning and reproducibility.
Core Kubernetes Components
- Pods: The smallest deployable units, encapsulating WordPress containers.
- Deployments: Declarative updates for Pods and ReplicaSets.
- Services: Stable network endpoints to front your WordPress Pods.
- Ingress: Rules for external HTTP(S) traffic routing.
- Persistent Volumes (PV) amp Persistent Volume Claims (PVC): Durable storage for uploads and configuration.
- ConfigMaps amp Secrets: Externalize configuration and sensitive data.
Prerequisites
- Kubernetes cluster (v1.20 ). You can use kubeadm, Minikube or a managed control plane (EKS, GKE, AKS).
- kubectl CLI configured (installation guide).
- Helm v3 (install instructions).
- Container registry (Docker Hub, ECR, GCR) for custom images if needed.
1. Setting Up Namespaces and RBAC
Segregate WordPress resources into a dedicated namespace and apply least-privilege access:
kubectl create namespace wordpress
kubectl apply -f wordpress-rbac.yaml -n wordpress
wordpress-rbac.yaml should define Roles/RoleBindings for service accounts.
2. Persistent Storage Configuration
WordPress requires persistent storage for media uploads and plugins. Define a PVC against your StorageClass:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pvc
namespace: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: standard
3. Deploying MySQL (or MariaDB)
WordPress needs a database backend. Use an official chart, or define your own:
- Add Helm repo:
helm repo add bitnami https://charts.bitnami.com/bitnami
- Install chart:
helm install wp-db bitnami/mariadb --namespace wordpress --set auth.rootPassword=secureRootPass --set auth.database=wordpress
4. Deploying WordPress via Helm
The official Bitnami WordPress chart simplifies the process:
- Review default values:
helm show values bitnami/wordpress
- Customize values.yaml:
Parameter | Description | Sample Value |
---|---|---|
wordpressUsername | Admin user name | admin |
wordpressPassword | Admin password | ChangeMe123! |
persistence.storageClass | PVC storage class | standard |
- Install the chart:
helm install wp-site bitnami/wordpress --namespace wordpress --values values.yaml
5. Exposing WordPress Externally
Leverage an Ingress controller (e.g., NGINX Ingress) for HTTP(S) routing:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wp-ingress
namespace: wordpress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: wordpress.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wp-site
port:
number: 80
tls:
- hosts:
- wordpress.example.com
secretName: tls-secret
6. Scaling and Auto-healing
- Horizontal Pod Autoscaling:
kubectl autoscale deployment wp-site --cpu-percent=50 --min=2 --max=5 -n wordpress
- Readiness amp Liveness Probes: Ensure Pods are healthy and traffic is only routed to ready instances.
7. Monitoring amp Logging
- Metrics Server: Required for autoscaling (Metrics Server).
- Prometheus amp Grafana: Track performance and visualize metrics (Prometheus).
- ELK/EFK Stack: Centralized logging with Elasticsearch, Fluentd and Kibana.
8. Best Practices
- Immutable Images: Build and tag images with CI/CD pipelines.
- Secrets Management: Use sealed-secrets or Vault for sensitive data.
- Resource Quotas: Prevent “noisy neighbor” issues by limiting CPU/memory per namespace.
- Network Policies: Restrict traffic between Pods to enforce security.
9. Troubleshooting
- Pod Logs:
kubectl logs wp-site-xxxxx -n wordpress
- Describe Resources:
kubectl describe pod wp-site-xxxxx -n wordpress
- Events: Check cluster events for scheduling or PVC issues:
kubectl get events -n wordpress
Conclusion
Deploying WordPress on Kubernetes enhances operational agility, uptime and scalability. By following the steps above—configuring storage, databases, networking, autoscaling and monitoring—you’ll build a robust, production-grade platform. For more details, consult the official Kubernetes tutorials and the WordPress installation guide.
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |