流程说明
- 准备好web应用,打包成jar包
- 创建Dockerfile并发布到仓库中
- 编写application-deployment.yaml文件,声明式配置k8s
- 测试web集群
资料说明
服务器:10.10.10.10(替换成你们自己的服务器)
Web应用端口:8080
web准备
javaweb项目使用springboot开发,测试接口如下(为了方便介绍,本项目就叫做javaweb)
通过输出本地服务器的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
发布成功
声明式配置部署服务
创建我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
可以去仪表盘(dashboard)上操作。
在dashboard创建部署
回到首页看看配置
配置写入成功后,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界面去创建, 上面有介绍。 这里就不贴图了
创建后如图所示
访问我们提前写好的接口
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学习之路任重道远。