Как настроить WordPress с MySQL на Kubernetes, используя Helm

Вступление

Поскольку все больше разработчиков работают в распределенных средах, такие инструменты, как Kubernetes, стали центральными для обеспечения стандартизации компонентов приложения в динамических средах сборки и производства. С ростом сложности экосистем приложений и растущей популярностью Kuberbetes стали необходимы инструменты, которые помогают управлять ресурсами в кластерах Kubernetes.

Helm - менеджер пакетов с открытым исходным кодом для Kubernetes, который упрощает процесс развертывания и обновления приложений в кластере Kubernetes, а также предоставляет возможность находить готовые к установке приложения и предоставлять к ним общий доступ. упакованы как Kubernetes Charts.

В этом руководстве мы будем использовать Helm для настройки https://wordpress.com [WordPress] поверх кластера Kubernetes для создания высокодоступного веб-сайта. В дополнение к использованию встроенных аспектов масштабируемости и высокой доступности Kubernetes, эта установка поможет сохранить безопасность WordPress, предоставляя упрощенные рабочие процессы обновления и отката через Helm.

Мы будем использовать внешний сервер MySQL для абстрагирования компонента базы данных, поскольку он может быть частью отдельного кластера или управляемой службы для расширенной доступности. После выполнения действий, описанных в этом руководстве, у вас будет полнофункциональная установка WordPress в кластерной кластерной среде, управляемой Kubernetes.

Предпосылки

Для выполнения этого руководства вам понадобится следующее:

  • Кластер Kubernetes 1.10+ с включенным role-based control access (RBAC).

  • Инструмент командной строки + kubectl +, установленный на вашем локальном компьютере или на сервере разработки, настроенный для подключения к вашему кластеру. Пожалуйста, смотрите official Kubernetes документацию для получения инструкций о том, как это настроить.

  • Менеджер пакетов Helm установлен на вашем локальном компьютере или на сервере разработки, а Tiller установлен на вашем кластере, как описано в этом руководстве: https://www.digitalocean.com/community/tutorials/ Как установить программное обеспечение в Kubernetes Clusters-with-the-Helm-Package-Manager [Как установить программное обеспечение в Kubernetes Clusters с помощью Helm Package Manager].

  • Внешний сервер MySQL с SSH-доступом и паролем * root * MySQL. Чтобы настроить это, вы можете следовать одному из наших руководств по MySQL, таким как: How To Install MySQL на Ubuntu 18.04.

Прежде чем двигаться дальше, убедитесь, что вы можете войти на свой сервер MySQL и что у вас есть подключение к вашему кластеру Kubernetes. Если в вашем конфигурационном файле + kubectl + настроено несколько кластеров, вы должны убедиться, что вы подключены к правильному кластеру, выполнив следующую команду с вашего локального компьютера или сервера разработки:

kubectl config get-contexts

Это пример вывода:

Output
CURRENT   NAME                        CLUSTER                     AUTHINFO                          NAMESPACE
*         do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster-admin
         minikube                    minikube                    minikube

Знак звездочки (*) указывает, какой кластер в настоящее время является контекстом default. Если вам нужно изменить текущий контекст, запустите:

kubectl config use-context

Теперь вы должны быть готовы следовать остальной части руководства.

Шаг 1 - Настройка MySQL

Во-первых, мы создадим отдельного пользователя MySQL и базу данных для WordPress, что позволит устанавливать соединения с внешних хостов. Это необходимо, потому что ваша установка WordPress будет жить на отдельном сервере внутри кластера Kubernetes. Если у вас уже есть выделенный пользователь MySQL и база данных, настроенная для WordPress, вы можете перейти к следующему шагу.

С сервера MySQL войдите в MySQL с помощью следующей команды:

mysql -u root -p

Вам будет предложено ввести пароль, который вы установили для учетной записи * root * MySQL при первой установке программного обеспечения. После входа MySQL выдаст вам командную строку, которую вы можете использовать для создания базы данных и пользователя, который нам нужен для WordPress.

Для создания базы данных вы можете использовать следующую инструкцию:

CREATE DATABASE ;

Теперь давайте создадим выделенного пользователя MySQL для этой базы данных:

CREATE USER  IDENTIFIED BY '';

Пользователь ++ был создан, но у него еще нет прав доступа. Следующая команда предоставит этому пользователю права администратора (все привилегии) ​​к базе данных * wordpress * из локальной и внешней сетей:

GRANT ALL PRIVILEGES ON .* TO @'%';

Чтобы обновить внутренние таблицы MySQL, которые управляют разрешениями на доступ, используйте следующую инструкцию:

FLUSH PRIVILEGES;

Теперь вы можете выйти из клиента MySQL с помощью:

exit;

Чтобы проверить, что изменения были успешными, вы можете снова войти в клиент командной строки MySQL, на этот раз, используя новую учетную запись ++ для аутентификации:

mysql -u  -p

Вы должны использовать тот же пароль, который вы указали при создании этого пользователя MySQL с помощью оператора + CREATE_USER +. Чтобы подтвердить, что ваш новый пользователь имеет доступ к базе данных ++, вы можете использовать следующий оператор:

show databases;

Ожидается следующий вывод:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
|           |
+--------------------+
2 rows in set (0.03 sec)

Убедившись, что база данных ++ включена в результаты, вы можете выйти из клиента командной строки 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 +`:

/etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            =

Когда вы закончите вносить эти изменения, сохраните и закройте файл. Вам нужно будет перезапустить MySQL с помощью следующей команды:

sudo systemctl restart mysql

Чтобы проверить, можете ли вы подключиться удаленно, выполните следующую команду на локальном компьютере или на сервере разработки:

mysql -h  -u  -p

Не забудьте изменить ++ на IP-адрес вашего сервера MySQL или имя хоста. Если вы можете подключиться без ошибок, теперь вы готовы перейти к следующему шагу.

Шаг 2 - Установка WordPress

Теперь, когда у нас есть необходимая информация для подключения к базе данных MySQL, мы можем продолжить и установить WordPress с помощью Helm.

По умолчанию диаграмма WordPress устанавливает MariaDB в отдельном модуле внутри кластера и использует его в качестве базы данных WordPress. Мы хотим отключить это поведение и настроить WordPress на использование внешней базы данных MySQL. Этот и другие параметры конфигурации (такие как пароль администратора WordPress по умолчанию и пароль по умолчанию) могут быть установлены во время установки либо с помощью параметров командной строки, либо с помощью отдельного файла конфигурации YAML.

Чтобы все было организованно и легко расширялось, мы будем использовать файл конфигурации.

На локальном компьютере или на сервере разработки создайте новый каталог для настроек проекта и перейдите в него:

mkdir myblog-settings
cd myblog-settings

Затем создайте файл с именем + values.yaml +, используя выбранный вами текстовый редактор:

nano values.yaml

В этом файле нам нужно настроить несколько переменных, которые будут определять, как WordPress подключается к базе данных, а также некоторую базовую информацию о вашем сайте и первоначальном пользователе-администраторе для входа в WordPress после завершения установки.

Мы будем основывать нашу конфигурацию на файле по умолчанию + values.yaml + из диаграммы WordPress Helm. Раздел * Blog / Site Info * содержит общие параметры для вашего блога WordPress, такие как имя блога и начальные учетные данные пользователя. Раздел * Database Settings * этого файла содержит настройки для подключения к удаленному серверу MySQL. MariaDB отключена в последнем разделе.

Скопируйте следующее содержимое в файл + values.yaml +, заменив выделенные значения вашими пользовательскими значениями:

values.yaml

## Blog/Site Info
wordpressUsername:
wordpressPassword:
wordpressEmail:
wordpressFirstName:
wordpressLastName:
wordpressBlogName:

## Database Settings
externalDatabase:
 host:
 user:
 password:
 database:

## Disabling MariaDB
mariadb:
 enabled: false

Мы только что настроили следующие параметры:

  • * wordpressUsername *: логин пользователя WordPress.

  • * wordpressPassword *: пароль пользователя WordPress.

  • * wordpressEmail *: электронная почта пользователя WordPress.

  • * wordpressFirstName *: имя пользователя Wordpress.

  • * wordpressLastName *: фамилия пользователя Wordpress.

  • * wordpressBlogName *: название сайта или блога.

  • * host *: IP-адрес сервера MySQL или имя хоста.

  • * пользователь *: пользователь MySQL.

  • * пароль *: пароль MySQL.

  • * база данных *: имя базы данных MySQL.

Когда вы закончите редактирование, сохраните файл и выйдите из редактора.

Теперь, когда у нас есть все настройки, пришло время выполнить + helm + для установки WordPress. Следующая команда указывает + helm + установить самый последний стабильный выпуск диаграммы WordPress под именем ++, используя + values.yaml + в качестве файла конфигурации:

helm install --name  -f values.yaml stable/wordpress

Вы должны получить вывод, подобный следующему:

Output
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

Вы должны получить вывод, подобный следующему:

Output
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kubernetes         ClusterIP      10.245.0.1      <none>          443/TCP                      20h
  LoadBalancer   10.245.144.79      80:31403/TCP,443:30879/TCP   3m40s

Эта команда предоставляет вам подробную информацию о службах, работающих в вашем кластере, включая имя и тип службы, а также IP-адреса, используемые этими службами. Как видно из вывода, установка WordPress обслуживается как + myblog-wordpress + на внешнем IP-адресе + 203.0.113.110 +.

Ваша установка WordPress теперь работает. Чтобы получить доступ к интерфейсу администратора, используйте общедоступный IP-адрес, полученный из вывода + kubectl get services +, а затем + / wp-admin + в вашем веб-браузере:

http:///wp-admin

изображение: http: //assets.digitalocean.com/articles/wordpress_kubernetes/admin_login.png [экран входа]

Вы должны использовать учетные данные, определенные в вашем файле + values.yaml +, чтобы войти в систему и начать настройку вашего сайта WordPress.

Шаг 3 - Обновление WordPress

Из-за своей популярности WordPress часто является целью злонамеренного использования, поэтому важно постоянно обновлять его. Мы можем обновить релизы Helm командой + helm upgrade.

Чтобы получить список всех ваших текущих выпусков, выполните следующую команду на локальном компьютере или на сервере разработки:

helm list

Вы должны получить вывод, похожий на этот:

OutputNAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      1           Fri Jan 25 20:24:10 2019    DEPLOYED    wordpress-        default

Как видно из вывода, наша текущая версия WordPress - «+ 5.0.3 » (версия приложения), а версия диаграммы - « 5.1.2 +». Если вы хотите обновить выпуск до более новой версии диаграммы, сначала обновите репозитории Helm:

helm repo update

Вы можете ожидать следующий вывод:

OutputHang 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

Вы должны увидеть вывод, похожий на этот:

OutputapiVersion: v1
appVersion:
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: [email protected]
 name: Bitnami
name: wordpress
sources:
- https://github.com/bitnami/bitnami-docker-wordpress
version:

Как видно из результатов, доступна новая диаграмма (версия 5.9.0) с WordPress * 5.1.1 * (версия приложения). Всякий раз, когда вы хотите обновить свою версию WordPress до последней диаграммы WordPress, вы должны запустить:

helm upgrade -f values.yaml  stable/wordpress

Эта команда выдаст вывод, очень похожий на вывод, произведенный + helm install. Важно предоставить тот же файл конфигурации, который мы использовали при первой установке диаграммы WordPress, поскольку он содержит пользовательские настройки базы данных, которые мы определили для нашей установки.

Теперь, если вы снова запустите + helm list +, вы должны увидеть обновленную информацию о вашей версии:

Output
NAME    REVISION    UPDATED                     STATUS      CHART           APP VERSION     NAMESPACE
myblog  2           Fri May  3 14:51:20 2019    DEPLOYED    wordpress-            default

Вы успешно обновили свой WordPress до последней версии диаграммы WordPress.

Откат релиза

Каждый раз, когда вы обновляете релиз, Helm создает новый * revision * этого релиза. Ревизия устанавливает фиксированную checkpoint, куда вы можете вернуться, если все работает не так, как ожидалось. Он похож на commit в Git, потому что он создает историю изменений, которые можно сравнивать и возвращать. Если что-то пойдет не так во время процесса обновления, вы всегда можете выполнить откат к предыдущей версии данного выпуска Helm с помощью команды + helm rollback +:

helm rollback

Например, если мы хотим отменить обновление и откатить нашу версию WordPress до * первой * версии, мы будем использовать:

helm rollback myblog

Это позволит откатить установку WordPress до первого выпуска. Вы должны увидеть следующий вывод, указывающий, что откат прошел успешно:

Output
Rollback was a success! Happy Helming!

Повторное выполнение + helm list + теперь должно указывать на то, что WordPress был понижен до 5.0.3, версия диаграммы 5.1.2:

Output
NAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      3       Mon Jan 28 22:02:42 2019    DEPLOYED    wordpress-            default

Обратите внимание, что откат релиза фактически создаст новую ревизию, основанную на целевой ревизии отката. Наш релиз WordPress с именем + myblog + теперь имеет номер редакции * три *, основанный на номере редакции * один *.

Заключение

В этом руководстве мы установили WordPress с внешним сервером MySQL в кластере Kubernetes, используя инструмент командной строки Helm. Мы также узнали, как обновить релиз WordPress до новой версии диаграммы и как откатить релиз, если что-то пойдет не так в процессе обновления.

В качестве дополнительных шагов, вы можете рассмотреть setting up Nginx Вход с Cert-Manager, чтобы включить виртуальный хостинг на основе имен и настроить SSL-сертификат для вашего сайта WordPress. Вы также должны проверить recommended параметры настройки для диаграммы WordPress, которую мы использовали в этом руководстве.

Если вы хотите узнать больше о Kubernetes и Helm, посетите раздел Kubernetes страницы нашего сообщества.

Related