Java Web应用的容器化发布

本小节中将模拟实际生产环境中的应用关系,通过使用Kubernetes发布容器化的应用。本次示例中通过前端应用Tomcat提供的页面向后端的数据库中添加并展示数据,具体的操作流程如图12.1所示。
Java Web应用流程

分别启动两个容器Tomcat容器和MySQL容器,通过Tomcat提供的页面向后端的MySQL数据库写入数据。此示例在一台主机上启动两个容器,需要把MySQL容器的IP地址通过环境变量的方式注入到Tomcat容器中。同时,需要将Tomcat容器的8080端口映射到宿主机的8080端口,以便在外部访问。

1. 环境准备

使用二进制方式或者kubeadm方式部署的Kubernetes集群。

2. 启动MySQL服务

首先,创建RC定义文件mysql-dp.yaml,用来启动MySQL服务。该文件的完整内容和解释如下所示。

# vim mysql-rc.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456" 

上方定义的YAML文件中的spec.template.metadata.labels指定了该Pod的标签,需要特别注意,这里的labels必须与之前的spec.selector匹配,否则此RC每当创建一个无法匹配Label的Pod,就会不停地尝试创建新的Pod,陷入恶性循环中。创建好mysql-rc.yaml文件后,执行如下命令将它发布到Kubernetes集群中。

# kubectl create -f mysql-dp.yaml
deployment.apps/mysql created
# kubectl get pods

最后,创建关联的Service定义文件mysql-svc.yaml,完整的内容和解释如下所示。

# vim mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: mysql  

运行Kubectl命令,创建Service,示例代码如下所示。

# kubectl create -f mysql-svc.yaml
service/mysql created

3. 启动Tomcat应用

上面已经成功定义和启动的MySQL服务,接下来使用同样的步骤和方式创建Tomcat服务。
首先创建Tomcat对应的RC文件tomcat-rc.yaml,示例代码和内容解释如下所示。

# vim tomcat-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: tomcat-rc
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: 'mysql'
          - name: MYSQL_SERVICE_PORT
            value: '3306'
         

使用kubectl命令创建Tomcat。

# kubectl create -f tomcat-rc.yaml
replicationcontroller/tomcat created

在Tomcat容器内,应用将使用环境变量MYSQL_SERVICE_HOST的值连接MySQL服务。
最后,创建Tomcat对应的Service。完整的YAML定义文件tomcat-svc.yaml如下所示。

# vim tomcat-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: tomcat
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30000
  selector:
    app: tomcat

运行kubectl create命令进行创建,并查看创建的Service示例代码如下。

# kubectl create -f tomcat-svc.yaml
service/tomcat created
# kubectl get svc
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
mysql         ClusterIP   10.107.33.3      <none>        3306/TCP         3m22s
tomcat         NodePort    10.97.83.74      <none>        8080:30088/TCP   2m1s
# kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
mysql-94f6bbcfd-9tmdq          1/1     Running   0          23m
tomcat-8qnj8                    1/1     Running   0          22m

容器已经创建完成,下面将介绍如何进行验证。

4. 通过浏览器访问网页

在浏览器中输入http://虚拟机IP:30000/demo/。比如虚拟机IP为192.168.26.10,在浏览器里输入地址http://192.168.26.10:30000/demo/后


在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐