区块链技术博客
www.b2bchain.cn

k8s部署 JAVAWEB 理论+实战全过程(图文)的讲解

这篇文章主要介绍了k8s部署 JAVAWEB 理论+实战全过程(图文)的讲解,通过具体代码讲解7776并且分析了k8s部署 JAVAWEB 理论+实战全过程(图文)的讲解的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了k8s部署 JAVAWEB 理论+实战全过程(图文)的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7776.html。具体如下:

目录

  • 简述
  • 一、制作镜像(Master节点)
    • 1.概念
    • 2.操作
  • 二、创建控制器管理pod
    • 1.pod
      • 1.1概念
      • 1.2作用
      • 1.3实现机制
    • 2.Deployment 无状态部署
      • 2.1概念
      • 2.2特点
      • 2.3功能
    • 3.Yaml
    • 4.操作
  • 三、Pod数据持久化
  • 四、暴露应用
    • 1.Service
      • 1.1概念
      • 1.2作用
      • 1.3服务类型
    • 2.操作
    • 3.访问测试
  • 五、对外发布应用

简述

之前通过docker部署了Javaweb项目,现在将项目移植到k8s平台
**主要分为五个部分
1.要以镜像作为交付对象,不再以jar包、war包形式
2.在docker可以直接上传镜像运行容器,在k8s需要编写yaml文件,通过控制器去管理镜像
3.进行一些数据的挂载
4.部署完成后要将容器或pod暴露出去
5.对应用pod进行一下日志的采集和监控,方便做数据分析、历史资源利用率检查和告警等
**

一、制作镜像(Master节点)

1.概念

主要是基础镜像制作,服务镜像制作,以及项目镜像制作,将制作好的镜像打包发布到仓库中或者留在本地

2.操作

主要使用Dockerfile 之前需准备好打包好的war包,数据库等,放在同一目录下,进行dockerfile 1.vi Dockerfile FROM tomcat  //这里可以使用本地进行镜像或者进行远程仓库拉取 MAINTAINER  作者名 COPY *.war /usr/local/tomcat/webapps //将war包放到tomcat webapps下 2.docker build .   //生成镜像 3.docker tag       //打标签 4.docker login --username=阿里用户名 registry.cn-beijing.aliyuncs.com   docker tag [ImageId] registry.cn-beijing.aliyuncs.com/空间名/仓库名:[镜像版本号]   docker push registry.cn-beijing.aliyuncs.com/空间名/仓库名:[镜像版本号]    // 发布到远程仓库 这里使用的阿里云进行镜像仓库 也可以使用dockerhub 

注意这里可以之间在node节点上拉取所需镜像


k8s部署 JAVAWEB 理论+实战全过程(图文)
k8s部署 JAVAWEB 理论+实战全过程(图文)
k8s部署 JAVAWEB 理论+实战全过程(图文)
k8s部署 JAVAWEB 理论+实战全过程(图文)

二、创建控制器管理pod

用k8s控制器去部署,一般选择有
Deployment:无状态部署
StatefulSet:有状态部署
DaemonSet:守护进程部署
Job & CronJob:批处理

这里选择Deployment 无状态部署

1.pod

1.1概念

最小的部署单元
一组容器的集合
一个Pod中的容器共享网络命名空间和存储
Pod是短暂的

1.2作用

两个应用直接发送文件交互
两个应用需要通过127.0.0.1或者socket通信
两个应用需要发生频发的调用

1.3实现机制

共享网络
多个容器在一个网络命名空间里
共享存储
数据卷中存储临时数据、日志、业务数据emtmyDir,多个容器之间数据共享

2.Deployment 无状态部署

2.1概念

Deployment同样也是Kubernetes系统的一个核心概念,主要职责和RC一样的都是保证Pod的数量和健康,二者大部分功能都是完全一致的,我们可以看成是一个升级版的RC控制器

2.2特点

Deployment具备RC的全部功能
事件和状态查看:可以查看Deployment的升级详细进度和状态
回滚:当升级Pod的时候如果出现问题,可以使用回滚操作回滚到之前的任一版本
版本记录:每一次对Deployment的操作,都能够保存下来,这也是保证可以回滚到任一版本的基础
暂停和启动:对于每一次升级都能够随时暂停和启动

2.3功能

部署”无状态应用”
管理Pod和ReplicaSet
具有上线部署、副本设定、滚动升级、回滚等功能
提供声明式更新,例如只更新一个新的 image

3.Yaml

是一个可读性高,用来表达数据序列化的格式
k8s部署 JAVAWEB 理论+实战全过程(图文)

4.操作

1.vi deployment.yaml apiVersion: apps/v1         //apiserver 版本  kind: Deployment            //指定创建资源的角色/类型  这里使用的是deployment metadata:                   //资源的元数据/属性   name: myshop              //资源的名字,在同一个namespace中必须唯一   spec:                       //定该资源的内容    replicas: 2               //指定副本个数   selector:     matchLabels:       app: myshop1.0       //自定义注解名字   template:     metadata:       labels:         app: myshop1.0     spec:       volumes:         - name: myshop           hostPath:             path: "/ca"       containers:         - name: myshop01     //容器的名字             image: registry.cn-beijing.aliyuncs.com/erosion/erosionhub:myshop1.0   //容器镜像地址           imagePullPolicy: IfNotPresent   //每次启动时检查和更新(从registery)images的策略           volumeMounts:             - mountPath: /root/app/ca               name: myshop 2.kubectl create -f deployment.yaml  //创建pod 


k8s部署 JAVAWEB 理论+实战全过程(图文)
k8s部署 JAVAWEB 理论+实战全过程(图文)

三、Pod数据持久化

主要是对一个应用程序,比如开发一个项目,这个项目有没有落地到本地文件,如果有落的话,就保证他持久的有了,那就必须要用到pod数据的持久化了
具体详解

https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes
因为这里使用的是静态网站 不需要用到

四、暴露应用

1.Service

Pod的生命是有限的,死亡过后不会复活了。RC和Deployment可以用来动态的创建和销毁Pod。尽管每个Pod都有自己的IP地址,但是如果Pod重新启动了的话那么它的IP很有可能也就变化了。这就会带来一个问题:比如我们有一些后端的Pod的集合为集群中的其他前端的Pod集合提供API服务,如果我们在前端的Pod中把所有的这些后端的Pod的地址都写死了,然后去某种方式去访问其中一个Pod的服务,这样看上去是可以正常工作的,但是如果这个Pod挂掉了,然后重新启动起来了,IP地址非常有可能就变了,这个时候前端就极大可能访问不到后端的服务了。这就需要用到Service

1.1概念

Service是一种抽象的对象,它定义了一组Pod的逻辑集合和一个用于访问它们的策略,这个概念和微服务非常类似

1.2作用

防止Pod失联(服务发现)
定义一组Pod的访问策略(负载均衡)

1.3服务类型

ClusterIP:通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的服务类型。
NodePort:通过每个 Node 节点上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 ,可以从集群的外部访问一个 NodePort 服务。
LoadBalancer:使用公有云提供商的负载均衡器,可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务,这个需要结合具体的云厂商进行操作。
ExternalName:不常用, 是 Service 的特例,它没有 selector,也没有定义任何的端口和 Endpoint。 对于运行在集群外部的服务,它通过返回该外部服务的别名这种方式来提供服务。通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容

2.操作

创建一个service.yaml 1.vi service.yaml apiVersion: v1 kind: Service metadata:   name: myshop   namespace: test spec:   selector:     project: www     app: myshop1.0   ports:   - name: myshop     port: 80     targetPort: 8080        //暴露端口 2.kubectl create -f service.yaml 


k8s部署 JAVAWEB 理论+实战全过程(图文)

3.访问测试

注意 到这一步已经可以在本地测试网站是否部署成功

http://masterip:(自定义端口)/ 

k8s部署 JAVAWEB 理论+实战全过程(图文)

五、对外发布应用

Ingress其实就是从 kuberenets 集群外部访问集群的一个入口,将外部的请求转发到集群内不同的 Service 上,其实就相当于 nginx、haproxy 等负载均衡代理服务器,会想到直接使用 nginx 就实现了,但是只使用 nginx 这种方式有很大缺陷,每次有新服务加入的时候怎么改 Nginx 配置?不可能去手动更改或者滚动更新前端的 Nginx 的Pod 。
如果再加上一个服务发现的工具的话其实就可以了,Ingress 实际上就是这样实现的,只是服务发现的功能自己实现了,不需要使用第三方的服务了,然后再加上一个域名规则定义,路由信息的刷新需要一个靠 Ingress controller 来提供。
Ingress controller 可以理解为一个监听器,通过不断地与 kube-apiserver 打交道,实时的感知后端 service、pod 的变化,当得到这些变化信息后,Ingress controller 再结合 Ingress 的配置,更新反向代理负载均衡器,达到服务发现的作用

k8s部署 JAVAWEB 理论+实战全过程(图文)

本文地址https://www.b2bchain.cn/7776.html

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » k8s部署 JAVAWEB 理论+实战全过程(图文)的讲解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们