十分钟教你在 k8s 中部署一个前后端应用

这篇具有很好参考价值的文章主要介绍了十分钟教你在 k8s 中部署一个前后端应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载至我的博客https://www.infrastack.cn ,公众号:架构成长指南

大家好,我是蜗牛哥,好多开发人员,尤其是没接触过 k8s 的人员对如何在k8s中部署一个 前后端应用很模糊,不知如何下手,所以本篇讲一下如何快速在 k8s 部署一个前后端应用,让大家对k8s有个快速认识

前置依赖

  • k8s集群,如果没有安装,请参考k8s 部署手册
  • kubectl ,客户端部署需要依赖

应用镜像构建

应用镜像构建不用自己去执行,相关镜像已经推送到 docker hub仓库,如果要了解过程和细节,可以看一下,否则直接跳到k8s yaml 文件配置章节

Java应用镜像构建

代码地址:https://github.com/dongweizhao/backend

Java应用打包

调用sh package.sh会执行mvn的package命令,进行打包

编写Dockerfile

从target目录复制可执行jar

FROM openjdk:8-jre
COPY target/backend-0.0.1-SNAPSHOT.jar /app.jar
ENTRYPOINT java -jar ${JAVA_OPTS} /app.jar

镜像打包推送

执行sh push.sh 推送至dockerhub仓库,镜像地址:dweizhao/backend:latest

前端应用镜像构建

代码地址:https://github.com/dongweizhao/frontend
前端项目结构如下

采用百度低代码平台amis进行开发

编写Dockerfile

拷贝前端工程dist目录至/frontend,并进行目录授权

from nginx
copy ./dist /frontend
run chown nginx.nginx /frontend -R
copy nginx.conf /etc/nginx/conf.d/default.conf

编写nginx.conf文件

server{
    listen 80;
    server_name localhost;
     root  /frontend;
     index index.html index.htm;

     location /login {
             try_files $uri $uri/ /login.html;
     }
}

推送镜像

执行sh push.sh推送dockerhub仓库,镜像地址:dweizhao/frontend:latest

k8s yaml文件配置

以下是我们部署的服务在k8s 中路由示意图

后端服务配置

backend-dp.yaml

由于我们服务是无状态服务,使用Deployment进行部署,Deployment拥有更加灵活强大的升级、回滚功能,并且支持滚动更新

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  backend
spec:
  selector:
    matchLabels:
      app:  backend
  replicas: 1
  template:
    metadata:
      labels:
        # service 会根据此标签来查找此pod
        app:  backend
        version: latest
    spec:
      containers:
        - name: backend
          image: "dweizhao/backend:latest"
          imagePullPolicy: Always

backend-svc.yaml

Service相当于Spring cloud中Ribbon的作用,提供了服务发现和负载均衡的功能,而不用关心具体服务实例有多少个,在 k8s 的服务实例就是Pod,这里我们使用ClusterIP类型,因为是通过Ingress在集群内访问,通过 app:backend标签,来查找对应 pod,所以 pod 的label 必须包含app:backend

apiVersion: v1
kind: Service
metadata:
  name: backend
spec:
  type: ClusterIP
  ports:
    - name: backend-http
      port: 8080
      targetPort: 8080
      protocol: TCP
  selector:
    # 根据标签查找 pod
    app: backend

前端服务配置

frontend-dp.yaml

前端镜像是一个 nginx的,

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  frontend
spec:
  selector:
    matchLabels:
      app:  frontend
  replicas: 1
  template:
    metadata:
      labels:
        # service 会根据此标签来查找此pod
        app:  frontend
        version: latest
    spec:
      containers:
        - name: frontend
          image: "dweizhao/frontend:latest"
          imagePullPolicy: Always

frontend-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: frontend
spec:
  type: ClusterIP
  ports:
    - name: frontend-http
      port: 80
      targetPort: 80
      protocol: TCP
  selector:
    # 根据标签查找 pod
    app: frontend

Ingress配置

Ingress相当于nginx 的作用,匹配url转发请求至Service

注意:k8s不同的版本,对应的Ingress apiVerson 有点细微差别,所以要找到对应k8s版本的Ingress,我们的 k8s 版本为v1.25.13

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  ingressClassName: nginx
  rules:
    - host: k8sdemo.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: frontend
              port:
                number: 80
        #backend开头的 url,转发到后端服务 ,否则都转发到前端服务              
        - path: /backend
          pathType: Prefix
          backend:
            service:
              name: backend
              port:
                number: 8080

k8s部署

部署使用 kubectl 进行部署,如果没有请先安装,安装完成以后,把以上yaml文件保存至本地

创建命名空间

kubectl create namespace k8sdemo

部署

部署系统至k8sdemo空间下

kubectl create namespace k8sdemo && kubectl apply -f backend-dp.yaml -f backend-svc.yaml -f frontend-dp.yaml -f frontend-svc.yaml -f ingress.yaml -n k8sdemo

查看系统状态

#查看pod 启动状态
kubectl get pods -n k8sdemo
# 查看服务状态
kubectl get svc -n k8sdemo
# 查看Ingress状态
kubectl get ingress -n k8sdemo

host 解析

在 hosts 文件中,对k8sdemo.com域名映射,映射到k8s 的任意 node 节点上即可,假设IP为172.18.2.53,配置如下

172.18.2.53 k8sdemo.com

测试

在浏览器访问k8sdemo.com,如果出现以下结果则部署成功,可以看到正确请求到数据,这个数据为backend提供

总结

以上我们只是简单演示了下,如何在 k8s 中快速部署一个前后端应用,让你对在 k8s 操作有一个快速认识,但是此应用如果要在生产使用还要在做些配置,比如探针配置,因为后端服务的启动,可能是个假启动,必须要配置探针探活之后,才能让 service访问,否则导致请求异常,同时应用有些文件如果需要持久化,还需要配置存储卷等操作

扫描下面的二维码关注我们的微信公众帐号,在微信公众帐号中回复◉加群◉即可加入到我们的技术讨论群里面共同学习。文章来源地址https://www.toymoban.com/news/detail-783859.html

到了这里,关于十分钟教你在 k8s 中部署一个前后端应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 十分钟教你学会JAVA中的学生管理系统

    十分钟教你学会JAVA中的学生管理系统

      目录 创建学生类 测试类中主界面的代码编写 添加学生信息的代码编写 (addStuent) 删除学生信息的代码编写 (deleteStudent) 修改学生信息的代码编写 (updateStudent) 查看学生信息的代码编写(findAllStudent) 检索每个类中的学号代码编写(nameUsed) 学生系统的简要概括:通过Array L

    2024年02月13日
    浏览(45)
  • Alist安装教程,十分钟搭建一个属于自己的网盘系统

    Alist安装教程,十分钟搭建一个属于自己的网盘系统

    不想看文档的的,可以看bilibili上的视频教程:网盘这样用,也太爽了!- 神器 AList 详细使用教程 | 网盘整合、在线播放、WebDAV_哔哩哔哩_bilibili 官网地址:https://alist.nn.ci/ AList是一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动。简单的来说就是

    2024年02月04日
    浏览(210)
  • 十分钟部署清华ChatGLM-6B,实测效果还可以~~(Linux版)

    十分钟部署清华ChatGLM-6B,实测效果还可以~~(Linux版)

    前段时间,清华公布了中英双语对话模型  ChatGLM-6B ,具有60亿的参数,初具问答和对话功能。最!最!最重要的是它能够支持私有化部署,大部分实验室的服务器基本上都能跑起来。 因为条件特殊,实验室网络不通,那么如何进行离线部署呢? 经过一上午的折腾终于搞定了

    2024年02月08日
    浏览(22)
  • Centos/Ubuntu离线部署清华chatGLM(特别详细,十分钟搞定)

    Centos/Ubuntu离线部署清华chatGLM(特别详细,十分钟搞定)

    引言 前段时间,清华公布了中英双语对话模型 ChatGLM-6B,具有60亿的参数,初具问答和对话功能。最!最!最重要的是它能够支持私有化部署,大部分实验室的服务器基本上都能跑起来。因为条件特殊,实验室网络不通,那么如何进行离线部署呢?经过一下午的折腾终于搞定

    2023年04月20日
    浏览(9)
  • 还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件

    还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件

    你是否曾考虑过创建自己的 Chrome 插件,但又挠头毫无思路?那么在接下来的几分钟里,我不仅会介绍 Chrome 浏览器扩展的基本知识,还会指导你通过五个简单的步骤来制作自己的扩展。 知道怎么做吗?让我们一探究竟! 今年我们见证了人工智能能力的爆炸式增长。虽然cha

    2024年02月10日
    浏览(45)
  • 【Microsoft Azure 的1024种玩法】五十四. 十分钟快速上手创建部署Azure speech服务

    【Microsoft Azure 的1024种玩法】五十四. 十分钟快速上手创建部署Azure speech服务

    Azure语音服务是Microsoft提供稳定可靠的云通信服务,其在单个 Azure 订阅中统合了语音转文本、文本转语音以及语音翻译功能,我们可以通过各种方式(语音 CLI、语音 SDK、Speech Studio )来实现语音转文本、文本转语音等功能,本篇文档主要介绍了如何快速上手创建部署Azure sp

    2024年02月12日
    浏览(14)
  • 【Microsoft Azure 的1024种玩法】三十三.十分钟快速部署 Azure Kubernetes Service 群集

    【Microsoft Azure 的1024种玩法】三十三.十分钟快速部署 Azure Kubernetes Service 群集

    Azure Kubernetes 服务 (AKS) 通过将操作开销卸载到 Azure,简化了在 Azure 中部署托管 Kubernetes 群集的过程。 作为一个托管的 Kubernetes 服务,Azure 可以自动处理运行状况监视和维护等关键任务,本篇文章要分享的内容是如何在Azure中使用十分钟快速部署 Azure Kubernetes Service 群集 【Mi

    2024年02月05日
    浏览(24)
  • 零编程经验,通过 GPT-4 十分钟开发了一个浏览器插件,并成功运行,实现了需求目标!

    零编程经验,通过 GPT-4 十分钟开发了一个浏览器插件,并成功运行,实现了需求目标!

    大佬蓝鸟ID: sundyme 零编程经验,通过 GPT-4 十分钟开发了一个浏览器插件,并成功运行,实现了需求目标!太不可思意了,真正体会到了自然语言编程的魅力! 下一步是利用Pinterest 的 API 接口实现自动发图,已经生成好了代码和步骤(看着挺靠谱),等明天开发者权限审核下

    2023年04月08日
    浏览(42)
  • 十分钟入门Zigbee

    十分钟入门Zigbee

    大部分教程通常都是已Zigbee原理开始讲解和学习,各种概念让初学者难以理解。本教程从一个小白的角度出发,入门无需任何Zigbee底层原理知识,只需要基本的MCU研发经验就可以掌握,让您快速实现zigbee组网和节点之间通信。 本教程采用泰凌微TLSR8258芯片,芯片资料链接TLS

    2023年04月09日
    浏览(52)
  • 每天十分钟学会Spark

    每天十分钟学会Spark

    Spark是什么 Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 Spark官网:http://spark.apache.org/ Spark的特点 1、快速   一般情况下,对于迭代次数较多的应用程序,Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100多倍,在磁盘上的运行速度是Hadoop MapRedu

    2024年03月18日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包