多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Kubernetes容器交付介绍 如何在k8s集群中部署Java项目 ## 容器交付流程 - 开发代码阶段 - 编写代码 - 编写Dockerfile【打镜像做准备】 - 持续交付/集成 - 代码编译打包 - 制作镜像 - 上传镜像仓库 - 应用部署 - 环境准备 - Pod - Service - Ingress - 运维 - 监控 - 故障排查 - 应用升级 ## k8s部署Java项目流程 - 制作镜像【Dockerfile】 - 上传到镜像仓库【Dockerhub、阿里云、网易】 - 控制器部署镜像【Deployment】 - 对外暴露应用【Service、Ingress】 - 运维【监控、升级】 ## k8s部署Java项目 ### 准备Java项目 第一步,准备java项目,把java进行打包【jar包或者war包】 ![image-20201121213239222](https://img.kancloud.cn/5d/40/5d40950179e2d0a58e840965f8b979ef_740x291.png) ### 依赖环境 在打包java项目的时候,我们首先需要两个环境 - java环境【JDK】 - maven环境 然后把java项目打包成jar包 ```bash mvn clean install ``` ![image-20201121213654216](https://img.kancloud.cn/d6/55/d655f6bc61574a689a2d058fe572e309_736x344.png) ### 编写Dockerfile文件 Dockerfile 内容如下所示 ```bash FROM openjdk:8-jdk-alpine VOLUME /tmp ADD ./target/demojenkins.jar demojenkins.jar ENTRYPOINT ["java","-jar","/demojenkins.jar", "&"] ``` ### 制作镜像 在我们创建好Dockerfile文件后,我们就可以制作镜像了 我们首先将我们的项目,放到我们的服务器上 ![image-20201121214251023](https://img.kancloud.cn/d0/1d/d01d45d2f7d99349f90aa469522a6b9a_788x172.png) 然后执行下面命令打包镜像 ```bash docker build -t java-demo-01:latest . ``` 等待一段后,即可制作完成我们的镜像 ![image-20201121214701015](https://img.kancloud.cn/ad/4a/ad4ac4afbf488f2a37e3962363ae9a30_516x258.png) 最后通过下面命令,即可查看我们的镜像了 ```BASH docker images; ``` ### 启动镜像 在我们制作完成镜像后,我们就可以启动我们的镜像了 ```bash docker run -d -p 8111:8111 java-demo-01:latest -t ``` 启动完成后,我们通过浏览器进行访问,即可看到我们的java程序 ```bash http://192.168.177.130:8111/user ``` ### 推送镜像 下面我们需要将我们制作好的镜像,上传到镜像服务器中【阿里云、DockerHub】 首先我们需要到 阿里云 [容器镜像服务](https://cr.console.aliyun.com/cn-hangzhou/instances/repositories),然后开始创建镜像仓库 ![image-20201121223435851](https://img.kancloud.cn/c9/04/c9049b0981c1f7b4f63cd28c64c98652_780x686.png) 然后选择本地仓库 ![image-20201121223516789](https://img.kancloud.cn/58/87/588761b0fd19f9e91f1e607588de1f99_772x328.png) 我们点击我们刚刚创建的镜像仓库,就能看到以下的信息 ![image-20201121224233092](https://img.kancloud.cn/43/dd/43dd0c08d3994934a2c069a250027d8c_806x862.png) #### 登录镜像服务器 使用命令登录 ```bash docker login --username=XXXXXXX@163.com registry.cn-shenzhen.aliyuncs.com ``` 然后输入刚刚我们开放时候的注册的密码 #### 镜像添加版本号 下面为我们的镜像添加版本号 ```bash # 实例 docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:[镜像版本号] # 举例 docker tag 33f11349c27d registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0 ``` 操作完成后 ![image-20201121224609890](https://img.kancloud.cn/90/f3/90f3d492a1d401cd1fa5e5df7a3f3d20_1005x70.png) #### 推送镜像 在我们添加版本号信息后,我们就可以推送我们的镜像到阿里云了 ```bash docker push registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0 ``` ![image-20201121224714068](https://img.kancloud.cn/c8/3c/c83c973992db1149eb398a944e75d563_911x107.png) 操作完成后,我们在我们的阿里云镜像服务,就能看到推送上来的镜像了 ![image-20201121224858651](https://img.kancloud.cn/60/6e/606e1f15f3836bde50dc2860ff01917a_1216x321.png) ### 控制器部署镜像 在我们推送镜像到服务器后,就可以通过控制器部署镜像了 首先我们需要根据刚刚的镜像,导出yaml ```bash # 导出yaml kubectl create deployment javademo1 --image=registry.cn- shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0 --dry-run -o yaml > javademo1.yaml ``` 导出后的 javademo1.yaml 如下所示 ```bash apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: javademo1 name: javademo1 spec: replicas: 1 selector: matchLabels: app: javademo1 strategy: {} template: metadata: creationTimestamp: null labels: app: javademo1 spec: containers: - image: registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0 name: java-project-01 resources: {} status: {} ``` 然后通过下面命令,通过yaml创建我们的deployment ```bash # 创建 kubectl apply -f javademo1.yaml # 查看 pods ``` ![image-20201121225413122](https://img.kancloud.cn/af/f6/aff6d18b338daba75a21c98d371b4af1_561x102.png) 或者我们可以进行扩容,多创建几个副本 ```bash kubectl scale deployment javademo1 --replicas=3 ``` ![image-20201121225600554](https://img.kancloud.cn/b7/cb/b7cb2f301e8690a4930446b7dbc4bfee_661x231.png) 然后我们还需要对外暴露端口【通过service 或者 Ingress】 ```bash # 对外暴露端口 kubectl expose deployment javademo1 --port=8111 --target-port=8111 --type=NodePort # 查看对外端口号 kubectl get svc ``` ![image-20201121225818003](https://img.kancloud.cn/8a/b1/8ab183f56a21775f5f31d5f2471f88a5_667x80.png) 然后通过下面的地址访问 ```bash # 对内访问 curl http://10.106.103.242:8111/user # 对外访问 http://192.168.177.130:32190/user ``` ### 运维 ....