Introduzione
Essendo il sistema di gestione dei contenuti più popolare a livello globale, WordPress gestisce siti Web di varie dimensioni, sia in termini di quantità di contenuti che di traffico web. L'implementazione di WordPress su Kubernetes è un modo efficiente per abilitare il ridimensionamento orizzontale di un sito Web e gestire con successo i picchi di traffico del sito Web.
Questo tutorial spiega due metodi per distribuire WordPress su Kubernetes:utilizzare i grafici Helm e creare la tua distribuzione da zero.
Prerequisiti
- Un cluster Kubernetes con kubectl
- Timone 3
- Privilegi amministrativi sul sistema
Distribuzione di WordPress su Kubernetes con un grafico Helm
I grafici Helm sono dotati di installazioni di app preconfigurate che possono essere distribuite con pochi semplici comandi.
- Aggiungi il repository contenente il grafico Helm di WordPress che desideri distribuire:
helm repo add [repo-name] [repo-address]
Il sistema conferma l'avvenuta aggiunta del repository. L'esempio utilizza il grafico Bitnami.
2. Aggiorna i repository Helm locali:
helm repo update
3. Installa la carta utilizzando il comando helm install.
helm install [release-name] [repo-address]
Attendi che il grafico venga distribuito.
4. Il servizio WordPress utilizza LoadBalancer come un modo per esporre il servizio. Se stai usando minikube, apri un'altra finestra di terminale e digita il seguente comando per emulare LoadBalancer:
minikube tunnel
5. Quando minikube visualizza In esecuzione stato, riduci a icona la finestra e torna a quella precedente.
6. Verifica la prontezza della distribuzione digitando:
kubectl get all
Il comando elenca e mostra lo stato di pod, servizi e distribuzioni.
7. Una volta che i pod e la distribuzione sono pronti, utilizza il seguente comando per esportare il SERVICE_IP
variabile d'ambiente:
export SERVICE_IP=$(kubectl get svc --namespace default wp-test-wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
8. Ora usa il comando echo per visualizzare l'indirizzo IP del servizio:
echo "WordPress URL: http://$SERVICE_IP/"
9. Digita l'indirizzo nella barra degli indirizzi del tuo browser. Viene avviata l'installazione di WordPress.
Distribuzione di WordPress su Kubernetes con volumi persistenti
Quando si distribuisce WordPress utilizzando una configurazione personalizzata, è necessario creare una serie di file YAML per WordPress e il database che verrà utilizzato dall'app. L'esempio seguente utilizza MySQL, ma puoi anche optare per MariaDB.
1. Utilizzare un editor di testo per creare il file YAML per il provisioning dell'archiviazione per il database MySQL.
nano mysql-storage.yaml
Il file definisce un volume di archiviazione persistente (PV) e rivendica tale archiviazione con PersistentVolumeClaim (PVC). L'esempio utilizza la configurazione seguente:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Salva il file ed esci.
2. Crea la configurazione di distribuzione MySQL YAML.
nano mysql-deployment.yaml
Il file di distribuzione contiene i dati relativi all'immagine del contenitore e allo storage. Il claimName
la dichiarazione in fondo dovrebbe corrispondere al nome della PVC che hai creato nel Passaggio 1 .
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
Salva il file ed esci.
3. Crea la configurazione del servizio YAML per il database.
nano mysql-service.yaml
Il file specifica la porta che WordPress utilizza per connettersi al servizio:
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
Salva il file ed esci.
4. Ora crea gli stessi file YAML per WordPress stesso. Inizia con l'allocazione dello spazio di archiviazione:
nano wordpress-storage.yaml
L'esempio utilizza la configurazione seguente:
apiVersion: v1
kind: PersistentVolume
metadata:
name: wp-pv
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Salva il file ed esci.
5. Crea il file di distribuzione:
nano wordpress-deployment.yaml
Il file fornisce l'immagine Docker e collega la distribuzione di WordPress con la PVC:
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:5.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim
Salva il file ed esci.
6. Crea il servizio YAML:
nano wordpress-service.yaml
L'esempio utilizza LoadBalancer per esporre il servizio:
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
Salva il file ed esci.
7. Crea il file kustomization.yaml, che verrà utilizzato per applicare facilmente la configurazione:
nano kustomization.yaml
Il file contiene due parti:
secretGenerator
produce il segreto Kubernetes che passa le informazioni di accesso ai contenitori.resources
la sezione elenca tutti i file che parteciperanno alla configurazione. Elenca i file che hai creato nei passaggi precedenti.
secretGenerator:
- name: mysql-pass
literals:
- password=test123
resources:
- mysql-storage.yaml
- mysql-deployment.yaml
- mysql-service.yaml
- wordpress-storage.yaml
- wordpress-deployment.yaml
- wordpress-service.yaml
Salva il file ed esci.
8. Applica i file elencati in kustomization.yaml con il seguente comando:
kubectl apply -k ./
Il sistema conferma la corretta creazione del segreto, dei servizi, dei PV, dei PVC e delle distribuzioni:
9. Verifica se i pod e le distribuzioni sono pronti:
kubectl get all
10. Se utilizzi minikube, apri un'altra finestra del terminale e avvia minikube tunnel per fornire l'emulazione del bilanciamento del carico:
minikube tunnel
Una volta che l'emulazione è in esecuzione, riduci a icona la finestra e torna a quella precedente.
11. Digita il seguente comando per esporre l'URL del servizio che utilizzerai per accedere all'istanza di WordPress distribuita:
minikube service wordpress-service --url
L'URL viene visualizzato come output del comando:
12. Copia l'URL e incollalo nel tuo browser web. Viene avviata l'installazione di WordPress.