与Java相关的,看个热闹

如何在k8s集群中部署Java项目

容器交付流程

  • 开发代码阶段
    • 编写代码
    • 编写Dockerfile【打镜像做准备】
  • 持续交付/集成
    • 代码编译打包
    • 制作镜像
    • 上传镜像仓库
  • 应用部署
    • 环境准备
    • Pod
    • Service
    • Ingress
  • 运维

    • 监控
    • 故障排查
    • 应用升级

      k8s部署Java项目流程

  • 制作镜像【Dockerfile】

  • 上传到镜像仓库【Dockerhub、阿里云、网易】
  • 控制器部署镜像【Deployment】
  • 对外暴露应用【Service、Ingress】
  • 运维【监控、升级】

    k8s部署Java项目

    准备Java项目

    第一步,准备java项目,把java进行打包【jar包或者war包】
    Kubernetes容器交付介绍 - 图1

    依赖环境

    在打包java项目的时候,我们首先需要两个环境

  • java环境【JDK】

  • maven环境

然后把java项目打包成jar包

  1. mvn clean installCopy to clipboardErrorCopied

Kubernetes容器交付介绍 - 图2

编写Dockerfile文件

Dockerfile 内容如下所示

  1. FROM openjdk:8-jdk-alpine
  2. VOLUME /tmp
  3. ADD ./target/demojenkins.jar demojenkins.jar
  4. ENTRYPOINT ["java","-jar","/demojenkins.jar", "&"]Copy to clipboardErrorCopied

制作镜像

在我们创建好Dockerfile文件后,我们就可以制作镜像了
我们首先将我们的项目,放到我们的服务器上
Kubernetes容器交付介绍 - 图3
然后执行下面命令打包镜像

  1. docker build -t java-demo-01:latest .Copy to clipboardErrorCopied

等待一段后,即可制作完成我们的镜像
Kubernetes容器交付介绍 - 图4
最后通过下面命令,即可查看我们的镜像了

  1. docker images;Copy to clipboardErrorCopied

启动镜像

在我们制作完成镜像后,我们就可以启动我们的镜像了

  1. docker run -d -p 8111:8111 java-demo-01:latest -tCopy to clipboardErrorCopied

启动完成后,我们通过浏览器进行访问,即可看到我们的java程序

  1. http://192.168.177.130:8111/userCopy to clipboardErrorCopied

推送镜像

下面我们需要将我们制作好的镜像,上传到镜像服务器中【阿里云、DockerHub】
首先我们需要到 阿里云 容器镜像服务,然后开始创建镜像仓库
Kubernetes容器交付介绍 - 图5
然后选择本地仓库
Kubernetes容器交付介绍 - 图6
我们点击我们刚刚创建的镜像仓库,就能看到以下的信息
Kubernetes容器交付介绍 - 图7

登录镜像服务器

使用命令登录

  1. docker login --username=XXXXXXX@163.com registry.cn-shenzhen.aliyuncs.comCopy to clipboardErrorCopied

然后输入刚刚我们开放时候的注册的密码

镜像添加版本号

下面为我们的镜像添加版本号

  1. # 实例
  2. docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:[镜像版本号]
  3. # 举例
  4. docker tag 33f11349c27d registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0Copy to clipboardErrorCopied

操作完成后
Kubernetes容器交付介绍 - 图8

推送镜像

在我们添加版本号信息后,我们就可以推送我们的镜像到阿里云了

  1. docker push registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0Copy to clipboardErrorCopied

Kubernetes容器交付介绍 - 图9
操作完成后,我们在我们的阿里云镜像服务,就能看到推送上来的镜像了
Kubernetes容器交付介绍 - 图10

控制器部署镜像

在我们推送镜像到服务器后,就可以通过控制器部署镜像了
首先我们需要根据刚刚的镜像,导出yaml

  1. # 导出yaml
  2. kubectl create deployment javademo1 --image=registry.cn-
  3. shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0 --dry-run -o yaml > javademo1.yamlCopy to clipboardErrorCopied

导出后的 javademo1.yaml 如下所示

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. creationTimestamp: null
  5. labels:
  6. app: javademo1
  7. name: javademo1
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: javademo1
  13. strategy: {}
  14. template:
  15. metadata:
  16. creationTimestamp: null
  17. labels:
  18. app: javademo1
  19. spec:
  20. containers:
  21. - image: registry.cn-shenzhen.aliyuncs.com/mogublog/java-project-01:1.0.0
  22. name: java-project-01
  23. resources: {}
  24. status: {}Copy to clipboardErrorCopied

然后通过下面命令,通过yaml创建我们的deployment

  1. # 创建
  2. kubectl apply -f javademo1.yaml
  3. # 查看 podsCopy to clipboardErrorCopied

Kubernetes容器交付介绍 - 图11
或者我们可以进行扩容,多创建几个副本

  1. kubectl scale deployment javademo1 --replicas=3Copy to clipboardErrorCopied

Kubernetes容器交付介绍 - 图12
然后我们还需要对外暴露端口【通过service 或者 Ingress】

  1. # 对外暴露端口
  2. kubectl expose deployment javademo1 --port=8111 --target-port=8111 --type=NodePort
  3. # 查看对外端口号
  4. kubectl get svcCopy to clipboardErrorCopied

Kubernetes容器交付介绍 - 图13
然后通过下面的地址访问

  1. # 对内访问
  2. curl http://10.106.103.242:8111/user
  3. # 对外访问
  4. http://192.168.177.130:32190/userCopy to clipboardErrorCopied

运维

….