如何使用Helm在Kubernetes上使用MySQL设置WordPress

Helm是Kubernetes的开源软件包管理器,可以在您定义,安装和升级Kubernetes应用程序时为您提供帮助。在本教程中,我们将使用Helm在Kubernetes集群之上设置WordPress站点。完成本教程中描述的步骤后,您将在由Kubernetes管理的容器化集群环境中安装全功能的WordPress。

介绍

随着越来越多的开发人员在分布式环境中工作, Kubernetes等工具已成为在动态构建和生产环境中保持应用程序组件标准化的核心。 由于开发人员更广泛地采用Kubernetes来大规模地编排大量容器,因此越来越有必要利用有助于管理Kubernetes集群内资源的工具。 Helm是Kubernetes的开源软件包管理器,可以在您定义,安装和升级Kubernetes应用程序时为您提供帮助。

在本教程中,我们将使用Helm在Kubernetes集群之上设置WordPress站点。 我们将使用外部MySQL服务器来抽象数据库组件,因为它可以是单独的集群或托管服务的一部分,以实现扩展可用性。 完成本教程中描述的步骤后,您将在由Kubernetes管理的容器化集群环境中安装全功能的WordPress。

先决条件

要完成本指南,您需要以下内容:

在继续之前,请确保您能够登录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

首先,我们将为WordPress创建一个专用的MySQL用户和一个数据库,允许来自外部主机的连接。 这是必要的,因为我们的WordPress安装将位于Kubernetes集群内的单独服务器上。 如果您已经为WordPress设置了专用的MySQL用户和数据库,则可以跳到下一步。

从MySQL服务器,使用以下命令登录MySQL:

mysql -u root -p

首次安装软件时,系统将提示您提供为 MySQL帐户设置的密码。 登录后,MySQL将为您提供一个命令提示符,您可以使用它来创建WordPress所需的数据库和用户。

注意:在本教程中,我们将创建一个名为wordpress的数据库和一个名为wordpress_user的用户,由密码password标识。 请注意,这些是不安全的示例值,您应该在本指南中相应地修改它们。

要创建数据库,可以使用以下语句:

CREATE DATABASE wordpress;

现在,让我们为这个数据库创建一个专用的MySQL用户:

CREATE USER wordpress_user IDENTIFIED BY 'password';

用户wordpress_user已创建,但它还没有任何访问权限。 以下命令将为此用户提供来自本地和外部网络的wordpress数据库的admin访问权限(所有权限):

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

要更新管理访问权限的内部MySQL表,请使用以下语句:

FLUSH PRIVILEGES;

现在您可以退出MySQL客户端:

exit;

要测试更改是否成功,您可以再次登录MySQL命令行客户端,这次使用新帐户wordpress_user进行身份验证:

mysql -u wordpress_user -p

您应该使用在使用CREATE_USER语句创建此MySQL用户时提供的相同密码。 要确认您的新用户可以访问wordpress数据库,您可以使用以下语句:

show databases;

预期以下输出:

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

确认wordpress数据库包含在结果中后,您可以退出MySQL命令行客户端:

exit;

您现在拥有一个专门用于WordPress的MySQL数据库,以及在其中使用的有效访问凭据。 由于我们的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            = 0.0.0.0

完成这些更改后,保存并关闭文件。 您需要使用以下命令重新启动MySQL:

sudo systemctl restart mysql

要测试您是否能够远程连接,请从本地计算机或开发服务器运行以下命令:

mysql -h mysql_server_ip -u wordpress_user -p

请记住将mysql_server_ip更改为您的MySQL服务器IP地址或主机名。 如果您能够正常连接,现在就可以继续进行下一步了。

第2步 - 安装WordPress

现在我们有了连接到MySQL数据库的必要信息,我们可以继续使用Helm安装WordPress。

默认情况下,WordPress图表将MariaDB安装在群集内的单独pod上,并将其用作WordPress数据库。 我们想要禁用此行为并配置WordPress以使用外部MySQL数据库。 可以在安装时通过命令行参数或通过单独的YAML配置文件设置此配置选项和其他配置选项(例如默认的WordPress管理员用户和密码)。

为了保持组织和易于扩展,我们将使用配置文件。

从本地计算机或开发服务器,为项目设置创建一个新目录并导航到该目录:

mkdir myblog-settings
cd myblog-settings

接下来,使用您选择的文本编辑器创建名为values.yaml的文件:

nano values.yaml

在此文件中,我们需要设置一些变量来定义WordPress如何连接到数据库,以及有关您的站点的一些基本信息以及安装完成后登录WordPress的初始管理员用户。

我们将配置基于WordPress Helm图表中的默认值values.yaml文件。 博客/网站信息”部分包含WordPress博客的常规选项,例如博客名称和初始用户凭据。 此文件的“ 数据库设置”部分包含用于连接到远程MySQL服务器的设置。 MariaDB在最后一节中被禁用。

将以下内容复制到values.yaml文件中,将突出显示的值替换为您的自定义值:

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

我们刚刚配置了以下选项:

  • wordpressUsername :WordPress用户的登录信息。
  • wordpressPassword :WordPress用户的密码。
  • wordpressEmail :WordPress用户的电子邮件。
  • wordpressFirstName :Wordpress用户的名字。
  • wordpressLastName :Wordpress用户的姓氏。
  • wordpressBlogName :站点或博客的名称。
  • host :MySQL服务器的IP地址或主机名。
  • 用户 :MySQL用户。
  • 密码 :MySQL密码。
  • 数据库 :MySQL数据库名称。

完成编辑后,保存文件并退出编辑器。

现在我们已经完成了所有设置,现在是时候执行helm来安装WordPress了。 以下命令告诉helm使用values.yaml作为配置文件,以名称myblog安装WordPress图表的最新稳定版本:

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安装在外部IP地址203.0.113.110上作为myblog-wordpress提供。

注意:如果您使用minikube测试此设置,则需要运行minikube service myblog-wordpress以公开容器Web服务器,以便您可以从浏览器访问它。

您的WordPress安装现在可以运行了。 要访问管理界面,请使用从kubectl get services输出中kubectl get services的公共IP地址,然后在Web浏览器中使用/wp-admin

http://203.0.113.110/wp-admin

登录屏幕

您应该使用values.yaml文件中定义的凭据登录并开始配置WordPress站点。

第3步 - 升级WordPress

由于其受欢迎程度,WordPress通常是恶意利用的目标,因此保持更新非常重要。 我们可以使用命令helm upgrade升级Helm版本。

要列出所有当前版本,请从本地计算机或开发服务器运行以下命令:

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://www.howtoing.com/wp-content/uploads/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 ,您应该会看到有关您的版本的更新信息:


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 rollback命令始终回滚到给定Helm版本的先前版本:

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  

请注意,回滚版本实际上会根据回滚的目标修订版创建新版本。 我们现在名为myblog WordPress版本是第3版 ,它基于第1版

结论

在本指南中,我们使用命令行工具Helm在Kubernetes集群上安装了带有外部MySQL服务器的WordPress。 我们还学习了如何将WordPress版本升级到新的图表版本,以及如何在整个升级过程中出现问题时回滚版本。

作为附加步骤,您可以考虑使用Cert-Manager设置Nginx Ingress,以启用基于名称的虚拟主机并为您的WordPress站点配置SSL证书。 您还应该检查我们在本指南中使用的WordPress图表的建议生产设置

如果您想了解更多关于Kubernetes和Helm的信息,请查看我们社区页面的Kubernetes部分。


分享按钮