流程说明

  1. 准备好web应用,打包成jar包
  2. 创建Dockerfile并发布到仓库中
  3. 编写application-deployment.yaml文件,声明式配置k8s
  4. 测试web集群

资料说明

服务器:10.10.10.10(替换成你们自己的服务器)
Web应用端口:8080

web准备

javaweb项目使用springboot开发,测试接口如下(为了方便介绍,本项目就叫做javaweb)

java 集群通信 javaweb集群_java

通过输出本地服务器的ip来判断是否做到服务器的负载均衡

mvn clean package

将生成javaweb-1.0-SNAPSHOT.jar 上传至服务器中

scp /Users/admin/code/springcloud/javaweb/target/javaweb-1.0-SNAPSHOT.jar root@10.10.10.10:/usr/local/webserver/docker

创建Dockerfile并发布镜像

Ssh登录到服务器10.10.10.10

# 进入docker文件夹(可以理解为docker工作目录哈)
cd /usr/local/webserver/docker
# 创建Dockerfile文件
touch Dockerfile
vi Dockerfile

输入以下内容并保存

# 设置该镜像依赖的基础镜像
FROM java:8
# 将当前目录下的jar包赋值到docker容器的/路径下
ADD javaweb-1.0-SNAPSHOT.jar /javaweb.jar
# 运行过程中创建一个javaweb
RUN bash -c 'touch /javaweb.jar'
# 声明暴露端口8080
EXPOSE 8080
# 指定docker启动时运行的jar包
ENTRYPOINT ["java","-jar","/javaweb.jar"]
# 指定维护者名称
MAINTAINER winnie

发布镜像

docker build -t javaweb:1.0-SNAPHOST .

查看镜像是否生成

docker images

java 集群通信 javaweb集群_docker_02


发布成功

声明式配置部署服务

创建我k8s配置文件的工作目录

mkdir -p /usr/local/webserver/k8s
cd /usr/local/webserver/k8s

创建声明式配置文件javaweb-deployment.yaml

touch javaweb-deployment.yaml
vi javaweb-deployment.yaml

输入以下内容

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: javaweb-deployment
spec:
  selector:
    matchLabels:
      app: javaweb
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: javaweb
    spec:
      containers:
      - name: javaweb
        image: javaweb:1.0-SNAPHOST
        ports:
        - containerPort: 8080

将配置应用到k8s容器

kubectl apply -f javaweb-deployment.yaml

如果执行失败,报Error from server (NotFound): the server could not find the requested resource

java 集群通信 javaweb集群_docker_03


可以去仪表盘(dashboard)上操作。

在dashboard创建部署

java 集群通信 javaweb集群_docker_04


java 集群通信 javaweb集群_jar_05


回到首页看看配置

java 集群通信 javaweb集群_docker_06


java 集群通信 javaweb集群_java_07


配置写入成功后,k8s会根据我们预定义的replica去创建对应数量的docker容器

需要注意的是,该web服务只能在集群内部访问,所以还需要暴露出来给外网使用。 这里要去配置service.yaml服务

cd /usr/local/webservice/k8s
vi javaweb-service.yaml

写入一下内容

apiVersion: v1
kind: Service
metadata:
  name: javaweb-service
spec:
  selector:
    app: javaweb
  ports:
  - name: http
    protocol: TCP
    port: 8080 
    targetPort: 8080  # 对外暴露端口
  externalIPs:
  - 10.10.10.10

执行

kubectl apply -f javaweb-service.yaml

失败的话就使用dashboard界面去创建, 上面有介绍。 这里就不贴图了

创建后如图所示

java 集群通信 javaweb集群_docker_08


访问我们提前写好的接口

http://10.10.10.10:8080/hello 多次请求响应(隔5秒请求一次哈, 本人试过频繁请求没变化)

hostaddress is 172.17.0.6. hostname is javaweb-deployment-7d9bf85d98-kt8hl
hostaddress is 172.17.0.7. hostname is javaweb-deployment-7d9bf85d98-fds24

可以看到我们的请求路由到不同的节点上去,即负载均衡的功能实现。

好了,本文就讲到这里,更多内容其实参考官网,官网里写的内容比较多。
整理资料实在不易,k8s学习之路任重道远。