Ce didacticiel d'exemple décrit comment déployer l'application WordPress à l'aide des Espaces vSphere dans l'environnement vSphere IaaS control plane.

Le déploiement WordPress inclut des conteneurs pour le serveur frontal WordPress et le serveur principal MySQL, ainsi que des services pour ces deux serveurs. Des objets secrets sont également requis.

Ce didacticiel utilise un objet de déploiement. Dans un environnement de production, vous utilisez généralement des ressources StatefulSets pour les conteneurs WordPress et MySQL.

Conditions requises

Déployer WordPress

Utilisez ce workflow pour déployer l'application WordPress à l'aide de Espaces vSphere.

Partie 1. Accéder à votre espace de noms

Pour accéder à votre espace de noms, procédez comme suit.

Procédure

  1. Connectez-vous au superviseur.
     kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username [email protected] 
  2. Passez à l'espace de noms vSphere.
     kubectl config use-context VSPHERE-PODS-NAMESPACE
  3. Vérifiez que la stratégie de stockage que vous avez créée, vwt-storage-policy, est disponible dans l'espace de noms en tant que classe de stockage.

Partie 2. Créer des PVC WordPress

Utilisez ces commandes pour créer des PVC WordPress.

Procédure

  1. Créez le PVC MySQL.
     kubectl apply -f mysql-pvc.yaml
  2. Créez le PVC WordPress.
     kubectl apply -f wordpress-pvc.yaml
  3. Vérifiez les PVC.
     kubectl get pvc,pv

Partie 3. Créer des secrets

Le Docker Hub public est le registre de conteneur par défaut pour Kubernetes. Docker Hub limite désormais les extractions d'images. Vous devez disposer d'un compte payant et ajouter la clé de compte au secret YAML dans le champ data.dockerconfigjson.

Procédure

  1. Créez un secret de registre Docker Hub.
     kubectl apply -f regcred.yaml
  2. Créez le secret du mot de passe mysql.
    Le mot de passe de la base de données MySQL est requis. Dans le secret, le mot de passe doit être codé en base64.
    kubectl apply -f mysql-pass.yaml
  3. Vérifiez les secrets.
    kubectl get secrets

Partie 4. Créer des services

Pour créer des services, procédez comme suit.

Procédure

  1. Créez le service MySQL.
    kubectl apply -f mysql-service.yaml
  2. Créez le service WordPress.
    kubectl apply -f wordpress-service.yaml
  3. Vérifiez les services.
    kubectl get services

Partie 5. Créer des déploiements d'espaces

Utilisez cette tâche pour créer des déploiements d'espaces.

Ce didacticiel utilise des objets de déploiement. Dans un environnement de production, vous devez utiliser StatefulSets pour les conteneurs WordPress et MySQL.

Procédure

  1. Créez le déploiement MySQL.
    kubectl apply -f mysql-deployment-vsphere-pod.yaml
    Note : Lorsqu'un Espace vSphere est créé, le système crée une machine virtuelle pour les conteneurs dans l'espace. Par défaut, la machine virtuelle a une limite de RAM de 512 Mo. Le conteneur MySQL nécessite plus de mémoire. La spécification de déploiement de l'espace mysql-deployment-vsphere-pod.yaml inclut une section qui augmente la mémoire attribuée à la machine virtuelle Espace vSphere. Si vous n'incluez pas cette section, le déploiement de l'espace échoue et renvoie une exception de mémoire insuffisante (OOM). Vous n'avez pas besoin d'augmenter la RAM lors du déploiement d'un espace MySQL sur un cluster TKG.
  2. Créez le déploiement WordPress.
    kubectl apply -f wordpress-deployment.yaml
  3. Vérifiez votre déploiement.
    kubectl get deployments	

Partie 6. Tester WordPress

Pour tester votre déploiement de WordPress, procédez comme suit.

Procédure

  1. Vérifiez que tous les objets sont créés et en cours d'exécution.
    kubectl get pv,pvc,secrets,rolebinding,services,deployments,pods
  2. Obtenez l'adresse EXTERNAL-IP auprès du service WordPress.
    kubectl get service wordpress
    
    NAME        TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
    wordpress   LoadBalancer   10.96.9.180   10.197.154.73   80:30941/TCP   87s
  3. Accédez à l'adresse EXTERNAL-IP.
  4. Configurez l'instance de WordPress.
    Nom d'utilisateur : administrator
    Mot de passe : utilisez le mot de passe fort fourni

Exemples de fichiers YAML pour le déploiement de WordPress

Utilisez ces exemples de fichiers YAML lorsque vous déployez l'application WordPress avec des Espaces vSphere.

mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: vwt-storage-policy
  resources:
    requests:
      storage: 20Gi

wordpress-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-pvc
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: vwt-storage-policy  
  resources:
    requests:
      storage: 20Gi

regcred.yaml

apiVersion: v1
kind: Secret
metadata:
  name: regcred
data:
  .dockerconfigjson: ewoJImF1dGhzIjog....zZG1KcE5WUmtXRUozWpc
type: kubernetes.io/dockerconfigjson

mysql-pass.yaml

apiVersion: v1
data:
  password: YWRtaW4=  #admin base64 encoded
kind: Secret
metadata:
  name: mysql-pass

mysql-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None

wordpress-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer

mysql-deployment-vsphere-pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        #increased resource limits required for this pod vm
        #default pod VM RAM is 512MB; MySQL container needs more 
        #without extra RAM OOM error prevents deployment
        #extra RAM not required for Kuberentes cluster
        resources:
          limits:
            memory: 1024Mi
            cpu: 1
        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-pvc
      imagePullSecrets:
      - name: regcred  

wordpress-deployment.yaml

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: wordpress-pvc
      imagePullSecrets:
      - name: regcred