一、服务部署与迁移示例

1、简单的部署 wordpress

通过 mysql 与 wordpress 镜像包部署持久化的 wordpress 博客网站

1.1、创建 PV

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
cat lnmp-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv001
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-1
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv002
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-2
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv003
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-3
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv004
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-4
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv005
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-5
server: 192.168.1.169

1.2、部署 mysql

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
cat wp-mysql.yaml

apiVersion: v1
kind: Service
metadata:
name: mysql-svc
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app: wp-mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
labels:
app: wp-mysql
spec:
accessModes:
- ReadWriteMany
storageClassName: "nfs"
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp-mysql
spec:
selector:
matchLabels:
app: wp-mysql
replicas: 1
template:
metadata:
labels:
app: wp-mysql
spec:
containers:
- name: wp-mysql
image: docker.io/mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- name: MYSQL_DATABASE
value: "wordpress"
- name: MYSQL_USER
value: "wordpress"
- name: MYSQL_PASSWORD
value: "wordpress"
volumeMounts:
- name: mysql
mountPath: /var/lib/mysql
volumes:
- name: mysql
persistentVolumeClaim:
claimName: mysql-pvc

1.3、部署 wordpress

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
cat wp-wordpress

apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
app: wordpress
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
labels:
app: wordpress
spec:
accessModes:
- ReadWriteMany
storageClassName: "nfs"
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wp-wordpress
spec:
selector:
matchLabels:
app: wordpress
replicas: 1
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wp-wordpress
image: docker.io/wordpress
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: "mysql-svc"
- name: WORDPRESS_DB_USER
value: "wordpress"
- name: WORDPRESS_DB_PASSWORD
value: "wordpress"
volumeMounts:
- name: wordpress
mountPath: /var/www/html
volumes:
- name: wordpress
persistentVolumeClaim:
claimName: wordpress-pvc

2、部署 LNMP 环境

通过部署 LNMP 环境 部署持久化的 wordpress

2.1、部署 PV

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
cat lnmp-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv001
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-1
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv002
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-2
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv003
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-3
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv004
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-4
server: 192.168.1.169
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv005
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs-5
server: 192.168.1.169

2.2、部署 nginx + php

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
cat lnmp-nginx-php.yaml

apiVersion: v1
kind: Service
metadata:
name: nginx-php-svc
labels:
app: lnmp-nginx-php
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
app: lnmp-nginx-php
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lnmp-web-pvc
labels:
app: wordpress
spec:
accessModes:
- ReadWriteMany
storageClassName: "nfs"
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: lnmp-nginx-php
spec:
selector:
matchLabels:
app: lnmp-nginx-php
replicas: 1
template:
metadata:
labels:
app: lnmp-nginx-php
spec:
containers:
- name: lnmp-nginx
image: richarvey/nginx-php-fpm
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
- containerPort: 9000
volumeMounts:
- name: nginx-data
mountPath: /var/www/html/
volumes:
- name: nginx-data
persistentVolumeClaim:
claimName: lnmp-web-pvc

2.3、部署 MYSQL

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
cat lnmp-mysql.yaml

apiVersion: v1
kind: Service
metadata:
name: lnmp-mysql-svc
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app: lnmp-mysql
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lnmp-mysql-pvc
labels:
app: lnmp-mysql
spec:
accessModes:
- ReadWriteMany
storageClassName: "nfs"
resources:
requests:
storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: lnmp-mysql
spec:
selector:
matchLabels:
app: lnmp-mysql
replicas: 1
template:
metadata:
labels:
app: lnmp-mysql
spec:
containers:
- name: lnmp-mysql
image: docker.io/mysql:5.7
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- name: MYSQL_DATABASE
value: "wordpress"
- name: MYSQL_USER
value: "wordpress"
- name: MYSQL_PASSWORD
value: "wordpress"
volumeMounts:
- name: mysql
mountPath: /var/lib/mysql
volumes:
- name: mysql
persistentVolumeClaim:
claimName: lnmp-mysql-pvc

2.4、部署 wordpress

1
2
3
4
5
6
7
下载 wordpress 的安装包

wordpress官网:https://cn.wordpress.org

将解压后的 wordpress 目录内的所有的内容 上传/复制/移动 到 /nfs-x 目录内

打开浏览器,输入 IP+端口 回车后即可看到如下 wordpress 的安装界面

点击 “现在就开始”

1.png

输入我们在 lnmp-mysql.yaml 文件内定义的 用户名、密码、数据库名、以及我们的 mysql 的 svc 的名称

2.png

如果数据库信息填写正确,点击 “提交” 后可以看到如下提示,我们点击 “现在安装”

3.png

设置我们站点的相关信息

4.png

5.png

6.png

7.png

3、springboot-web

当前,Spring毫无疑问已经成为java后台对象管理标准框架,除了通过IOC能够管理我们的自定义对象的生命周期之外还提供了众多功能繁复的可配置功能模块。但同时带来了复杂的配置项,这对初学者而言简直是一种灾难。于是SpringBoot应运而生,Springboot的出现大大简化了配置,主要表现在消除了web.xml和依赖注入配置的整合,处处遵循规约大于配置的思想,将初学者在繁杂的配置项中解放出来,专注于业务的实现,而不需要去关注太底层的实现。

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
cat dockerfile 

FROM openjdk:8-jdk

COPY target/springboot-web-demo-1.0-SNAPSHOT.jar /springboot-web.jar

ENTRYPOINT ["java", "-jar", "/springboot-web.jar"]

docker build -t spring-web:v1 .

docker tag www.test.com/library/spring-web:v1

docker tag spring-web:v1 www.test.com/library/spring-web:v1

cat spring-web.yaml

apiVersion: v1
kind: Service
metadata:
name: spring-web-svc
spec:
type: NodePort
ports:
- port: 8181
targetPort: 8080
nodePort: 30600
selector:
app: spring-web
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-web
spec:
selector:
matchLabels:
app: spring-web
replicas: 3
template:
metadata:
labels:
app: spring-web
spec:
containers:
- name: spring-web
image: www.test.com/library/spring-web:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080

kubectl apply -f spring-web.yaml

kubectl get pod

kubectl get svc

打开浏览器输入 IP:30600/hello?name=test

8.png

9.png

4、JAVA

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
cat dockerfile

FROM tomcat

COPY jspdemo_war.war /usr/local/tomcat/webapps/jspdemo_war.war

ENTRYPOINT ["catalina.sh","run"]

cat tomcat-java.yaml

apiVersion: v1
kind: Service
metadata:
name: tomcat-java-svc
spec:
type: NodePort
ports:
- port: 8282
targetPort: 8080
nodePort: 30700
selector:
app: tomcat-java
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-java
spec:
selector:
matchLabels:
app: tomcat-java
replicas: 3
template:
metadata:
labels:
app: tomcat-java
spec:
containers:
- name: tomcat-java
image: www.test.com/library/tomcat-java:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080

打开浏览器进入链接 http://IP:30700/jspdemo_war (项目名) 用户名与密码为:lisi

10.png

11.png