Ce tutoriel vous montre comment déployer un site WordPress et une base de données MySQL à l’aide de Minikube. Les deux applications utilisent PersistentVolumes et PersistentVolumeClaims pour stocker des données.

UNE Volume persistant (PV) est un élément de stockage du cluster qui a été provisionné manuellement par un administrateur ou provisionné dynamiquement par Kubernetes à l’aide d’un Classe de stockage. UNE Réclamation de volume persistant (PVC) est une exigence de stockage utilisateur qui peut être satisfaite par un PV. PersistentVolumes et PersistentVolumeClaims sont indépendants des cycles de vie des pods et préservent les données en redémarrant, replanifiant et même en supprimant les pods.

Avertissement: Ce déploiement n’est pas adapté aux cas d’utilisation en production car il utilise des pods WordPress et MySQL avec une seule instance. Pensez à l’utiliser Tableau des casques WordPress Déployez WordPress en production.

Noter: Les fichiers fournis dans ce didacticiel utilisent les API de déploiement GA et sont spécifiques à kubernetes version 1.9 et supérieure. Pour utiliser ce didacticiel avec une version antérieure de Kubernetes, mettez à jour la version de l’API en conséquence ou reportez-vous aux versions antérieures de ce didacticiel.

objectifs

  • Créer des réclamations de volume persistant et des volumes persistants
  • A … créer kustomization.yaml Avec
    • un générateur secret
    • Configurations des ressources MySQL
    • Configurations des ressources WordPress
  • Appliquer le répertoire de personnalisation à partir de kubectl apply -k ./
  • nettoyer

avant de commencer

Vous avez besoin d’un cluster Kubernetes et l’outil de ligne de commande kubectl doit être configuré pour communiquer avec votre cluster. Si vous n’avez pas encore de cluster, vous pouvez en utiliser un pour en créer un
Mini cube
ou vous pouvez utiliser l’un de ces terrains de jeux Kubernetes:

Entrez pour vérifier la version kubectl version. L’exemple présenté sur cette page fonctionne avec kubectl 1.14 et supérieur.

Téléchargez les fichiers de configuration suivants:

  1. mysql-deploy.yaml

  2. wordpress-deploy.yaml

Créer des réclamations de volume persistant et des volumes persistants

MySQL et WordPress ont chacun besoin d’un PersistentVolume pour stocker les données. Vos PersistentVolumeClaims sont créés lors de l’étape de provisionnement.

Un StorageClass standard est installé dans de nombreux environnements de cluster. Si aucune StorageClass n’est spécifiée dans PersistentVolumeClaim, la StorageClass standard du cluster est utilisée à la place.

Lors de la création d’un PersistentVolumeClaim, un PersistentVolume est provisionné dynamiquement en fonction de la configuration StorageClass.

Avertissement: Dans les clusters locaux, le StorageClass standard utilise le hostPath Commissions. hostPath Les volumes ne conviennent que pour le développement et les tests. Avec hostPath Volume dans lequel vivent vos données /tmp Sur le nœud, le pod est planifié et ne se déplace pas entre les nœuds. Si un pod meurt et est planifié pour un autre nœud du cluster, ou si le nœud est redémarré, les données seront perdues.

Noter: Lors de l’appel d’un cluster qui doit l’utiliser hostPath Des dispositions qui --enable-hostpath-provisioner Le drapeau doit être défini dans controller-manager Composant.

Noter: Si un cluster Kubernetes s’exécute sur Google Kubernetes Engine, veuillez suivre les instructions ces instructions.

Créer un kustomization.yaml

Ajouter un générateur de secret

UNE secret est un objet qui stocke des données sensibles telles qu’un mot de passe ou une clé. Depuis 1.14, kubectl prend en charge la gestion des objets Kubernetes à l’aide d’un fichier de personnalisation. Vous pouvez créer un secret à partir des générateurs dans kustomization.yaml.

Ajouter un générateur de secret kustomization.yaml à partir de la commande suivante. Vous devez remplacer YOUR_PASSWORD avec le mot de passe que vous souhaitez utiliser.

cat <<EOF >./kustomization.yaml
secretGenerator:
- name: mysql-pass
  literals:
  - password=YOUR_PASSWORD
EOF

Ajouter des configurations de ressources pour MySQL et WordPress

Le manifeste suivant décrit un déploiement MySQL à une seule instance. Le conteneur MySQL fournit le PersistentVolume sous / var / lib / mysql. le MYSQL_ROOT_PASSWORD La variable d’environnement définit le mot de passe de la base de données à partir du secret.

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
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

Le manifeste suivant décrit un déploiement WordPress dans une instance. Le conteneur WordPress fournit le PersistentVolume à /var/www/html pour les fichiers de données de site Web. le WORDPRESS_DB_HOST La variable d’environnement définit le nom du service MySQL défini ci-dessus et WordPress accède à la base de données via le service. le
WORDPRESS_DB_PASSWORD La variable d’environnement définit le mot de passe de la base de données à partir de la personnalisation secrète générée.

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
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: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
  1. Téléchargez le fichier de configuration pour le déploiement MySQL.

    curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
    
  2. Téléchargez le fichier de configuration WordPress.

    curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
    
  3. Ajoutez-les kustomization.yaml Déposer.

cat <<EOF >>./kustomization.yaml
resources:
  - mysql-deployment.yaml
  - wordpress-deployment.yaml
EOF

Postulez et révisez

le kustomization.yaml contient toutes les ressources pour déployer un site WordPress et une base de données MySQL. Vous pouvez appliquer l’annuaire via

Vous pouvez maintenant vérifier que tous les objets sont là.

  1. Assurez-vous que le secret est là en exécutant la commande suivante:

    La réponse devrait ressembler à ceci:

    NAME                    TYPE                                  DATA   AGE
    mysql-pass-c57bb4t7mf   Opaque                                1      9s
    
  2. Assurez-vous qu’un PersistentVolume a été provisionné dynamiquement.

    Noter: Le provisionnement et la liaison des PV peuvent prendre jusqu’à quelques minutes.

    La réponse devrait ressembler à ceci:

    NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    mysql-pv-claim   Bound     pvc-8cbd7b2e-4044-11e9-b2bb-42010a800002   20Gi       RWO            standard           77s
    wp-pv-claim      Bound     pvc-8cd0df54-4044-11e9-b2bb-42010a800002   20Gi       RWO            standard           77s
    
  3. Assurez-vous que le pod est en cours d’exécution en exécutant la commande suivante:

    Noter: L’affichage de l’état du pod peut prendre jusqu’à quelques minutes RUNNING.

    La réponse devrait ressembler à ceci:

    NAME                               READY     STATUS    RESTARTS   AGE
    wordpress-mysql-1894417608-x5dzt   1/1       Running   0          40s
    
  4. Assurez-vous que le service est en cours d’exécution en exécutant la commande suivante:

    kubectl get services wordpress
    

    La réponse devrait ressembler à ceci:

    NAME        TYPE            CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    wordpress   LoadBalancer    10.0.0.89    <pending>     80:32406/TCP   4m
    

    Noter: Minikube ne peut rendre les services disponibles que via NodePort. L’IP EXTERNE est toujours en suspens.

  5. Exécutez la commande suivante pour obtenir l’adresse IP du service WordPress:

    minikube service wordpress --url
    

    La réponse devrait ressembler à ceci:

    http://1.2.3.4:32406
    
  6. Copiez l’adresse IP et chargez la page dans votre navigateur pour afficher votre site.

    Vous devriez voir la page de configuration de WordPress similaire à la capture d’écran ci-dessous.

    WordPress init

Avertissement: Ne laissez pas votre installation WordPress sur cette page. Si un autre utilisateur le trouve, il peut configurer un site Web sur votre instance et l’utiliser pour diffuser du contenu malveillant.

Soit installez WordPress en créant un nom d’utilisateur et un mot de passe, soit supprimez votre instance.

nettoyer

  1. Exécutez la commande suivante pour supprimer vos demandes secrètes, déploiements, services et PersistentVolumeClaims:

Et après

Dernière modification le 20 juin 2020 à 12 h 45 PST: Corrigez la sortie de la commande de service WordPress (966215f88).



Source link

Recent Posts