WordPress — одна из самых популярных систем управления контентом, используемых для развертывания блогов и веб-сайтов в Интернете. Она также доступна в виде Docker образа в реестре DockerHub. Вы можете использовать этот Docker-образ для создания надежной и масштабируемой платформы веб-сайта в кластере Kubernetes. Развертывание WordPress в Kubernetes поможет вам внедрить конвейер CI/CD и сократит время, необходимое для выпуска новых обновлений. Вы также можете включить горизонтальное масштабирование веб-сайта WordPress для обработки всплесков трафика.
Это руководство покажет вам, как развернуть WordPress и MySQL с Persistent Volume в кластере Kubernetes.
Предварительные требования
- Базовое понимание Kubernetes (k8s) и его объектов. Обратитесь к этому руководству за подробным обзором экосистемы Kubernetes.
- Кластер Kubernetes запущен и работает. Следуйте этому руководству, чтобы установить кластер Kubernetes на Ubuntu 20.04.
Проверка кластера Kubernetes
Перед началом работы рекомендуется проверить состояние кластера Kubernetes. Вы можете использовать команду kubectl для проверки Kubernetes.
|
1 |
kubectl get nodes |
Если все в порядке, вы должны получить следующий вывод.

Создание Secret для MySQL
Объект Secret — это объект, который позволяет хранить конфиденциальные данные, такие как пароль или ключ. В этой статье мы будем использовать Secret для хранения пароля MySQL.
Сначала создайте пароль, закодированный в base64, с помощью следующей команды.
|
1 |
echo -n 'your_secure_password' | base64 |
Вы получите свой секретный пароль в следующем выводе.
|
1 |
eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
Затем создайте файл secret.yaml для MySQL и WordPress.
|
1 |
nano secret.yaml |
Добавьте следующую конфигурацию.
|
1 2 3 4 5 6 7 |
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: eW91cl9zZWN1cmVfcGFzc3dvcmQ= |
Сохраните и закройте файл. Затем примените приведенную выше конфигурацию к кластеру Kubernetes с помощью следующей команды.
|
1 |
kubectl apply -f secret.yaml |
Вы получите следующий вывод.
|
1 |
secret/mysql-pass создан |
Создание PersistentVolume для MySQL и WordPress
Вам также потребуется создать PersistentVolume для хранения данных MySQL и WordPress.
Давайте создадим файл pvc-mysql-wp.yaml .
|
1 |
nano pvc-mysql-wp.yaml |
Добавьте следующие конфигурации.
|
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 |
Сохраните и закройте файл, когда закончите.
Затем создайте PersistentVolume для MySQL и WordPress в кластере Kubernetes с помощью следующей команды.
|
1 |
kubectl apply -f pvc-mysql-wp.yaml |
Вы должны увидеть оба PersistentVolume в следующем выводе.
|
1 2 |
persistentvolumeclaim/mysql-pv-claim создан persistentvolumeclaim/wp-pv-claim создан |
Теперь вы можете проверить оба PersistentVolume с помощью следующей команды.
|
1 |
kubectl get pv |
Вы должны увидеть следующий вывод.
|
1 2 3 |
ИМЯ ОБЪЕМ ДОСТУП РЕЖИМЫ УТИЛИЗАЦИЯ ПОЛИТИКА СТАТУС ЗАЯВКА КЛАСС ХРАНЕНИЯ ПРИЧИНА ВОЗРАСТ pvc-873a458352594103 40Gi RWO Delete Bound default/wp-pv-claim your-block-storage 3s pvc-de7d7de5e53a40e8 40Gi RWO Delete Bound default/mysql-pv-claim your-block-storage 3s |
Создание развертывания MySQL
Затем создайте файл конфигурации развертывания MySQL, чтобы загрузить Docker-образ MySQL, создать контейнер и смонтировать PersistentVolume в /var/lib/mysql.
|
1 |
nano mysql-deployment.yaml |
Добавьте следующую конфигурацию.
|
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 |
Сохраните и закройте файл, когда закончите. Затем разверните вышеуказанную конфигурацию в кластере Kubernetes.
|
1 |
kubectl apply -f mysql-deployment.yaml |
Вы должны увидеть следующий вывод.

Вы можете проверить развертывание MySQL с помощью следующей команды.
|
1 |
kubectl get deployments |
Вы должны увидеть статус развертывания MySQL в следующем выводе.

Создание развертывания WordPress
Теперь создайте файл конфигурации развертывания WordPress, чтобы загрузить образ WordPress, создать контейнер и смонтировать PersistentVolume в /var/www/html для файлов данных веб-сайта. Этот файл также создаст WORDPRESS_DB_HOST и WORDPRESS_DB_PASSWORD переменные окружения для доступа к базе данных.
|
1 |
nano wordpress-deployment.yaml |
Добавьте следующую конфигурацию.
|
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 # для версий до 1.9.0 используйте 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 |
Сохраните файл после завершения. Затем примените указанную выше конфигурацию к кластеру Kubernetes с помощью следующей команды.
|
1 |
kubectl apply -f wordpress-deployment.yaml |
В следующем выводе вы должны увидеть сообщение об успешном развертывании.
|
1 2 |
service/wordpress created deployment.apps/wordpress created |
Чтобы проверить развертывание WordPress, выполните следующую команду.
|
1 |
kubectl get deployments |
В следующем выводе вы должны увидеть статус развертывания WordPress.

Доступ к веб-интерфейсу WordPress
Для доступа к панели управления WordPress вам понадобятся внешний IP-адрес и номер порта LoadBalancer. Вы можете получить эту информацию с помощью следующей команды.
|
1 |
kubectl get svc |
В следующем выводе вы получите IP-адрес и порт LoadBalancer.
|
1 2 3 4 |
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE 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 |
Чтобы получить подробную информацию о ваших подах WordPress, выполните следующую команду.
|
1 |
kubectl describe svc wordpress |
В следующем выводе вы должны получить подробную информацию о WordPress.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Name: wordpress Namespace: default Labels: app=wordpress Annotations: <none> Selector: app=wordpress,tier=frontend Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.100.80.70 IPs: 10.100.80.70 LoadBalancer Ingress: 78.141.194.181 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 31624/TCP Endpoints: 10.244.23.66:80 Session Affinity: None External Traffic Policy: Cluster |
Теперь откройте веб-браузер и перейдите на страницу установки WordPress по URL-адресу http://78.141.194.181:3162. На следующем экране вы должны увидеть страницу установки WordPress.

Выберите язык и выполните необходимые шаги для завершения процесса установки.
Заключение
В этой статье мы объяснили, как развернуть MySQL и WordPress с постоянным томом в кластере Kubernetes. Вы также можете масштабировать развертывание WordPress в зависимости от трафика вашего сайта. Теперь вы можете использовать описанное выше развертывание в соответствии с вашими потребностями в разработке.
Кроме того, ознакомьтесь с другими руководствами по Docker и Kubernetes в нашем блоге:
Комментарии
Комментариев пока нет. Будьте первым.