Запускаем WordPress c MySQL в Kubernetes
Едва ли в мире есть более популярный движок для создания блогов и небольших сайтов, чем WordPress — около 26% всех веб-сайтов в интернете созданы на его основе. Многие хостинги включают его в список своих сервисов, а официальный docker-образ был скачан более 10 миллионов раз и является одним из 25 самых популярных образов на Docker Hub. Запустив его не просто в докере, а в Kubernetes, мы можем создать масштабируемую платформу для блога или веб-сайта: при росте нагрузки мы просто масштабируем количество реплик приложения.
Планируем архитектуру
Теория: stateless- и stateful-приложения
Перед тем как приступить к установке WordPress, нам придется вкратце рассмотреть несколько базовых понятий, связанных с хранением данных в облаках и в Kubernetes.
Stateless-приложения. Для примера возьмем два приложения — «корзину» в интернет-магазине и наш блог на WordPress. Когда мы добавляем товары в корзину (но не переходим к оплате заказа), она сохраняет все данные в cookies на нашей стороне. По завершении сессии приложение сбрасывает все данные и не хранит ничего на сервере. Когда мы снова заходим в интернет-магазин, информация о товарах считывается из нашей системы и снова отображается в корзине. Чтобы работать с покупателем, корзине не нужно получать никакую информацию с бэкенда — роль хранилища выполняет система покупателя. Такие приложения называются stateless, поскольку они не хранят информацию о своем состоянии.
Stateful-приложения. Теперь посмотрим на наш блог. Когда мы создаем новый пост или оставляем комментарий, нужно чтобы любой пользователь в любое время мог получить к ним доступ. Поэтому все данные должны храниться на стороне сервера. Когда мы переходим на ту или иную страницу, движок блога загружает имеющуюся информацию из базы данных, а если мы что-то меняем на странице — записывает изменения на сервер. Такие приложения, которые должны хранить информацию о своем состоянии для корректной работы, называются stateful. WordPress относится именно к таким приложениям.
Как будем хранить данные?
Kubernetes поддерживает оба типа приложений, но принцип их запуска различен. Stateless-приложения не требуют выделения хранилища, но наш блог — stateful, и для него нужно выделить директорию для записи и чтения данных о состоянии. В нашей инсталляции WordPress мы будем хранить данные приложения в базе данных, конкретно — в MySQL. Для запуска WordPress и MySQL потребуется выделить две директории: одну для системных данных WordPress, другую для данных сайта и информации о пользователях, хранимых в MySQL.
С этим разобрались. Но где хранить все эти данные? Рассмотрим два варианта.
- WordPress и MySQL могут хранить всю информацию внутри контейнеров, в которых они запущены. Это обеспечит сохранность данных на какое-то время, но при перезапуске пода (pod) все данные будут утеряны (по эффекту перезапустить под — это всё равно что удалить все данные на сервере). Этот вариант подходит, если вы хотите быстро протестировать работу приложений, но его точно не стоит использовать для работы в production.
- Можно хранить данные приложений вне контейнера, используя внешнее хранилище на сервере. В этом случае перезапуск пода никак не повлияет на сохранность данных и, кроме того, мы сможем делать бэкапы содержимого. Именно этот вариант мы и выберем.
Что сделать, чтобы использовать внешнее хранилище?
Чтобы работать с хранилищем в Kubernetes и, в частности, смонтировать в него WordPress и MySQL, нам необходимо сделать две вещи:
- настроить утилиту для управления хранилищем на сервере хранилища,
- обеспечить взаимодействие между этой утилитой и приложениями в Kubernetes.
Kubernetes поддерживает множество утилит для работы с хранилищем: Ceph, GlusterFS, iSCSI, NFS и др. Список всех поддерживаемых типов можно найти в официальной документации Kubernetes. Для простоты в данной статье мы будем использовать NFS.
Для работы с хранилищем Kubernetes использует абстракции PersistentVolume и PersistentVolumeClaim. Что они из себя представляют? Объект PersistentVolume (PV) управляет постоянным хранилищем в кластере. Он поддерживает различные типы внешнего хранилища, например NFS, GlusterFS, Ceph и многие другие. PersistentVolumeClaim (PVC) — это запрос на использование хранилища для конкретного приложения. В упрощенном виде их взаимодействие можно изобразить следующим образом:
Как поды обращаются к физическому хранилищу
Для работы подов с хранилищами в архитектуре Kubernetes выделена абстракция Volume. Под обращается к нему как хранилищу без учёта того, как это хранилище реализовано. С помощью volume решается две проблемы:
- сохранение данных при падении контейнера (пода),
- возможность для двух и более подов работать с общими файлами.
PersistentVolume (PV) — это Volume для работы подов с физическим хранилищем через API. PV представляет собой объект в Kubernetes, который содержит в себе информацию, как монтировать физическое хранилище и его метаданные.
PersistentVolumeClaim (PVC) — это запрос на создание PV и предоставление Storage.
План развёртывания
В процессе подготовки NFS и установки WordPress и MySQL мы выполним следующие шаги:
- Установка утилиты NFS
- Установка nfs-client-provisioner для автоматического выделения хранилища в Kubernetes.
- Создание PersistentVolumeClaim для запроса места в хранилище.
- Создание Secret для MySQL для доступа к MySQL.
- Запуск MySQL.
- Запуск WordPress.
Подготовка NFS
Для работы с NFS необходимо настроить NFS-сервер на отдельной машине и NFS-клиенты на машинах с Kubernetes.
Зайдем на машину-сервер, которую будем использовать для хранения данных, установим на нее файервол и откроем порты TCP:111, UDP: 111, TCP:2049, UDP:2049. В нашем примере мы используем CenOS 7.5. Для этого выполним команды:sudo yum install firewalld -y
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --zone=public --add-port=111/tcp --permanent
sudo firewall-cmd --zone=public --add-port=111/udp --permanent
sudo firewall-cmd --zone=public --add-port=2049/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2049/udp --permanent
sudo firewall-cmd --reload
Помимо этого, не забудьте дополнительно защитить внутренние ресурсы от доступа из интернета. Для этого закройте доступ к портам извне на уровне фаервола сети, в которой развёрнута ваша инсталляция.
После этого установим NFS-utils для работы с хранилищем:sudo yum install nfs-utils
Создадим директорию для монтирования данных на диск (/nfs) и запустим nfs-server:sudo mkdir -p /nfs
sudo chmod -R 777 /nfs
sudo systemctl enable rpcbind
sudo systemctl enable nfs-server
sudo systemctl enable nfs-lock
sudo systemctl enable nfs-idmap
sudo systemctl start rpcbind
sudo systemctl start nfs-server
sudo systemctl start nfs-lock
sudo systemctl start nfs-idmap
Теперь добавим директорию NFS в частную подсеть Kubernetes:sudo vi /etc/exports
Добавим следующую строку в файл и сохраним его:/nfs X. X.X.X/X(rw,sync,no_root_squash)
где X.X.X.X/X — адрес подсети, например — 172.31.32.0/24.
Теперь применим конфигурацию, выполнив команду:exportfs -a
Перезапустим nfs:sudo systemctl restart nfs-server
Зайдем на остальные машины, установим утилиты для работы с nfs и запустим сервисы:sudo yum install nfs-utils
systemctl enable rpcbind
systemctl enable nfs-server
systemctl enable nfs-lock
systemctl enable nfs-idmap
systemctl start rpcbind
systemctl start nfs-server
systemctl start nfs-lock
systemctl start nfs-idmap
Готово!
Установка nfs-client-provisioner
Чтобы не монтировать PersistentVolume к хранилищу вручную для каждого PVC, установим nfs-client provisioner на каждой машине-клиенте. Для установки будем использовать Helm. Выполним команду:helm install --set nfs.server=Y.Y.Y.Y --set nfs.path=/nfs stable/nfs-client-provisioner
где Y. Y.Y.Y — внутренний адрес NFS-сервера, например — 172.31.32.1.
Сделаем nfs типом хранилища (StorageClass) по умолчанию:kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Создаем PersistentVolumeClaim
Чтобы хранить данные WordPress и MySQL в NFS, необходимо запросить часть хранилища (в данном случае по 1 GiB) для каждого приложения через PVC. Благодаря запущенному nfs-provisioner PV будут предоставлены автоматически. Создадим файлы pvc-wordpress.yaml и pvc-mysql.yaml со следующим содержанием:
pvc-wordpress.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi
и pvc-mysql.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: claim-db-wordpress-one labels: app: wordpress-one spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi
Теперь создадим объекты PVC:kubectl create -f pvc-wordpress. yaml
kubectl create -f pvc-mysql.yaml
Готово, теперь можно переходить к запуску MySQL и WordPress.
Создаем secret для MySQL
Secret — объект, который хранит какую-либо конфиденциальную информацию типа паролей или ключей. Данные, хранимые в Secret, должны быть закодированы по стандарту base64. Сейчас мы создадим секрет c паролем для пользователя admin в MySQL, зададим создание случайного пароля:
openssl rand -base64 32 | base64
На выходе получим зашифрованный пароль: QlFhZzlEOWF6c3JoMTU4Rjh3U3FDVUdHNE9KSm4xMVBtVDV1Rno1Szkvbz0K
Теперь нужно создать secret.yaml для MySQL и WordPress, на который будет ссылаться MYSQL_ROOT_PASSWORD в environment деплойментов:
apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: password: QlFhZzlEOWF6c3JoMTU4Rjh3U3FDVUdHNE9KSm4xMVBtVDV1Rno1Szkvbz0K
Выполним команду для создания секрета из файла:
kubectl create -f secret.yaml
Запускаем MySQL
Теперь создадим mysql-deploy. yaml, в котором опишем параметры запуска деплоймента и сервиса для MySQL:
apiVersion: v1 kind: Service metadata: name: wordpress-db-one labels: app: wordpress spec: ports: - port: 3306 selector: app: wordpress tier: mysql clusterIP: None --- apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-db-one 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 args: - "--ignore-db-dir=lost+found" env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: db-storage mountPath: /var/lib/mysql volumes: - name: db-storage persistentVolumeClaim: claimName: claim-db-wordpress-one
Файл состоит из 2 файлов конфигураций: Service открывает порт 3306 для всех контейнеров, у которых прописаны лейблы app:wordpress и tier:mysql.
- используется образ mysql:5.7
- указываются лейблы app:wordpress и tier:frontend, прописанные в Service для WordPress.
- в качестве переменной MYSQL_ROOT_PASSWORD используется password из созданного секрета.
- открывается порт 3306
- Директория /var/lib/mysql внутри контейнера монтируется в Volume через PVC с названием claim-db-wordpress-one.
Создадим деплоймент и сервис из файла:kubectl create -f mysql-deploy.yaml
Запускаем WordPress
Процесс запуска WordPress аналогичен описанному выше. Создадим wordpress-deploy.yaml:
apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- 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 # latest: wordpress:4.9-php7.2-apache name: wordpress env: - name: WORDPRESS_DB_HOST value: wordpress-db-one # This one is from Service - 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
Как и в предыдущем случае, файл состоит из 2 частей. Service пробрасывает 80-й порт контейнера на внешний IP:порт машины для всех контейнеров с лейблами app:wordpress и tier:frontend. Deployment содержит следующие specs контейнера WordPress:
- запускаемый образ с DockerHub – wordpress:4.8-apache
- указаны лейблы app:wordpress и tier:frontend, используемые в Service.
- указаны переменные WORDPRESS_DB_HOST (внутренний hostname MySQL) и MYSQL_ROOT_PASSWORD, использующий значение из созданного секрета
- открыт 80-й порт.
- Директория /var/www/html внутри контейнера монтируется в Volume через PVC с названием wp-pv-claim.
Создадим Deployment и Service из файла wordpress-deploy.yaml:kubectl create -f wordpress-deploy.yaml
Убедимся, что все работает:kubectl get po
Откроем WordPress
Теперь откроем WordPress в браузере. Для этого получим порт приложения, выполнив команду kubectl get svc:
Перейдем по адресу: внешний_IP:порт_сервиса (в нашем случае 32095).
Перед нами появился экран выбора языка — WordPress готов к работе.
Проверка
Теперь убедимся, что мы верно настроили работу WordPress и MySQL с хранилищем. В панели управления вордпресса укажем название блога («WordPress в Kubernetes») и перейдем на главную страницу по адресу внешний IP:порт_сервиса. На странице появилось название блога.
Теперь перезапустим поды WordPress и MySQL и проверим, сохранились ли данные приложений.kubectl get po
Удалим поды и подождем, пока будут созданы новые:kubectl delete po название_пода1 название_пода2
Снова зайдем на главную страницу WordPress.
Картинка та же, так что при удалении и восстановлении пода всё сохранилосьПосле перезапуска подов оба приложения взяли сохраненные данные из NFS-хранилища — значит, мы все настроили правильно!
Заключение
С Kubernetes мы можем быстро развернуть WordPress с MySQL и смонтировать их данные в постоянное хранилище. Мы использовали NFS из-за простоты настройки, однако для более надежного production рекомендуется использовать более сложные распределенные системы хранения, например GlusterFS или Ceph.
Тем не менее, NFS отлично подходит для небольших проектов. Если в какой-то момент что-то пойдет не так и WordPress или MySQL «упадет» или перезапустится, мы не потеряем контент благодаря тому, что они хранятся не внутри контейнеров, а во внешнем хранилище. Главное — не забывать регулярно делать бэкапы.
Чтобы не тратить время на установку и настройку кластера Kubernetes, можно получить настроенный кластер в облаке в несколько кликов, с бесплатным тестированием.
Установка WordPress и MySQL на Kubernetes с помощью Helm
27 мая, 2019 12:05 пп 1 927 views | Комментариев нетCloud Server, mySQL | Amber | Комментировать запись
По мере распространения распределенных сред такие инструменты, как Kubernetes, набрали популярность как основные средства стандартизации компонентов приложения в динамических средах сборки и производства. В таких условиях стали необходимы инструменты, которые помогали бы управлять ресурсами в кластерах Kubernetes.
Helm – это менеджер пакетов Kubernetes с открытым исходным кодом, который упрощает процесс развертывания и обновления приложений в кластере Kubernetes, а также предоставляет возможность поиска и обмена готовыми к установке приложениями, которые упакованы в виде чартов Kubernetes.
В этом мануале мы будем использовать Helm для настройки WordPress в кластере Kubernetes, чтобы создать высокодоступный веб-сайт. Кроме масштабируемости и высокой доступности Kubernetes, вы сможете использовать функции безопасности WordPress и упрощенные процессы обновления и отката Helm.
Мы будем использовать внешний сервер MySQL для абстрагирования компонента базы данных, поскольку он может быть частью отдельного кластера или управляемого сервиса. После выполнения мануала у вас будет полнофункциональная установка WordPress в контейнерной кластерной среде, управляемой Kubernetes.
Требования
- Кластер Kubernetes 1.10+ с включенным контролем доступа на основе ролей (RBAC).
- Средство командной строки kubectl, установленное на вашем локальном компьютере или на сервере разработки, настроенное для подключения к кластеру. Пожалуйста, обратитесь к официальной документации Kubernetes за инструкциями по настройке.
- Менеджер пакетов Helm, установленный на вашем локальном компьютере или на сервере разработки, и Tiller, установленный в кластере (читайте мануал Установка программного обеспечения в кластер Kubernetes с помощью пакетного менеджера Helm).
- Внешний сервер MySQL с доступом по SSH и root пароль MySQL. Чтобы настроить такой сервер, вы можете следовать мануалу Установка MySQL в Ubuntu 18.04.
Прежде чем двигаться дальше, убедитесь, что вы можете войти на свой сервер MySQL и подключиться к кластеру Kubernetes. Если в вашем конфигурационном файле kubectl настроено несколько кластеров, убедитесь, что вы подключены к правильному кластеру, выполнив на локальном компьютере или на сервере разработки следующую команду:
kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* do-sfo2-wordpress-cluster do-sfo2-wordpress-cluster do-sfo2-wordpress-cluster-admin
. minikube minikube minikube
Символ звездочки (*) указывает, какой кластер в настоящее время является контекстом по умолчанию. Если вам нужно изменить текущий контекст, запустите:
kubectl config use-context context-name
1: Настройка MySQL
Сначала нужно создать отдельного пользователя MySQL и базу данных для WordPress, что позволит устанавливать соединения с внешних хостов. Это необходимо, потому что установка WordPress будет жить на отдельном сервере внутри кластера Kubernetes. Если у вас уже есть выделенный пользователь и база данных MySQL для WordPress, вы можете перейти к следующему разделу.
На сервере MySQL войдите в оболочку MySQL с помощью следующей команды:
mysql -u root -p
Вам будет предложено ввести root пароль учетной записи MySQL. После входа MySQL предоставит вам командную строку, которую вы сможете использовать для создания базы данных и пользователя для WordPress.
Примечание: В этом мануале мы создадим базу данных wordpress и пользователя wordpress_user с паролем password. Обратите внимание, что это только условные значения – использовать их в настоящей среде небезопасно, вы должны заменить их уникальными данными, которые сложно угадать.
Для создания базы данных вы можете использовать следующую команду:
CREATE DATABASE wordpress;
Теперь создайте выделенного пользователя MySQL для этой базы данных:
CREATE USER wordpress_user IDENTIFIED BY 'password';
Пользователь wordpress_user создан, но у него еще нет прав доступа. Следующая команда предоставит этому пользователю права администратора (все привилегии) в базе данных wordpress из локальной и внешней сети:
GRANT ALL PRIVILEGES ON wordpress.* TO wordpress_user@'%';
Чтобы обновить настройки MySQL, сбросьте привилегии:
FLUSH PRIVILEGES;
Закройте MySQL:
exit;
Чтобы убедиться, что изменения были внесены успешно, вы можете снова открыть клиент командной строки MySQL, на этот раз используя новую учетную запись wordpress_user:
mysql -u wordpress_user -p
Вы должны указать пароль, который вы выбрали при создании этого пользователя MySQL. Чтобы подтвердить, что ваш новый пользователь имеет доступ к базе данных WordPress, вы можете использовать следующую команду:
show databases;
Вы получите следующий вывод:
+--------------------+
| Database |
+--------------------+
| information_schema |
| wordpress |
+--------------------+
2 rows in set (0. 03 sec)
После того как вы убедились, что база данных wordpress есть в списке, вы можете выйти из командной строки MySQL:
exit;
Теперь у вас есть отдельная база данных MySQL для WordPress и действительные учетные данные для работы с ней. Поскольку установка WordPress будет работать на отдельном сервере, вам еще нужно отредактировать конфигурацию MySQL, чтобы разрешить внешние подключения. Находясь на сервере MySQL, откройте файл /etc/mysql/mysql.conf.d/mysqld.cnf:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Найдите в этом файле настройку bind-address. По умолчанию MySQL прослушивает только 127.0.0.1 (localhost). Чтобы принимать соединения от внешних хостов, нужно изменить это значение на 0.0.0.0. Вот как должна выглядеть конфигурация bind-address:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0. 0.0.0
Когда вы закончите вносить эти изменения, сохраните и закройте файл. Вам нужно перезапустить MySQL с помощью следующей команды:
sudo systemctl restart mysql
Чтобы проверить возможность удаленного подключения, выполните следующую команду на локальном компьютере или на сервере разработки:
mysql -h mysql_server_ip -u wordpress_user -p
Не забудьте заменить mysql_server_ip на IP-адрес сервера MySQL или имя хоста. Если вы можете подключиться без ошибок, вы готовы перейти к следующему разделу.
2: Установка WordPress
Теперь, когда у вас есть необходимая информация для подключения к базе данных MySQL, можно установить WordPress с помощью Helm.
По умолчанию чарт WordPress устанавливает MariaDB в отдельном модуле внутри кластера и использует его в качестве базы данных. Нам нужно отключить это поведение и настроить WordPress для поддержки внешней базы данных MySQL. Этот и другие параметры (такие как пользователь и пароль WordPress по умолчанию) можно добавить во время установки либо с помощью параметров командной строки, либо через отдельный файл конфигурации YAML.
Чтобы настройка осталась организованной и легко расширялась в будущем, мы будем использовать конфигурационный файл.
На локальном компьютере или сервере разработки создайте новый каталог для настроек проекта и перейдите в него:
mkdir myblog-settings
cd myblog-settings
Затем создайте файл values.yaml:
nano values.yaml
В этом файле нужно настроить несколько переменных, которые определят, как WordPress будет подключаться к базе данных, а также укажут некоторую основную информацию о сайте и администраторе для входа в WordPress после завершения установки.
Эта конфигурация будет основана на стандартном файле values.yaml из чарта WordPress. Раздел Blog/Site Info содержит общие параметры для блога WordPress, такие как название блога и исходные учетные данные пользователя. Раздел Database Settings содержит настройки для подключения к удаленному серверу MySQL. База MariaDB отключена в последнем разделе.
Скопируйте следующие строки в ваш файл values. yaml, заменив выделенные значения вашими значениями:
## Blog/Site Info
wordpressUsername: 8host
wordpressPassword: password
wordpressEmail: [email protected]
wordpressFirstName: 8host
wordpressLastName: Blog
wordpressBlogName: 8host Blog!
## Database Settings
externalDatabase:
host: mysql_server_ip
user: wordpress_user
password: password
database: wordpress
## Disabling MariaDB
mariadb:
enabled: false
Вы только что настроили следующие параметры:
- wordpressUsername: логин пользователя WordPress.
- wordpressPassword: пароль пользователя WordPress.
- wordpressEmail: электронная почта пользователя WordPress.
- wordpressFirstName: имя пользователя WordPress.
- wordpressLastName: фамилия пользователя WordPress.
- wordpressBlogName: название сайта или блога.
- host: IP-адрес или имя хоста сервера MySQL.
- user: пользователь MySQL.
- password: пароль MySQL.
- database: имя базы данных MySQL.
Когда вы закончите редактирование, сохраните файл и выйдите из редактора.
Теперь, когда у вас есть все настройки, пришло время запустить helm для установки WordPress. Следующая команда установит самый последний релиз чарта WordPress под именем myblog, используя конфигурации из values.yaml:
helm install --name myblog -f values.yaml stable/wordpress
Вы должны получить такой вывод:
NAME: myblog
LAST DEPLOYED: Fri Jan 25 20:24:10 2019
NAMESPACE: default
STATUS: DEPLOYED
RESOURCES:
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
myblog-wordpress 0/1 1 0 1s
==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
myblog-wordpress Pending do-block-storage 1s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
myblog-wordpress-5965f49485-8zfl7 0/1 Pending 0 1s
==> v1/Secret
NAME TYPE DATA AGE
myblog-externaldb Opaque 1 1s
myblog-wordpress Opaque 1 1s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myblog-wordpress LoadBalancer 10. 245.144.79 <pending> 80:31403/TCP,443:30879/TCP 1s
(...)
После завершения установки в кластере Kubernetes создается сервис myblog-wordpress, но прежде чем контейнер будет готов и информация о External-IP станет доступной, может пройти несколько минут. Чтобы проверить состояние сервиса и получить его внешний IP-адрес, введите:
kubectl get services
Вы должны получить такой вывод:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 20h
myblog-wordpress LoadBalancer 10.245.144.79 203.0.113.110 80:31403/TCP,443:30879/TCP 3m40s
Эта команда предоставляет подробную информацию о сервисах, работающих в кластере, включая имя и тип сервиса, а также используемые ими IP-адреса. Как видно из вывода, установка WordPress обслуживается как myblog-wordpress на внешнем IP-адресе 203. 0.113.110.
Примечание: Если для тестирования этой настройки вы используете minikube, вам нужно запустить minikube service myblog-wordpress , чтобы открыть контейнерный веб-сервер и получить к нему доступ из браузера.
Ваша установка WordPress работает. Чтобы получить доступ к интерфейсу администратора, укажите в веб-браузере внешний IP-адрес, полученный из вывода команды kubectl get services, а затем добавьте /wp-admin:
http://203.0.113.110/wp-admin
Вы должны использовать учетные данные, определенные в файле values.yaml, чтобы войти в систему и начать настройку сайта WordPress.
3: Обновление WordPress
Из-за своей популярности WordPress часто становится целью хакерских атак, потому установку очень важно вовремя обновлять.
Все релизы Helm можно обновлять с помощью команды helm upgrade.
Чтобы получить список всех ваших текущих релизов, выполните следующую команду на локальном компьютере или на сервере разработки:
helm list
Вы должны получить такой вывод:
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
myblog 1 Fri Jan 25 20:24:10 2019 DEPLOYED wordpress-5. 1.2 5.0.3 default
Как видно из вывода, текущая версия WordPress – 5.0.3 (версия приложения), а версия чарта – 5.1.2. Если вы хотите обновить релиз до более новой версии чарта, сначала обновите репозитории Helm:
helm repo update
Вы получите такой вывод:
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈
Затем вы можете проверить, есть ли более новая версия чарта WordPress:
helm inspect chart stable/wordpress
Вы получите такой результат:
apiVersion: v1
appVersion: 5.1.1
description: Web publishing platform for building blogs and websites.
engine: gotpl
home: http://www.wordpress.com/
icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png
keywords:
- wordpress
- cms
- blog
- http
- web
- application
- php
maintainers:
- email: containers@bitnami. com
name: Bitnami
name: wordpress
sources:
- https://github.com/bitnami/bitnami-docker-wordpress
version: 5.9.0
Как видно из выходных данных, доступен новый чарт (версия 5.9.0) для WordPress 5.1.1 (версия приложения). Всякий раз, когда вы хотите обновить свою версию WordPress до последнего чарта, вы должны запустить команду:
helm upgrade -f values.yaml myblog stable/wordpress
Эта команда выдаст результат, очень похожий на вывод, произведенный установкой helm. Важно указать тот же конфигурационный файл, который мы использовали при первой установке чарта WordPress, поскольку он содержит пользовательские настройки базы данных.
Теперь, если вы снова запустите helm list, вы должны увидеть обновленную информацию о вашей версии:
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
myblog 2 Fri May 3 14:51:20 2019 DEPLOYED wordpress-5.9.0 5.1. 1 default
Вы успешно обновили свой WordPress до последней версии чарта WordPress.
Откат релиза
Каждый раз, когда вы обновляете релиз, Helm создает новую ревизию этого релиза. Ревизия устанавливает фиксированную контрольную точку, куда вы можете вернуться, если релиз работает не так, как ожидалось. Этот механизм похож на коммиты в Git, потому что он создает историю изменений, которые можно сравнивать и откатывать. Если что-то во время процесса обновления пойдет не так, вы всегда сможете выполнить откат к предыдущей версии релиза Helm с помощью команды helm rollback:
helm rollback release-name revision-number
Например, если вы хотите отменить обновление и откатить версию WordPress до предыдущей версии, вы можете использовать:
helm rollback myblog 1
Это позволит откатить установку WordPress до первого релиза. Вы должны увидеть следующий вывод, если откат прошел успешно:
Rollback was a success! Happy Helming!
Повторный запуск команды helm list теперь должен сообщить, что WordPress вернулся к версии 5. 0.3, версии чарта 5.1.2:
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
myblog 3 Mon Jan 28 22:02:42 2019 DEPLOYED wordpress-5.1.2 5.0.3 default
Обратите внимание, что откат релиза фактически создаст новую ревизию, основанную на ревизии целевого отката. Релиз WordPress по имени myblog теперь находится в третьей ревизии, которая была основана на первой ревизии.
Заключение
В этом руководстве вы установили WordPress с внешним сервером MySQL в кластере Kubernetes, используя инструмент командной строки Helm. Вы также узнали, как обновить релиз WordPress до новой версии диаграммы и как откатить релиз, если что-то пошло не так в процессе обновления.
Прочитайте рекомендуемые параметры производства для чарта WordPress, который вы использовали в этом руководстве.
Читайте также: Основы работы с Helm, пакетным менеджером Kubernetes
Tags: Helm, Kubernetes, MySQL, WordPressИспользование MySQL с WordPress | WP Engine
Опубликовано в WordPress от Erin Myers
Последнее обновление 2 февраля 2022 г.
Если вы управляете веб-сайтом WordPress, вы, возможно, захотите узнать больше о том, как функционирует его база данных. Полезно понимать, как ваш сайт работает за кулисами, и могут даже быть случаи, когда вам нужно получить прямой доступ к базе данных вашего сайта.
Здесь на помощь приходит MySQL. Язык структурированных запросов (SQL) — это система управления базами данных WordPress. Позже мы подробнее остановимся на этом, но достаточно сказать, что база данных — это мозг вашего веб-сайта, а MySQL — это нервная система, посылающая туда и обратно команды для получения информации и выполнения операций.
В этой статье мы подробно объясним, как работает MySQL в отношении WordPress. Кроме того, мы рассмотрим несколько ошибок базы данных, с которыми вы можете столкнуться, и объясним, как их исправить. Давайте погрузимся прямо в!
Объяснение MySQL
Возможно, вы слышали о базе данных, описанной ранее как картотечный шкаф, место для хранения всей важной информации вашего сайта в категоризированных ячейках. В этой аналогии отдельные папки внутри шкафа являются таблицами базы данных, в которых хранится информация.
Что касается MySQL, это то, как выполняются запросы на размещение или удаление данных в этих папках. Вы также можете использовать MySQL, чтобы установить правила того, что разрешено размещать в каждой части картотеки.
Однако MySQL не может работать в одиночку. Это часть стека программных приложений, используемых для создания веб-сайтов. Другие компоненты включают Linux, Apache, MySQL и PHP (LAMP). Вместе они образуют «команду мечты» в мире программирования с открытым исходным кодом.
Использование MySQL для WordPress
Когда дело доходит до WordPress, язык сценариев PHP используется для отправки и извлечения информации из вашей базы данных MySQL. Эти два элемента обрабатывают все: от входа пользователей на сайт до хранения информации о теме и плагинах для отображения динамического контента.
MySQL использует табличные структуры для хранения данных. Большинство веб-хостов поставляются с программным обеспечением пользовательского интерфейса MySQL, называемым phpMyAdmin. Это бесплатное программное обеспечение с открытым исходным кодом упрощает выполнение команд базы данных. Он позволяет редактировать, удалять или создавать таблицы, строки и поля:
Во время стандартной установки WordPress в вашей базе данных создается 12 таблиц. Вы можете увидеть их в списке слева на изображении выше. Эти таблицы содержат ключевую информацию, необходимую для работы вашего сайта.
Например, в таблице wp_options хранятся параметры, к которым вы можете получить доступ и управлять ими из меню Настройки на панели управления WordPress. Это также дом для ваших различных настроек, связанных с виджетами.
Как вы можете видеть в панели phpMyAdmin, информация обо всех данных, содержащихся в любой таблице, будет видна при нажатии на ее имя. Сюда входят любые значения или параметры, связанные с определенными полями.
Плагины/расширения MySQL
Несмотря на то, что существует не так много плагинов, которые напрямую улучшают функциональность MySQL в WordPress, есть несколько инструментов, которые стоит проверить, если вы планируете часто вручную изменять или изменять свою базу данных.
Например, WP phpMyAdmin — это полезный плагин, если вы хотите иметь доступ к панели phpMyAdmin вашего сайта из вашей панели управления WordPress, а не через панель управления вашего веб-хостинга:
Это простое, но популярное решение, которое предлагает удобное доступ к вашей базе данных. Это также может немного облегчить устранение ошибок, связанных с MySQL, как мы увидим ниже.
Распространенные ошибки MySQL в WordPress (и способы их решения)
Ошибки базы данных могут случиться с кем угодно, но справиться с ними может быть непросто. Чтобы сделать вашу жизнь проще, это помогает понять наиболее распространенные проблемы, которые могут возникнуть, а также вероятные решения каждой из них. Давайте рассмотрим пять примеров типичных проблем MySQL.
1. Ошибка при установлении соединения с базой данных
Если при попытке доступа к вашему сайту вы видите сообщение типа «Ошибка при установлении соединения с базой данных», это, вероятно, означает, что ваш URL-адрес указывает на неправильную базу данных или ваш сайт обнаруживает соединение ошибка.
Ошибка подключения к базе данных означает, что вы не сможете получить доступ к своему веб-сайту. Скорее всего, вам также будет заблокирован вход в панель администрирования. В этом случае скорее всего виноват ваш файл wp-config.php .
Первый способ решить эту проблему — получить доступ к учетной записи хостинга вашего сайта и восстановить недавнюю резервную копию. Это приведет к сбросу вашего файла wp-config.php , что даст вам доступ к панели администратора. Однако, если нет возможности получить доступ к резервной копии вашего сайта, есть другое решение.
Вы также можете редактировать файл wp-config.php с помощью приложения протокола безопасной передачи файлов (SFTP), такого как FileZilla. Как только вы подключитесь к своему веб-сайту, ваш файл wp-config.php можно будет найти в корневом каталоге файлов вашего сайта.
Если вы откроете файл, вы увидите всю информацию о своей базе данных вверху. Затем вы можете проверить, нет ли ошибок в имени вашей базы данных, имени пользователя или любой другой информации, касающейся вашего сайта.
Возможно, вам придется связаться с хостом, если вы не знаете, что должна включать эта информация. В основном вас будет интересовать проверка правильности «DB_USER», «DB_PASSWORD» и «DB_HOST». После внесения необходимых исправлений обязательно сохраните изменения и загрузите файл обратно на сервер вашего сайта.
2. Ошибка №1005
Ошибка №1005 является проблемой на стороне сервера, а не проблемой вашего сайта. Возникает, когда не удалось создать нужную таблицу. В зависимости от деталей строки сообщения вы можете получить дополнительную информацию о причине ошибки.
Например, ваше сообщение об ошибке может выглядеть следующим образом:
Не удается создать таблицу '%s' (ошибка: %d)
Наиболее частым «ошибкой» в этой конкретной проблеме является «(ошибка: 150)». . Это означает, что существует проблема ограничения внешнего ключа. Другими словами, вполне вероятно, что таблица, которую вы пытаетесь создать, конфликтует с установленным ограничением. Ошибка предотвращает возникновение несоответствий в данных между несколькими таблицами.
Чтобы устранить ошибку ограничения внешнего ключа, вам нужно провести небольшое исследование и проверить таблицы базы данных на наличие несоответствий. Это означает, что вам необходимо:
- Убедитесь, что все задействованные таблицы ссылаются на один и тот же механизм базы данных.
- Убедитесь, что все индексируемые поля имеют одинаковый тип или длину.
Эта ошибка обычно связана с простыми несоответствиями, и для ее исправления требуется немного времени и терпения.
3. Ошибка № 1213
Следующая ошибка обычно появляется рядом с символом «ER_LOCK_DEADLOCK». Вы также должны получить сообщение следующего вида: «При попытке получить блокировку обнаружена взаимоблокировка; попробуйте перезапустить транзакцию». К счастью, к этой ошибке прилагаются инструкции, которые можно использовать для ее быстрого устранения.
Когда вы выполняете транзакцию, которая сталкивается с взаимоблокировкой, ваша транзакция останавливается и откатывается. Это связано с командой SQL, которая останавливает транзакцию и отменяет все внесенные изменения. Вы можете думать об этом как об автоматической функции «отмены», которая позволяет вашему приложению останавливаться и предпринимать корректирующие действия.
В этом случае вам просто нужно запустить транзакцию еще раз. Откат освободит блокировки, вызвавшие взаимоблокировку, и теперь транзакция должна завершиться успешно.
4. Ошибка № 1064
Если вы получите сообщение об ошибке № 1064, вы также увидите символ с надписью «ER_PARSE_ERROR». Это означает, что у вас есть ошибка в синтаксисе. Это может быть связано с опечаткой или использованием устаревшей команды.
Вы также должны получить сообщение с некоторой полезной информацией, например:
%s рядом с '%s' в строке %d
Это направит вас к примерной строке вашего запроса, на которую вы можете ссылаться, чтобы найти и исправить синтаксическую ошибку. Есть также несколько онлайн-инструментов, которые помогут вам найти ошибки в особенно длинных запросах.
5. Ошибка № 2003
Наконец, возникает ошибка № 2003, когда вы не можете подключиться к серверу MySQL. Символ ошибки указывает на проблему с подключением к хосту:
CR_CONN_HOST_ERROR
Другими словами, это сообщение об ошибке сообщает, что в вашем сетевом подключении отказано. Ваш первый шаг в исправлении проблемы будет заключаться в том, чтобы определить, работает ли сервер MySQL. Затем вам нужно убедиться, что сетевое подключение и порты, которые вы указали, совпадают с теми, которые вы настроили на сервере.
Вы можете сделать это через панель phpMyAdmin, выбрав Статус > Монитор и просмотрев активность на вашем сервере на наличие проблем. Если ваш сервер не работает, вам также необходимо выполнить шаги для его перезапуска.
Если ваш процесс mysqld работает под номером , вам потребуются более глубокие знания о подключении сервера к сети, чтобы вы могли начать работать с возможными сбоями в вашем соединении.
Повысьте уровень своих знаний с WP Engine
Хотя не все будут регулярно проводить время с сервером MySQL своего сайта, полезно знать, куда обращаться за помощью, если вы столкнетесь с ошибкой. Вот почему полезно знать, где в Интернете можно найти лучшие советы и ресурсы для разработчиков.
Чтобы ваш сайт всегда работал бесперебойно, мы предлагаем различные решения и инструменты для хостинга. Это включает в себя журнал ошибок WP Engine, который поможет вам предоставить вашим посетителям наилучший цифровой опыт!
Что такое MySQL? Как WordPress использует MySQL?
MySQL — это система управления базами данных, используемая WordPress для хранения и извлечения информации о вашем блоге. Он действует как картотека для вашего веб-сайта и произносится как «мой сиквел».
Приложение базы данных в настоящее время принадлежит корпорации Oracle и является программным обеспечением с открытым исходным кодом, лицензированным по лицензии GPL и доступным бесплатно.
Хотя вы можете использовать WordPress, не зная, как использовать MySQL, базовое понимание может помочь вам устранить проблемы с вашим сайтом WordPress.
Что такое база данных?
MySQL — это система управления реляционными базами данных, способная работать с несколькими пользователями и базами данных. Он работает как сервер и устанавливается на ваш хостинг-сервер WordPress.
Думайте об этом как о цифровом картотеке, которая упорядочивает и хранит все данные на вашем веб-сайте.
Информация извлекается, добавляется и удаляется из таблиц в базе данных с помощью специального языка программирования под названием SQL или языка структурированных запросов. Инструкция SQL для извлечения данных называется запросом.
Типичный запрос MySQL выглядит так:
SELECT * FROM wp_posts WHERE ID = 23;
Вам не нужно понимать, как работают базы данных, или изучать язык SQL, чтобы использовать WordPress. Все это происходит автоматически за кулисами. Однако знание MySQL может помочь в устранении неполадок.
Вы можете исправить многие ошибки WordPress, работая напрямую с базой данных, особенно если вы не можете войти в админку WordPress. Например, вы можете сбросить пароль WordPress, добавить администратора и изменить адрес электронной почты WordPress.
Вы можете получить доступ к базе данных MySQL с помощью phpMyAdmin. Это веб-приложение, которое позволяет вам управлять базами данных MySQL с помощью веб-браузера. Вы найдете его в панели управления вашего хостинг-провайдера.
Чтобы узнать больше о базах данных и о том, как их использовать, ознакомьтесь с нашим руководством для начинающих по управлению базами данных WordPress с помощью phpMyAdmin.
Как WordPress использует MySQL?
WordPress хранит большое количество информации в базе данных, включая записи, страницы, комментарии, категории, теги, настраиваемые поля, пользователей и другие настройки WordPress.
Вот почему, когда вы впервые устанавливаете WordPress, он просит вас указать имя базы данных, хост, имя пользователя и пароль.
Эта информация хранится в файле конфигурации с именем wp-config.php.
Во время установки WordPress использует предоставленную вами информацию о базе данных для создания таблиц и хранения данных установки по умолчанию в этих таблицах.
Каждая установка WordPress начинается с 12 таблиц по умолчанию в базе данных. Они содержат данные для различных разделов, функций и функций WordPress.
В настоящее время при установке WordPress по умолчанию создаются следующие таблицы:
-
wp_commentmeta
содержит метаинформацию о комментариях -
wp_comments
содержит комментарии и сведения об авторе комментариев -
wp _links
управляет списками блогов, созданными в более ранних версиях WordPress . -
wp_options
содержит большинство настроек WordPress для всего сайта -
wp_postmeta
содержит метаинформацию о сообщениях, страницах и пользовательских типах сообщений -
wp_posts
содержит ваши сообщения, страницы, пользовательские типы сообщений и редакции -
wp_termmeta
содержит метаданные для терминов в рамках пользовательских таксономий категория и тег -
wp_term_relationships
управляет отношениями между типами сообщений и терминами -
wp_term_taxonomy
определяет таксономии для различения категорий и тегов -
wp_usermeta
содержит метаинформацию о зарегистрированных пользователях -
wp_users
содержит информацию о пользователях, включая имена пользователей и пароли
wp_
перед каждым именем таблицы является префиксом базы данных по умолчанию. Вы можете выбрать другой префикс во время установки WordPress, чтобы повысить безопасность вашего сайта.
Поскольку ваш контент WordPress хранится в MySQL, вашему решению для резервного копирования веб-сайта потребуется сделать копию таблиц вашей базы данных, а также файлов, хранящихся в вашей медиатеке, темах и плагинах.
Плагины резервного копирования, такие как UpdraftPlus, будут автоматически отправлять полные резервные копии ваших файлов и базы данных WordPress в удаленное место. Вы можете узнать, как его настроить, следуя нашему руководству по резервному копированию и восстановлению сайта WordPress с помощью UpdraftPlus.
Как MySQL влияет на производительность веб-сайта
MySQL работает на вашем веб-сервере как приложение, поэтому требуется больше ресурсов, когда больше пользователей посещают ваш веб-сайт. Это связано с тем, что каждый раз, когда пользователь посещает ваш веб-сайт, WordPress должен извлекать информацию из базы данных до того, как веб-страница будет отправлена в браузер пользователя.
Это замедляет загрузку вашего веб-сайта, когда его одновременно посещает множество пользователей.
Большинство веб-сайтов решают эту проблему с помощью плагина кэширования WordPress. Эти плагины хранят часто запрашиваемые веб-страницы, чтобы ваша база данных не запрашивалась так часто. В результате ваш сайт работает быстрее.
Мы рекомендуем использовать либо WP Rocket (премиум), либо WP Super Cache (бесплатно). Многие хостинговые компании WordPress, такие как Bluehost и SiteGround, также предлагают решения для кэширования.
Вы можете следовать нашему руководству по установке и настройке WP Super Cache на своем сайте WordPress, чтобы увидеть, как легко добавить решение для кэширования на свой сайт.
Запуск MySQL на вашем компьютере
Если вы хотите запускать WordPress локально на своем компьютере, вам потребуется запустить то же программное обеспечение, что и у вашего хостинг-провайдера WordPress. Сюда входят Apache (программное обеспечение веб-сервера), MySQL (база данных) и PHP (язык программирования).