一:介绍
结构图

服务器结构:
192.168.1.10 k8s-master
192.168.1.11 k8s-node01
192.168.1.12 k8s-node02
192.168.1.13 nfs
二:安装
Docker镜像下载
php 需要制作dockerfile,其他镜像可以使用pull直接拉取:
链接:https://pan.baidu.com/s/1IUxEAoNq6uEEKmudxsNDag
提取码:dmwa
k8s-master制作php-fpm镜像
安装解包后:

docker build -t php:latest .
将景象打包传送到两台节点(k8s-node01 k8s-node02 ):
docker save -o php.tar php:lastest
scp nginx.tar root@其他节点IP:目录
在另外两台node上操作:
docker load -i php.tar
加载镜像:
docker save -o php.tar php:latest
注:这里在生产环境中如果有多个node,建议创建私有镜像仓库并配置似有仓库密钥在master端方式
安装nfs
# 安装依赖包
yum install -y nfs-common nfs-utils rpcbind
# 创建共享目录
mkdir -p /opt/nfs/wp-data && mkdir -p /opt/nfs/mysql-data
# nfs配置文件
cat <<EOF>/etc/exports
/opt/nfs/mysql-data *(rw,no_root_squash,no_all_squash,sync)
/opt/nfs/wp-data *(rw,no_root_squash,no_all_squash,sync)
EOF
#启动服务:
systemctl start rpcbind
systemctl start nfs
检测:
showmount -e [192.168.1.13(其他服务器测试需要在此处填写nfs服务器IP)]

mysql-data用于存储mysql相关数据,wp-data用于存储wordpress相关数据
k8s三台集群节点,安装下nfs客户端即可
yum install -y nfs-utils
systemctl start nfs
创建PV
在master节点创建一个yaml目录
mkdir lnmp && cd lnmp
创建三个pv,一会通过标签选择器apps: blog-* 和 存储类名storageClassName: blog-* 进行选择,这里注意nginx和php共享目录都为wp-data目录
vi pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: blog-mysql-pv
labels:
apps: blog-mysql
storageClassName: blog-mysql
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: "/opt/nfs/mysql-data"
server: 192.168.1.13
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: blog-php-pv
labels:
apps: blog-php
storageClassName: blog-php
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /opt/nfs/wp-data
server: 192.168.1.13
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: blog-nginx-pv
labels:
apps: blog-nginx
storageClassName: blog-nginx
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /opt/nfs/wp-data
server: 192.168.1.13
kubectl apply -f pv.yaml

安装mysql
创建mysql密码的认证 (secret)
例如:创建一个secret名字叫做mysql-password 内容为password=123456kubectl create secret generic mysql-pass --from-literal=password=123456
创建mysql的svc,暴露端口3306,deployment部署方式,镜像使用mysql5.7注入环境变量MYSQL_ROOT_PASSWORD实现通过root身份+secret登入,通过blog-mysql-pvc绑定blog-mysql-pv实现/var/lib/mysql目录和nfs的mysql-data目录共享
vi mysql-deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: blog-mysql-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: blog-mysql
selector:
matchLabels:
apps: blog-mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
# value: password
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: blog-mysql-pvc
进入pod创建一个wordpress数据库:
我的pod是mysql-748c849595
kubectl exec -it mysql-748c849595-rbxjd -- bash
mysql -uroot -p123456
登入后:
create database wordpress;
show databases;

补充:如果希望其他用户登陆数据库,例如某些版本禁止root身份登入,可以额外创建一个用户,并使用创建的用户登录:
create user wp;
grant all on wordpress.* to 'wp'@'%' identified by '123456';
flush privileges;
SELECT user,host FROM mysql.user;

安装php
vi php-deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress-php
labels:
app: wordpress
spec:
ports:
- port: 9000
selector:
app: wordpress-php
tier: frontend
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: blog-php-pvc
labels:
app: wordpress
spec:
storageClassName: blog-php
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
apps: blog-php
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-php
labels:
app: wordpress
spec:
replicas: 3
selector:
matchLabels:
app: wordpress-php
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress-php
tier: frontend
spec:
containers:
- name: php
image: php:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9000
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: blog-php-pvc
kubectl apply -f php-deployment.yaml
安装nginx
vi nginx.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-wp-config
data:
default.conf: |-
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.php;
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass blog-php:9000;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
fastcgi_connect_timeout 60s;
fastcgi_read_timeout 300s;
fastcgi_send_timeout 300s;
}
}
---
apiVersion: v1
kind: Service
metadata:
name: blog-nginx
labels:
app: nginx
spec:
ports:
- port: 80
selector:
app: blog-nginx
tier: frontend
type: NodePort
sessionAffinity: ClientIP
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pv-claim
spec:
storageClassName: nfs-nginx
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: blog-nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: blog-nginx
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: blog-nginx
tier: frontend
spec:
containers:
- name: nginx
image: nginx:1.16.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: nginx
volumeMounts:
- name: nginx-persistent-storage
mountPath: /usr/share/nginx/html
- name: config
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
volumes:
- name: nginx-persistent-storage
persistentVolumeClaim:
claimName: nginx-pv-claim
- name: config
configMap:
name: nginx-wp-config
kubectl apply -f nginx-deployment.yaml
检测:
检查运行,此时mysql php nginx都应该在running状态,如果mysql处于error状态或者是crashLoopback,删除掉pod让deployment重新跑起来

部署后检测pv和pvc都是Bound状态:

nfs添加wordpress
wget https://cn.wordpress.org/wordpress-4.1-zh_CN.tar.gz
tar xf wordpress-4.1-zh_CN.tar.gz
cp -a wordpress/* /opt/nfs/wp-data/
chown -R nobody /opt/nfs/wp-data
# 如果遇到权限问题可以尝试修改目录权限 chmod -R 777 /opt/nfs/ # 这条命令加上可以开通所有nobody的读写权限,生产环境慎用

安装wordpress
查看端口:

http://192.168.1.11:32563/


注:如果使用其他用户登录数据库填写:


创建站点、管理员,邮箱,进行安装

wp管理员登录:

发布者:LJH,转发请注明出处:https://www.ljh.cool/5033.html