По мере того, как все больше разработчиков используют распределенную среду, такие инструменты, как Kubernetes, становятся центральным местом для хранения компонентов приложений, стандартизованным для динамической сборки и среды для продакшена. По мере усложнения экосистем приложений и роста популярности Kuberbetes, инструменты, помогающие управлять ресурсами внутри кластеров Kubernetes, становятся незаменимыми.
Helm — это диспетчер пакетов с открытым исходным кодом для Kubernetes, упрощающий процесс развертывания и модернизации приложений на кластере Kubernetes, а также предоставляющий способ поиска готовых к установке приложений, упакованных в виде чартов Kubernetes, и обмена ими.
В этом руководстве мы будем использовать Helm для настройки WordPress в кластере Kubernetes для создания веб-сайта с высокой степенью доступности. Помимо предоставляемых Kubernetes возможностей использования реальной масштабируемости и повышения доступности, подобная настройка будет помогать обеспечивать безопасность WordPress с помощью упрощенного процесса модернизации и отката обновления через Helm.
Мы будем использовать внешний сервер MySQL, чтобы абстрагировать компонент базы данных, поскольку он может находиться в отдельном кластере или управляемой службе для расширенной доступности. После выполнения шагов, описанных в настоящем руководстве, у вас будет полностью функциональная установка WordPress в среде контейнеризированных кластеров, управляемой Kubernetes.
Для выполнения этого руководства вам потребуется следующее:
kubectl
, установленный на локальном компьютере и настроенный для подключения к вашему кластеру. Ознакомьтесь с официальной документацией Kubernetes для получения информации о выполнении данной настройки.Перед тем как продолжить, убедитесь, что вы сможете войти в ваш сервер 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
Знак звездочки (*) указывает, какой кластер в настоящее время используется в качестве контекста по умолчанию. Если вам потребуется изменить текущий контекст, запустите:
- kubectl config use-context context-name
Теперь вы должны быть готовы к выполнению остальной части руководства.
Во-первых, мы создадим выделенных пользователя и базу данных 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;
Для проверки успешного внесения изменений вы снова можете войти в клиент командной строки, на этот раз используя новую учетную запись wordpress_user
для аутентификации:
- mysql -u wordpress_user -p
Вы должны использовать тот же пароль, который вы указали при создании этого пользователя MySQL с заявлением CREATE_USER
. Для подтверждения того, что ваш новый пользователь имеет доступ к базе данных wordpress
, воспользуйтесь следующим заявлением:
- show databases;
Вы должны увидеть следующий вывод:
Output+--------------------+
| 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. Если подключение будет выполнено без ошибок, вы можете перейти к следующему шагу.
Теперь, когда у нас есть вся информация для подключения к базе данных 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
, заменив выделенные значения на собственные:
## Blog/Site Info
wordpressUsername: sammy
wordpressPassword: password
wordpressEmail: sammy@example.com
wordpressFirstName: Sammy
wordpressLastName: the Shark
wordpressBlogName: Sammy's Blog!
## Database Settings
externalDatabase:
host: mysql_server_ip
user: wordpress_user
password: password
database: wordpress
## Disabling MariaDB
mariadb:
enabled: false
Мы успешно настроили следующие параметры:
Когда вы закончите редактирование, сохраните файл и закройте редактор.
Теперь, когда у нас есть все параметры, настало время запустить helm
для установки WordPress. Следующая команда указывает helm
установить самую последнюю стабильную версию чарта WordPress с именем myblog
с помощью файла конфигурации values.yaml
:
- helm install --name myblog -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
(...)
После завершения установки служба с именем myblog-wordpress создается внутри кластера Kubernetes, но может потребоваться несколько минут, пока контейнер будет готов и информация об External-IP
(Внешний 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
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.
Из-за своей популярности 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-5.1.2 5.0.3 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: 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 на самую последнюю версию, доступную в чарте Wordpress, запустите следующую команду:
- helm upgrade -f values.yaml myblog 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-5.9.0 5.1.1 default
Вы успешно обновили WordPress до последней версии из чарта WordPress.
При каждом обновлении версии Helm создает новый выпуск данной версии. Выпуск задает фиксированную точку сохранения, в которую вы можете вернуться, если все будет работать, как ожидалось. Это похоже на commit в Git, потому что в этом случае создается история изменений, которые можно сравнить и откатывать. Если при обновлении что-то пойдет не так, вы всегда можете откатиться к предыдущему выпуску определенной версии Helm с помощью команды helm rollback
:
- helm rollback release-name revision-number
Например, если мы хотим отменить обновление и откатиться к первой версии WordPress, мы должны воспользоваться следующей командой:
- helm rollback myblog 1
В результате будет выполнен откат к первой версии нашей установки 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-5.1.2 5.0.3 default
Обратите внимание, что при откате к предыдущей версии создается новый выпуск, опирающийся на заданную при откате версию. Наша версия WordPress с именем myblog
в настоящий момент имеет номер выпуска три, которая опирается на версию номер один.
В этом руководстве мы установили WordPress с внешним сервером MySQL на кластере Kubernetes с помощью инструмента командной строки Helm. Также мы узнали, как обновить версию WordPress до новой версии чарта, а также как откатить назад версию, если в процессе обновления что-то пойдет не так.
В качестве дополнительных шагов вы можете рассмотреть настройку Nginx Ingress с Cert-Manager, чтобы активировать виртуальный хостинг на основе имен и настроить сертификат SSL для вашего сайта WordPress. Также вы должны проверить рекомендуемые настройки для продакшена в случае использования чарта WordPress, который мы задействовали в настоящем руководстве.
Если вы хотите узнать больше о Kubernetes и Helm, ознакомьтесь с разделом Kubernetes на странице нашего сообщества.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!