7.kubernetes示例:wordpress部署实例
[toc]
需求
MySQL需求
- 名称空间:
blog
- 镜像
mysql:5.7
- 环境变量
- root密码:
123
- 数据库:
wp
- 用户:
wp_user
- 参数:
字符集
- root密码:
- 数据持久化
- 映射到宿主机的
/data/mysql/data
wordpress需求
- 镜像:
- 官方
- 数据库地址
- cluster ip
- 数据库名称
wp
- 用户
www
- wordpress数量
- 单独起2pod
- mysql数量
- 单独起1个pod
使用资源
- ns
- Controller
- pod
- initContainer
- 存活探针
- 就绪探针
- clusterIP
- ingress
交付方案
规划
1 | # 镜像 |
部署NFS服务器
安装NFS
1
2# 安装nfs-utils
yum install -y nfs-utils创建
www
用户组进行管理1
2
3
4
5# 创建www组
groupadd www -g 666
# 创建www用户
useradd www -u 666 -s /sbin/nologin -M -g 666创建文件共享目录并授权
1
2
3
4
5# 创建文件共享目录
mkdir /data
# 授权www用户、组
chown www:www /data/编辑NFS的配置文件
1
2
3# 编辑NFS的配置文件
vim /etc/exports
/data/wp 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)启动NFS服务
1
2# 启动nfs服务
systemctl start nfs
资源清单
创建名称空间清单
1
2
3
4
5# vim ns-blog.yaml
apiVersion: v1
kind: Namespace
metadata:
name: blog创建mysql-dp清单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41# vim mysql-dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-dp
namespace: blog
spec:
replicas: 1
selector:
matchLabels:
run: mysql
template:
metadata:
name: mysql-pod
labels:
run: mysql
spec:
volumes:
- name: db-data
hostPath:
path: /data/mysql/
containers:
- name: mysql-container
image: mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123"
- name: MYSQL_DATABASE
value: "wp"
- name: MYSQL_USER
value: "wp_user"
- name: MYSQL_PASSWORD
value: "123"
volumeMounts:
- name: db-data
mountPath: /var/lib/mysql
args:
- --character-set-server=utf8创建mysql的service网络资源(Cluster)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# vim mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-cluster
namespace: blog
spec:
selector:
run: mysql
ports:
- name: mysql-port
port: 3306
protocol: TCP
targetPort: 3306
type: ClusterIP创建wp清单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38# vim wordpress-dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp-dp
namespace: blog
spec:
replicas: 2
selector:
matchLabels:
run: wp
template:
metadata:
name: wp-pod
labels:
run: wp
spec:
volumes:
- name: wp-data
nfs:
path: /data/wp
server: 172.16.1.31
containers:
- name: wp-container
image: wordpress
imagePullPolicy: IfNotPresent
env:
- name: WORDPRESS_DB_HOST
value: "mysql-cluster"
- name: WORDPRESS_DB_NAME
value: "wp"
- name: WORDPRESS_DB_USER
value: "wp_user"
- name: WORDPRESS_DB_PASSWORD
value: "123"
volumeMounts:
- name: wp-data
mountPath: /var/www/html创建wp的service网络资源(Cluster)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# vim wp-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: wp-cluster
namespace: blog
spec:
selector:
run: wp
ports:
- name: wp-port
port: 80
protocol: TCP
targetPort: 80
type: ClusterIP创建wp的ingress资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# wp-ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wp-ingress
namespace: blog
spec:
rules:
- host: blog.xxx.com
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: wp-cluster
port:
number: 80优化合并资源清单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138# vim wp_mysql.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: blog
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-dp
namespace: blog
spec:
replicas: 1
selector:
matchLabels:
run: mysql
template:
metadata:
name: mysql-pod
labels:
run: mysql
spec:
volumes:
- name: db-data
hostPath:
path: /data/mysql/
containers:
- name: mysql-container
image: mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123"
- name: MYSQL_DATABASE
value: "wp"
- name: MYSQL_USER
value: "wp_user"
- name: MYSQL_PASSWORD
value: "123"
volumeMounts:
- name: db-data
mountPath: /var/lib/mysql
args:
- --character-set-server=utf8
---
apiVersion: v1
kind: Service
metadata:
name: mysql-cluster
namespace: blog
spec:
selector:
run: mysql
ports:
- name: mysql-port
port: 3306
protocol: TCP
targetPort: 3306
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp-dp
namespace: blog
spec:
replicas: 2
selector:
matchLabels:
run: wp
template:
metadata:
name: wp-pod
labels:
run: wp
spec:
volumes:
- name: wp-data
nfs:
path: /data/wp
server: 172.16.1.31
containers:
- name: wp-container
image: wordpress
imagePullPolicy: IfNotPresent
env:
- name: WORDPRESS_DB_HOST
value: "mysql-cluster"
- name: WORDPRESS_DB_NAME
value: "wp"
- name: WORDPRESS_DB_USER
value: "wp_user"
- name: WORDPRESS_DB_PASSWORD
value: "123"
volumeMounts:
- name: wp-data
mountPath: /var/www/html
---
apiVersion: v1
kind: Service
metadata:
name: wp-cluster
namespace: blog
spec:
selector:
run: wp
ports:
- name: wp-port
port: 80
protocol: TCP
targetPort: 80
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wp-ingress
namespace: blog
spec:
rules:
- host: blog.xxx.com
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: wp-cluster
port:
number: 80
应用资源清单
1 | # 应用资源清单 |
资源检查
1 | # 检查pod启动状态 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 奥利奥の麦旋风!