WordPress è uno dei sistemi di gestione dei contenuti più popolari utilizzati per distribuire blog e siti web su internet. È anche disponibile come Docker immagine sul DockerHub registry. Puoi utilizzare questa immagine Docker per creare una piattaforma di siti web affidabile e scalabile sul cluster Kubernetes cluster. La distribuzione di WordPress su Kubernetes ti aiuterà a implementare la pipeline CI/CD e ridurrà il tempo necessario per rilasciare nuovi aggiornamenti. Puoi anche abilitare il ridimensionamento orizzontale del sito web WordPress per gestire i picchi di traffico del sito.
Questa guida ti mostrerà come distribuire WordPress e MySQL con un Persistent Volume sul cluster Kubernetes.
Prerequisiti
- Una comprensione di base di Kubernetes (k8s) e dei suoi oggetti. Fai riferimento a questa guida per una panoramica dettagliata dell'ecosistema Kubernetes.
- Un cluster Kubernetes è attivo e funzionante. Segui questo tutorial per installare il cluster Kubernetes su Ubuntu 20.04.
Verificare il cluster Kubernetes
Prima di iniziare, si consiglia di verificare lo stato del cluster Kubernetes. Puoi utilizzare il comando kubectl per verificare Kubernetes.
|
1 |
kubectl get nodes |
Se tutto è a posto, dovresti ottenere il seguente output.

Creare un Secret per MySQL
Un Secret è un oggetto che consente di memorizzare dati sensibili come una password o una chiave. In questo post, utilizzeremo Secret per memorizzare la password di MySQL.
Innanzitutto, crea una password codificata in base64 utilizzando il seguente comando.
|
1 |
echo -n 'your_secure_password' | base64 |
Otterrai la tua password segreta nel seguente output.
|
1 |
eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
Successivamente, crea un file secret.yaml per MySQL e WordPress.
|
1 |
nano secret.yaml |
Aggiungi la seguente configurazione.
|
1 2 3 4 5 6 7 |
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
Salva e chiudi il file. Quindi, applica la configurazione sopra indicata al cluster Kubernetes utilizzando il seguente comando.
|
1 |
kubectl apply -f secret.yaml |
Otterrai il seguente output.
|
1 |
secret/mysql-pass created |
Creare un PersistentVolume per MySQL e WordPress
Sarà inoltre necessario creare un PersistentVolume per memorizzare i dati di MySQL e WordPress.
Creiamo un file pvc-mysql-wp.yaml .
|
1 |
nano pvc-mysql-wp.yaml |
Aggiungi le seguenti configurazioni.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi |
Salva e chiudi il file quando hai finito.
Successivamente, crea i PersistentVolume sia per MySQL che per WordPress sul cluster Kubernetes utilizzando il seguente comando.
|
1 |
kubectl apply -f pvc-mysql-wp.yaml |
Dovresti vedere entrambi i PersistentVolume nel seguente output.
|
1 2 |
persistentvolumeclaim/mysql-pv-claim created persistentvolumeclaim/wp-pv-claim created |
Ora puoi verificare entrambi i PersistentVolume utilizzando il seguente comando.
|
1 |
kubectl get pv |
Dovresti vedere il seguente output.
|
1 2 3 |
NOME CAPACITÀ ACCESSO MODALITÀ RECUPERO POLITICA STATO RICHIESTA STORAGECLASS MOTIVO ETÀ pvc-873a458352594103 40Gi RWO Elimina Associato default/wp-pv-richiesta tuo-blocco-storage 3s pvc-de7d7de5e53a40e8 40Gi RWO Elimina Associato default/mysql-pv-richiesta tuo-blocco-storage 3s |
Crea il Deployment MySQL
Successivamente, crea un file di configurazione del deployment di MySQL per scaricare l'immagine docker di MySQL, creare un container e montare il PersistentVolume su /var/lib/mysql.
|
1 |
nano mysql-deployment.yaml |
Aggiungi la seguente configurazione.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
apiVersion: v1 kind: Service metadata: name: wordpress-mysql labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- 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.6 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 e chiudi il file quando hai finito. Quindi, distribuisci la configurazione sopra indicata nel cluster Kubernetes.
|
1 |
kubectl apply -f mysql-deployment.yaml |
Dovresti vedere il seguente output.

Puoi verificare il deployment di MySQL utilizzando il seguente comando.
|
1 |
kubectl get deployments |
Dovresti vedere lo stato del deployment di MySQL nel seguente output.

Crea il deployment di WordPress
Ora, crea un file di configurazione del deployment di WordPress per scaricare l'immagine di WordPress, creare un container e montare il PersistentVolume su /var/www/html per i file di dati del sito web. Questo file creerà anche le variabili d'ambiente WORDPRESS_DB_HOST e WORDPRESS_DB_PASSWORD per accedere al database.
|
1 |
nano wordpress-deployment.yaml |
Aggiungi la seguente configurazione.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- apiVersion: apps/v1 # per le versioni precedenti alla 1.9.0 usa apps/v1beta2 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:4.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 dopo aver terminato. Quindi, applica la configurazione sopra indicata al cluster Kubernetes utilizzando il comando seguente.
|
1 |
kubectl apply -f wordpress-deployment.yaml |
Dovresti vedere un messaggio di deployment riuscito nel seguente output.
|
1 2 |
service/wordpress creato deployment.apps/wordpress creato |
Per verificare il deployment di WordPress, esegui il comando seguente.
|
1 |
kubectl get deployments |
Dovresti vedere lo stato del deployment di WordPress nel seguente output.

Accedi all'interfaccia utente web di WordPress
Per accedere alla dashboard di WordPress, avrai bisogno dell'IP esterno e del numero di porta del LoadBalancer. Puoi recuperare queste informazioni utilizzando il comando seguente.
|
1 |
kubectl get svc |
Otterrai l'IP e la porta del LoadBalancer nel seguente output.
|
1 2 3 4 |
NOME TIPO CLUSTER-IP ESTERNO-IP PORTA(S) ETÀ kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m wordpress LoadBalancer 10.100.80.70 78.141.194.181 80:31624/TCP 3m6s wordpress-mysql ClusterIP None <none> 3306/TCP 4m14s |
Per ottenere informazioni dettagliate sui tuoi pod WordPress, esegui il comando seguente.
|
1 |
kubectl describe svc wordpress |
Dovresti ottenere informazioni dettagliate su WordPress nel seguente output.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Nome: wordpress Namespace: default Etichette: app=wordpress Annotazioni: <none> Selettore: app=wordpress,tier=frontend Tipo: LoadBalancer IP Famiglia Policy: SingleStack IP Famiglie: IPv4 IP: 10.100.80.70 IPs: 10.100.80.70 LoadBalancer Ingress: 78.141.194.181 Porta: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31624/TCP Endpoints: 10.244.23.66:80 Sessione Affinità: None Esterno Traffico Policy: Cluster |
Ora, apri il tuo browser web e accedi alla pagina di installazione di WordPress utilizzando l'URL http://78.141.194.181:3162. Dovresti vedere la pagina di installazione di WordPress nella schermata seguente.

Seleziona la tua lingua e completa i passaggi richiesti per terminare il processo di installazione.
Conclusione
In questo post, abbiamo spiegato come distribuire MySQL e WordPress con il volume persistente sul cluster Kubernetes. Puoi anche scalare il tuo deployment di WordPress in base al traffico del tuo sito web. Ora puoi utilizzare il deployment sopra indicato a seconda delle tue esigenze di sviluppo.
Inoltre, dai un'occhiata agli altri nostri tutorial incentrati su Docker e Kubernetes che puoi trovare sul nostro blog:
Commenti
Ancora nessun commento. Scrivi il primo.