k8s pod MySQL环境变量_kubernetes(k8s)可以让WordPress+MySQL容器更持久

本文的示例描述了如何在 Kubernetes 上运行一个WordPress 和 MySQL 的持续化安装。我们将使用 MySQL和 WordPress 官方Docker镜像进行安装。(WordPress镜像包括Apache服务器)。

本文会展示以下 Kubernetes 概念:

● Persistent Volumes(以下简称PV)用来定义持久化磁盘(磁盘生命周期不与Pods绑定)。

● Services可以让 Pods 具备定位其他Pod的能力。

● 外部负载均衡用于对外暴露Services。

● Deployments用来确保Pods保持运行。

● Secrets用以存储敏感密码。

目录

在kubernetes中持久化安装MySQL和WordPress

tl;dr说明

目录内容

集群要求

决定在何处存储数据

主机路径

GCE 持久盘

创建MySQL密码 Secret

部署 MySQL

部署 WordPress

访问新建的WordPress 博客

卸载并重启博客

下一步

tl;dr 说明

把你想要的MySQL密码放入名为password.txt 的文件中,不要尾部换行。如果你的编辑器会自动添加一个,使用下面的第一个指令 tr 将换行符删除。

tr --delete '\n' .strippedpassword.txt && mv

.strippedpassword.txt password.txt

kubectl create -f https://raw.githubusercontent.com/kubernetes

/kubernetes/master/examples/mysql-wordpress-pd/local-volumes.yaml

kubectl create secret generic mysql-pass --from-file=password.txt

kubectl create -f https://raw.githubusercontent.com/kubernetes

/kubernetes/master/examples/mysql-wordpress-pd/mysql-deployment.yaml

kubectl create -f https://raw.githubusercontent.com/kubernetes/kubernetes

/master/examples/mysql-wordpress-pd/wordpress-deployment.yaml

集群要求

Kubernetes可运行在多种环境并且是天生模块化的,并非所有集群都是相同的,以下是该示例的要求。

● Kubernetes1.2 版本。由于使用较新功能(如PV Claims和Deployments)。运行“kubectl versioin”来查看你的集群版本。

● 集群DNS。用于服务发现。

● 外部负载均衡。用于访问WordPress。

● 使用Persistent Volume Claims(以下简称PVC)。你必须在集群中创建PV并被认领。示例中仅演示了如何创建两种类型的volumes,但任何volume类型都可以满足要求。

查阅Getting Started Guide来安装一个集群以及kubectl命令行客户端

决定在何处存储数据

MySQL和WordPress都将使用PV来存储数据。我们将使用PVC来认领可用的PV。这个例子涉及了HostPath 和GCEPersistentDisk 存储卷。选择其中之一,或查看Types of Persistent Volumes获取更多选项。

◆ 主机路径

Host Paths是映射到主机目录的存储卷,应只用于测试或单节点

集群。如果在新节点重建pod,数据将不会在节点间移动,此时数据将丢失。

使用local-volumes.yaml 在 Kubernetes 中创建PV对象:

export KUBE_REPO=https://raw.githubusercontent.com/kubernetes/kubernetes/master

kubectl create -f $KUBE_REPO/examples/mysql-wordpress-pd/local-volumes.yaml

◆ GCE 持久盘

如果你在谷歌计算引擎上运行示例,该存储选项是可合适的选择。

你需要在Kubernetes集群所在的GCE 区域创建两个持久磁盘。默认的安装脚本将在 us-central1-b 区域创建集群,参考在config-default.sh文件。用适当的区域替换。名称wordpress-1和wordpress-2必须与gce-volumes.yaml中指定的pdname字段匹配。

gcloud compute disks create --size=20GB --zone= wordpress-1

gcloud compute disks create --size=20GB --zone= wordpress-2

在Kubernetes 中为这些磁盘创建持久卷对象:

export KUBE_REPO=https://raw.githubusercontent.com/kubernetes/kubernetes/master

kubectl create -f $KUBE_REPO/examples/mysql-wordpress-pd/gce-volumes.yaml

创建MySQL密码

使用 Secret 对象来存储 MySQL 密码。首先创建一个临时文件password.txt 并保存你的密码。确保不在密码末尾换行。如果你的编辑器自动添加了一个换行,下面的第一个命令tr将删除换行符。然后,创建 Secret 对象。

tr --delete '\n' .strippedpassword.txt && mv .strippedpassword.txt password.txt

kubectl create secret generic mysql-pass --from-file=password.txt

MySQL和WordPress pod 配置会引用secret。MySQL pod 将设置数据库密码,同时 WordPress pod 将使用密码来访问数据库。

部署 MySQL

既然定义了持久盘和 Secrets ,那么现在可以启动Kubernetes pods 了,用mysql-deployment.yaml 启动MySQL。

kubectl create -f $KUBE_REPO/examples/mysql-wordpress-pd/mysql-deployment.yaml

从mysql-deployment.yaml中可以注意到我们定义为/var/lib/mysql定义了volume,然后创建一个持久PVC来寻找一个20G 的 volume。任何符合条件的volume 都可以满足这个要求,对应之前示例中我们所创建的volume之一。

再看看 env 部分,我们通过引用之前创建的Secret(mysql-pass) 来指定密码。 Secrets 可以有多个键-值对。我们只有一个键 password.txt ,是用来创建Secret 的文件名。MySQL 镜像使用 MYSQL_ROOT_PASSWORD 环境变量设置数据库密码。

新 pod 到达Running状态前可能需要一段时间。列出所有的pods 来观察这个新pod的状态。

kubectl get pods

NAME READY STATUS RESTARTS AGE

wordpress-mysql-cqcf4-9q8lo 1/1 Running 0 1m

Kubernetes会记录每个 pod 的stderr和stdout。通过 Kubectl log指令可以查看pod 日志。从 get pods 命令复制pod 名称,然后:

kubectl logs ...

2016-02-19 16:58:05 1 [Note] InnoDB: 128 rollback segment(s) are active.

2016-02-19 16:58:05 1 [Note] InnoDB: Waiting for purge to start

2016-02-19 16:58:05 1 [Note] InnoDB: 5.6.29 started; log sequence number

1626007

2016-02-19 16:58:05 1 [Note] Server hostname (bind-address): '*'; port: 3306

2016-02-19 16:58:05 1 [Note] IPv6 is available.

2016-02-19 16:58:05 1 [Note] - '::' resolves to '::';

2016-02-19 16:58:05 1 [Note] Server socket created on IP: '::'.

2016-02-19 16:58:05 1 [Warning] 'proxies_priv' entry '@ root@wordpress-

mysql-cqcf4-9q8lo' ignored in --skip-name-resolve mode.

2016-02-19 16:58:05 1 [Note] Event Scheduler: Loaded 0 events

2016-02-19 16:58:05 1 [Note] mysqld: ready for connections.

Version: '5.6.29' socket: '/var/run/mysqld/mysqld.sock' port: 3306

MySQL Community Server (GPL)

在 mysql-deployment.yaml 我们还创建了一个service,允许其他 pods 访问这个MySQL实例。Service名称是wordpress-mysql,通过名称可以解析到 pod IP。

部署 WordPress

下一步使用wordpress-deployment.yaml 部署WordPress

kubectl create -f $KUBE_REPO/examples/mysql-wordpress-pd/wordpress-deployment.yaml

此处使用了许多相同的功能,如对持久存储的 volume 认领和保存密码的 Secret。

WordPress的镜像通过环境变量 WORDPRESS_DB_HOST设置数据库主机名。我们使用已创建的MySQL service的名称wordpress-mysql 设定环境变量。

WordPress service设置了“type: LoadBalancer”。这将为WordPress service分配一个external IP。

找到WordPress服务的外部IP。外部IP分配给服务的过程可能需要一分钟,这取决于你的集群环境。

kubectl get services wordpress

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE

wordpress 10.0.0.5 1.2.3.4 80/TCP 19h

访问新建的WordPress 博客

现在我们可以使用已获得的服务外部IP来访问运行中的WordPress app。

http://

你应该可以看到熟悉的WordPress 初始页。

20160927211008.jpg

警告:不要在这个页面保留WordPress安装入口。如果它被另一个用户发现,他们可以在你的实例上建立一个网站,并使用它来服务潜在的恶意内容。你应该继续安装直到创建用户名和密码,并删除你的实例,或设置一个防火墙来限制访问。

卸载并重启博客

设置WordPress博客并把玩一下。然后删除pods、再恢复。因为你使用了持久盘,所以你的博客状态会被保存下来。

所有的资源都打上了 app=wordpress标签,所以你可以很容易地通过标签选择器进行删除:

kubectl delete deployment,service -l app=wordpress

kubectl delete secret mysql-pass

之后用原来的命令重新创建资源,这些资源将在原来的磁盘中获取到你的完整数据。因为我们并没有删除PVC,在我们删除pods 后,集群中没有其他的pods能认领PV。

如果你准备好释放持久卷和上面的数据,执行以下指令:

kubectl delete pvc -l app=wordpress

然后删除volume 对象自身。

kubectl delete pv local-pv-1 local-pv-2

kubectl delete pv wordpress-pv-1 wordpress-pv-2

Next Steps

Introspection and Debugging

Jobs may be useful to run SQL queries.

Exec

Port Forwarding

原文链接:https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/mysql-wordpress-pd#gce-persistent-disk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值