wordpress mysql 挂了_(转)Kubernetes部署WordPress+MySQL

本文介绍了如何在Kubernetes环境下,利用NFS部署WordPress和MySQL,包括NFS的配置、Persistent Volume设置、Secret管理、Deployment配置和服务设定,最终实现WordPress的安装和验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://www.showerlee.com/archives/2336

这部分我们结合之前的k8s知识点给大家展示如何使用kubernetes部署wordpress+MySQL, 并利用NFS去保存我们容器的源代码以及DB数据.

安装环境

System: CentOS 7.4

Kubernetes: Kubernetes1.9

Docker: 17.03.2-ce

kube-master 10.110.16.10

kube-node-1 10.110.16.11

一. NFS配置:

1. NFS依赖包安装

在Master与Node分别安装NFS组件

# yum install nfs-utils -y

Tip: 这里需保证nfs-utils安装到所有master和node中, 否则容器挂载NFS时会报错.

2. 为Master下mysql data和wordpress源码配置NFS共享目录

# systemctl enable nfs-server && systemctl start nfs-server

# mkdir -p /kube/mysql-db

# mkdir -p /kube/wordpress

# chown nfsnobody:nfsnobody /kube/mysql-db

# chown nfsnobody:nfsnobody /kube/wordpress

# chmod 755 /kube/mysql-db

# chmod 755 /kube/wordpress

# echo -e "/kube/mysql-db    kube-*(rw,sync,no_subtree_check,no_root_squash)" > /etc/exports

# echo -e "/kube/wordpress    kube-*(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports

Tip: 这里kube-*限制只有kube相关的server才能连接Master下NFS共享目录, no_root_squash参数保证wordpress-mysql pod在初始化mysql配置的时候向在其下挂载的/var/lib/mysql目录有写入权限

3.应用配置

# exportfs -a

二. Persistent volume配置

1.为mysql data与wordpress源码存储创建Persistent volume

# kubectl create -f mysql-pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: mysql-pv

labels:

app: mysql

spec:

capacity:

storage: 5Gi

accessModes:

- ReadWriteOnce

persistentVolumeReclaimPolicy: Recycle

nfs:

path: /kube/mysql-db

server: kube-master

# kubectl create -f wordpress-pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: wp-pv

labels:

app: wordpress

spec:

capacity:

storage: 5Gi

accessModes:

- ReadWriteOnce

persistentVolumeReclaimPolicy: Recycle

nfs:

path: /kube/wordpress

server: kube-master

2.创建存放mysql data的PVC

# kubectl create -f mysql-pvc.yaml

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: mysql-pv-claim

labels:

app: mysql

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 2Gi

3.创建存放wordpress源码的PVC

# kubectl create -f wordpress-pvc.yaml

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: wp-pv-claim

labels:

app: wordpress

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 2Gi

查看绑定

# kubectl get pvc

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

mysql-pv-claim Bound mysql-pv 5Gi RWO 3m

wp-pv-claim Bound wp-pv 5Gi RWO 6s

三. Secret配置

1.创建mysql root password

# kubectl create secret generic mysql-pass --from-literal='password=countonme'

四. Deployment配置

1.部署mysql deployment with PVC

# kubectl create -f mysql-deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: wordpress-mysql

labels:

app: wordpress

spec:

selector:

matchLabels:

app: wordpress

tier: mysql

strategy:

type: Recreate

template:

metadata:

labels:

app: wordpress

tier: mysql

spec:

containers:

- image: mysql:5.6

name: mysql

env:

- name: MYSQL_ROOT_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-pass

key: password

ports:

- containerPort: 3306

name: mysql

volumeMounts:

- name: mysql-persistent-storage

mountPath: /var/lib/mysql

volumes:

- name: mysql-persistent-storage

persistentVolumeClaim:

claimName: mysql-pv-claim

2.部署wordpress deployment with PVC

# kubectl create -f wordpress-deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: wordpress

labels:

app: wordpress

spec:

selector:

matchLabels:

app: wordpress

tier: frontend

strategy:

type: Recreate

template:

metadata:

labels:

app: wordpress

tier: frontend

spec:

containers:

- image: wordpress:4.8-apache

name: wordpress

env:

- name: WORDPRESS_DB_HOST

value: wordpress-mysql

- name: WORDPRESS_DB_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-pass

key: password

ports:

- containerPort: 80

name: wordpress

volumeMounts:

- name: wordpress-persistent-storage

mountPath: /var/www/html

volumes:

- name: wordpress-persistent-storage

persistentVolumeClaim:

claimName: wp-pv-claim

3.Service配置

Tip: 这里我们开启了node IP的80端口的外部访问权限, 可以方便我们直接利用主机去访问虚拟机任意Node地址从而登录我们的Wordpress网站.

# kubectl create -f wp-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: wordpress-mysql

labels:

app: wordpress

spec:

ports:

- port: 3306

selector:

app: wordpress

tier: mysql

clusterIP: None

---

apiVersion: v1

kind: Service

metadata:

name: wordpress

labels:

app: wordpress

spec:

ports:

- port: 80

nodePort: 80

selector:

app: wordpress

tier: frontend

type: NodePort

Tip: 这里service定义的name: wordpress-mysql保证我们wordpress-deployment.yaml定义的如下环境变量可以作为有效的域名成功去访问我们的mysql容器, 保证网站服务器与数据库服务器的通讯.

env:

- name: WORDPRESS_DB_HOST

value: wordpress-mysql

五. 验证结果

1.访问wordpress主页

这里我们可以直接在浏览器访问任意node的IP地址从而进入wordpress主页

9e0d040ee72c101fe84418ad485bb8a3.png

添加相关信息并初始化安装WordPress

35bc47ec0c3e3f85e04cea43caf3edbf.png

完成安装

f88f0568643e60d84d9df0c105800c3b.png

后台

ab15dec7dce42bc41140068584e9e211.png

主页

5cf0b16f16d6cc5fde70750d6099c0c7.png

2.查看NFS主机对在容器里的mysql data与wordpress root dir的目录挂载.

c1d148e29d7953d4a8c6ec69596c5f02.png

778ad7b992e0aaea9fa3b5dc1022bfbe.png

有兴趣的小伙伴可以直接访问如下代码仓库去下载本文相关代码:

Finished...

后记:

如果我们使用helm包管理去部署wordpress, 将大大简化我们的工作量.

这里我的代码仓库提供了wordpress chart部署脚本, 以下是详细的部署步骤:

Prerequisite:

Kubernetes cluster setup

Helm setup

Helm deployment:

# git clone git@git.showerlee.com:showerlee/kube-deploy.git

# cd kube-deploy

# kubectl create secret generic mysql-pass --from-literal='password=countonme'

# helm install --name wordpress-mysql ./wordpress-helm-chart --set service.type=NodePort

NAME: wordpress-mysql

LAST DEPLOYED: Sat Apr 14 03:09:46 2018

NAMESPACE: default

STATUS: DEPLOYED

RESOURCES:

==> v1/PersistentVolume

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE

mysql-pv 5Gi RWO Recycle Bound default/mysql-pv-claim 1s

wp-pv 5Gi RWO Recycle Bound default/wp-pv-claim 1s

==> v1/PersistentVolumeClaim

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

mysql-pv-claim Bound mysql-pv 5Gi RWO 1s

wp-pv-claim Bound wp-pv 5Gi RWO 1s

==> v1/Service

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

wordpress-mysql ClusterIP None 3306/TCP 1s

wordpress NodePort 10.110.14.233 80:80/TCP 1s

==> v1/Deployment

NAME AGE

wordpress-mysql 1s

wordpress 1s

NOTES:

1. Get the application URL by running these commands:

export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services wordpress-mysql-wordpress-helm-chart)

export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")

echo http://$NODE_IP:$NODE_PORT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值