Вступление
Поскольку все больше разработчиков работают в распределенных средах, такие инструменты, как 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 страницы нашего сообщества.