1. Java web应用的容器化发布

1.1 环境准备

为了与其他Pod隔离,新建一个命名空间。

1
kubectl create namespace java-web

1.2 启动MySQL服务

1)创建MySQL定义文件sql-rc.yaml,用于启动MySQL服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: v1 
kind: ReplicationController
metadata:
name: mysql
namespace: java-web
spec:
replicas: 1
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"

上述文件中的spec.template.metadata.labels指定了该Pod的标签。
注:这里的标签必须与上面的spec.selector匹配,否则每当此RC创建了一个无法匹配标签的Pod,系统会认为此系统创建失败,继而不停地尝试创建新的Pod,导致系统进入恶性循环。
image.png

2)将其发布到Kubernetes集群

1
kubectl create -f sql-rc.yaml

查看pod信息

1
kubectl get pods -n java-web

注:kubectl get pods为查看default命名空间里的pods信息,若想查看指定的命名空间需要使用参数 -n指定。

3)创建关联的Service定义文件,并执行create命令
vim sql-svc.yaml

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: java-web
spec:
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql

创建Service

1
kubectl create -f sql-svc.yaml

1.3 启动Tomcat应用

1)创建Tomcat
编写Tomcat对应的文件web-rc.yaml

vim web-rc.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: v1
kind: ReplicationController
metadata:
name: tomcat
namespace: java-web
spec:
replicas: 1
selector:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: docker.io/kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: 10.104.44.202
- name: MYSQL_SERVICE_PORT
value: '3306'

注:上述文件中的spec.containers.env.name:MYSQL_SERVICE_HOST.value为自己创建的mysql服务的CLUSTER-IP,可使用kubectl get service -n java-web命令查看。

创建Tomcat

1
kubectl create -f tomcat-rc.yaml

2)创建Tomcat对应的Service

在文件中设置端口转发项,将容器的8080端口转发到本地的30000端口。
vim tomcat-svc.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
name: tomcat
namespace: java-web
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30000
selector:
app: tomcat

执行kubectl create命令进行创建

1
kubectl create -f tomcat-svc.yaml

并查看创建的Service

1
kubectl get pods -n java-web

5)查看服务部署的位置

1
kubectl get pod -n java-web -o wide

可以看到,mysql和tomcat都被部署到slave2上,所以在浏览器输入slave2的IP地址:30000/demo访问即可。

单击add按钮可向数据库添加数据。