Java web应用的容器化发布
1. Java web应用的容器化发布
1.1 环境准备
为了与其他Pod隔离,新建一个命名空间。
1 | kubectl create namespace java-web |
1.2 启动MySQL服务
1)创建MySQL定义文件sql-rc.yaml,用于启动MySQL服务。
1 | apiVersion: v1 |
上述文件中的spec.template.metadata.labels指定了该Pod的标签。
注:这里的标签必须与上面的spec.selector匹配,否则每当此RC创建了一个无法匹配标签的Pod,系统会认为此系统创建失败,继而不停地尝试创建新的Pod,导致系统进入恶性循环。
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.yaml1
2
3
4
5
6
7
8
9
10
11apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: java-web
spec:
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql
创建Service1
kubectl create -f sql-svc.yaml
1.3 启动Tomcat应用
1)创建Tomcat
编写Tomcat对应的文件web-rc.yaml
vim web-rc.yaml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24apiVersion: 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命令查看。
创建Tomcat1
kubectl create -f tomcat-rc.yaml
2)创建Tomcat对应的Service
在文件中设置端口转发项,将容器的8080端口转发到本地的30000端口。
vim tomcat-svc.yaml1
2
3
4
5
6
7
8
9
10
11
12
13apiVersion: 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 |
并查看创建的Service1
kubectl get pods -n java-web
5)查看服务部署的位置1
kubectl get pod -n java-web -o wide
可以看到,mysql和tomcat都被部署到slave2上,所以在浏览器输入slave2的IP地址:30000/demo访问即可。
单击add按钮可向数据库添加数据。