GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come distribuire un'istanza di WordPress su Kubernetes

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.

  1. 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.


Ubuntu
  1. Come creare un grafico del timone

  2. Come distribuire Elasticsearch su Kubernetes

  3. Come distribuire il cluster Redis su Kubernetes

  4. Come distribuire Nginx Load Balancing su Kubernetes Cluster su Ubuntu 18.04 LTS

  5. Come distribuire il tuo primo pod su un cluster Kubernetes

Come distribuire il cluster Kubernetes su AWS con Amazon EKS

Come distribuire Mattermost su Ubuntu 20.04

Come distribuire Kubernetes a nodo singolo con Microk8s su Ubuntu 20.04

Come distribuire Docker Compose Stack su Kubernetes con Kompose

Come distribuire WordPress su Jelastic Cloud

Come installare WordPress su Ubuntu 20.04