k8s+docker部署前后端分离项目

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

目录

环境准备

1、k8s集群

2、harbor远程仓库

部署前后端分离项目

生成vue镜像(所有子节点都需要操作)

1、将前端vue项目打包得到dist.zip

2、创建nginx的配置文件default.conf

3、创建Dockerfile文件

4、生成vue镜像

5、打标签

6、推到harbor仓库

7、查看生成的镜像

生成jar包镜像(所有子节点都需要操作)

1、获得jar包

2、创建Dockerfile

3、生成jar包镜像

4、打标签

5、推到harbor仓库

6、查看生成的镜像

k8s容器部署前后端项目(主节点操作)

1、选择合适位置创建java-vue.yaml文件

2、查看pod

3、查看deployment

4、查看service

5、查看部署好的页面

可能遇到的命令

镜像相关

pod相关

查看pod日志

可能遇到的问题

1、删除镜像时,重复镜像ID的镜像删除

2、"worker_processes" directive is not allowed here

3、本地登录验证码测试正常,使用docker上线后报空指针问题


环境准备

1、k8s集群

主节点master:192.168.3.200

子节点node1:192.168.3.201

子节点node2:192.168.3.202

安装方式略。

2、harbor远程仓库

http://192.168.3.200,输入用户名密码登录,初始用户名为admin,密码配置在【harbor.cfg】配置文件中的【harbor_admin_password】属性。

k8s+docker部署前后端分离项目

部署在主节点上,需要在harbor目录下输入命令,常用命令如下:

# 查看harbor服务状态
docker-compose ps

# 重启harbor
docker-compose restart

# 打标签,例如
docker tag centos:7 192.168.3.200/library/centos:7

# 上传,例如
docker push 192.168.3.200/library/centos:7

# 下载,例如
docker pull 192.168.3.200/library/centos:7

docker和harbor之间交互的基本使用

        配置http镜像仓库可信任(docker默认是通过https访问harbor的,但是私有仓库是在公司内网的话,没有必要配置https, 所以我们要在daemon.json配置harbor服务器地址被docker认为是可信任的站点;如果docker通过https访问harbor,就不需要进行如下设置)。

我的daemon.json位置在:/etc/docker/daemon.json

配置内容如下:

{
 "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],"insecure-registries":["192.168.3.200"]
}

修改完后需要重启docker,因为harbor也是运行在docker容器里的。

部署前后端分离项目

我这里的项目是由Spring Boot+vue组成。

生成vue镜像(所有子节点都需要操作)

1、将前端vue项目打包得到dist.zip

上传到服务器中合适的位置,上传完成后解压:unzip dist.zip

2、创建nginx的配置文件default.conf

在dist同级目录创建default.conf文件:sudo vim default.conf

这里以我的项目为例:

server {
    listen       9000;
    server_name  localhost;

    location /DLHYXT/dsmMgr {
        root   /BJ/;
        proxy_set_header Host  $host;
        try_files $uri $uri/ /DLHYXT/dsmMgr/index.html $uri/ =404;
        index  index.html index.htm;
    }

    location /api/v1/note {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.3.200:32081;
    }

    location /api/v1/dsm {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.3.200:32351;
    }

    location /randCodeImage {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://192.168.3.200:32081;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

}

3、创建Dockerfile文件

同级目录下创建Dockerfile文件:sudo vim Dockerfile

# 基于nginx镜像
FROM nginx:latest

# 作者
MAINTAINER "ly"

# 描述
LABEL description="VUE TODO"

# 将打包文件复制到nginx镜像目录下
COPY dist/ /BJ/DLHYXT/dsmMgr/

# 配置文件复制到nginx镜像中对应的目录下
COPY default.conf /etc/nginx/conf.d/default.conf

env LANG=C.UTF-8

4、生成vue镜像

执行docker build -f Dockerfile -t web-todo .

最后的.表示Dockerfile在当前目录,-t设置生成的镜像名称。

当只有一个Dockerfile的时候,可以省略-f,即:

docker build -t web-todo .

k8s+docker部署前后端分离项目

看到Successfully则表示成功,执行成功后可以通过docker images |grep web-todo查看已生成的镜像。

5、打标签

docker tag web-todo:latest 192.168.3.200/library/web-todo:v1

6、推到harbor仓库

docker push 192.168.3.200/library/web-todo:v1

k8s+docker部署前后端分离项目  

注意:第一次需要登录harbor:docker login 192.168.3.200,输入用户名密码即可推送成功。

7、查看生成的镜像

docker images

k8s+docker部署前后端分离项目

生成jar包镜像(所有子节点都需要操作)

1、获得jar包

通过编译器打包获得对应的后端jar包,然后上传到服务器对应位置

2、创建Dockerfile

jar包同级目录下创建:sudo vim Dockerfile

由于我的是两个jar包,所以需要创建两个Dockerfile,分别为:

DockerfileDsm

# jdk基础镜像
FROM frolvlad/alpine-oraclejdk8:slim

# 容器中创建目录
RUN mkdir -p /usr/local/dsm

# 编译后的jar包copy到容器中创建到目录内
COPY hy-dsm-service.jar /usr/local/dsm/dsm.jar

# 指定容器启动时要执行的命令
ENTRYPOINT ["java","-jar","/usr/local/dsm/dsm.jar"]

DockerfileNote

FROM frolvlad/alpine-oraclejdk8:slim

RUN mkdir -p /usr/local/note

COPY note-0.0.1-SNAPSHOT.jar /usr/local/note/note.jar

ENTRYPOINT ["java","-jar","/usr/local/note/note.jar"]

3、生成jar包镜像

docker build -f DockerfileDsm -t dsm-k8s .

docker build -f DockerfileNote -t note-k8s .

k8s+docker部署前后端分离项目  

4、打标签

docker tag dsm-k8s:latest 192.168.3.200/library/dsm-k8s:v1

docker tag note-k8s:latest 192.168.3.200/library/note-k8s:v1

5、推到harbor仓库

docker push 192.168.3.200/library/dsm-k8s:v1

docker push 192.168.3.200/library/note-k8s:v1

k8s+docker部署前后端分离项目  

6、查看生成的镜像

docker images

k8s+docker部署前后端分离项目

k8s容器部署前后端项目(主节点操作)

1、选择合适位置创建java-vue.yaml文件

k8s管理项目主要是靠yaml,这次部署的java-vue.yaml如下

# vue资源的类型/角色:deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-todo
  # 命名空间无
  namespace: default
  labels:
    app: web-todo
spec:
  replicas: 1 # 副本数量为1
  selector:
    matchLabels:
      app: web-todo
  template:
    metadata:
      labels:
        app: web-todo
    spec:
      imagePullSecrets:
      - name: harbor-secret
      containers:
      - name: web-todo
        # 镜像获取地址
        image: 192.168.3.200/library/web-todo:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9000
          name: web-todo
        resources:
          requests:
            memory: 300Mi
            cpu: 0.4
          limits:
            memory: 500Mi
            cpu: 1
---
# vue资源的类型/角色:svc
kind: Service
apiVersion: v1
metadata:
  name: web-todo
  namespace: default
  labels:
    app: web-todo
spec:
  type: NodePort
  ports:
  - port: 9000
    nodePort: 30260 #service对外开放端口
  selector:
    app: web-todo
---
# dsm jar资源的类型/角色:svc
apiVersion: v1
kind: Service
metadata:
  name: dsm-k8s
  namespace: default
  labels:
    app: dsm-k8s
spec:
  type: NodePort
  ports:
  - port: 9093
    nodePort: 32351 #service对外开放端口
  selector:
    app: dsm-k8s
---
# dsm jar资源的类型/角色:deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: dsm-k8s
  name: dsm-k8s
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dsm-k8s
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: dsm-k8s
    spec:
      containers:
      - image: 192.168.3.200/library/dsm-k8s:v1
        name: dsm-k8s
	imagePullPolicy: Never
        resources: {}
status: {}
---
# note jar资源的类型/角色:svc
apiVersion: v1
kind: Service
metadata:
  name: note-k8s
  namespace: default
  labels:
    app: note-k8s
spec:
  type: NodePort
  ports:
  - port: 8094
    nodePort: 32081 #service对外开放端口
  selector:
    app: note-k8s
---
# note jar资源的类型/角色:svc
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: note-k8s
  name: note-k8s
spec:
  replicas: 2
  selector:
    matchLabels:
      app: note-k8s
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: note-k8s
    spec:
      containers:
      - image: 192.168.3.200/library/note-k8s:v1
        name: note-k8s
	imagePullPolicy: Never
        resources: {}
status: {}

执行命令:

kubectl create -f java-vue.yaml

2、查看pod

kubectl get pods -o wide

如果pod都在running状态,表示项目就都起好了。

k8s+docker部署前后端分离项目

3、查看deployment

kubectl get deployment

k8s+docker部署前后端分离项目  

4、查看service

kubectl get svc

k8s+docker部署前后端分离项目

5、查看部署好的页面

k8s+docker部署前后端分离项目

可能遇到的命令

镜像相关

# 查看所有镜像
docker images

# 查看所有运行的进程
docker ps -a

# 停止运行
docker stop id

# 删除承载进程的容器
docker rm id

# 删除镜像,id为镜像id
docker rmi id

pod相关

# 创建命名空间can
kubectl create namespace can

# 查看命名空间can下的pod状态
kubectl get pods -n can -o wide

# 查看pod状态
kubectl get pods -o wide

# 删除pod
kubectl delete pods <pod-name>
kubectl delete pods <pod-name> -n <namespace-name>

# 查看命名空间can下的deployment
kubectl get deployment -n can

# 查看deployment
kubectl get deployment

# 删除deployment
kubectl delete deployment <deploy-name>
kubectl delete deployment <deploy-name> -n <namespace-name>

# 查看命名空间can下的service
kubectl get svc -n can

# 查看service
kubectl get svc

# 删除service
kubectl delete svc <svc-name>
kubectl delete svc <svc-name> -n <namespace-name>

查看pod日志

kubectl logs <pod-name>

kubectl describe pod <pod-name>

可能遇到的问题

1、删除镜像时,重复镜像ID的镜像删除

docker rmi [REPOSITORY]:[TAG]

删除时带上版本号即可针对性删除。

2、"worker_processes" directive is not allowed here

查看pod日志时发现报了这个错,原因是:

完整的nginx.conf是放在/etc/nginx/nginx.conf中,我们这里是文件复制到/etc/nginx/conf.d/default.conf中,所以只需要保留ngnix.conf中的server部分。

3、本地登录验证码测试正常,使用docker上线后报空指针问题

查看pod日志时报了下列错误

k8s+docker部署前后端分离项目

 发现是jdk的锅。 我一开始的时候,jar包的Dockerfile使用的是
FROM openjdk:8-jdk-alpine
最后发现,openjdk镜像中对于一些jdk底层jar包并不支持,后来使用
FROM frolvlad/alpine-oraclejdk8:slim

完美解决问题。文章来源地址https://www.toymoban.com/news/detail-400735.html

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

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

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

相关文章

  • k8s部署nginx自动更新域名及解除后端依赖

    在k8s中使用nginx作为后端接口反向代理,大概配置如下: 其中 api-server-svc 是后端服务的service 这个配置会有两个问题: 要求 api-server-svc 这个service要先创建,否则nginx启动时会因为无法解析 api-server-svc 而启动失败 nginx服役期间,如果后端服务重启,svc ip改变了,代理会失败,

    2024年02月04日
    浏览(38)
  • 【Docker】安装Nginx容器并部署前后端分离项目

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Docker实战》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一起

    2024年01月23日
    浏览(47)
  • docker+docker-compose+nginx前后端分离项目部署

    安装yum-utils 从国内服务器上下载docker 安装docker 验证是否成功 安装需要的包 安装依赖包 添加 Docker 的官方 GPG 密钥 设置远程仓库 安装 Docker-CE 验证是否成功 国内镜像中心常用的为阿里云与网易云, 选择其中一个加速器进行配置即可 。在本地 Docker 中指定要使用的国内加速器

    2023年04月09日
    浏览(51)
  • 【Docker】使用Docker安装Nginx及部署前后端分离项目应用

            Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它是由 伊戈尔·赛索耶夫 为俄罗斯访问量第二的Rambler.ru站点开发的,公开版本1.19.6发布于2020年12月15日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置

    2024年01月22日
    浏览(45)
  • 超详细实战Docker+Jenkins部署生产环境前后分离项目

    环境: 本文的所有服务都部署在阿里云ECS服务器(2H4G)上面, 前后端分离项目使用gitee上面的开源项目若依(ruoyi-vue)为例, 从零开始教学 1、先停止服务器, 再重装系统, 用最干净的系统从头教学, 保证大家环境一样 2、系统选择Centos最新版本, 然后开始安装, 等待安装完成 3、安装完

    2024年01月17日
    浏览(39)
  • Jenkins+Gitee+Docker+Ruoyi项目前后端分离部署

    描述:本文主要是用来记录 如何用标题上的技术,部署到云服务器上通过ip正常访问。 一、总览 1.1、Docker做的事 拉取 mysql 镜像 拉取 redis 镜像 拉取 jdk 镜像 拉取 nginx 镜像 解释说明:前端项目的打包文件放在 nginx容器运行。后端的jar包放在jdk容器运行。另外两个是后端项目

    2024年02月07日
    浏览(40)
  • 【Docker】docker部署springboot+vue+mysql+nginx前后端分离项目【部署实战篇】

    安装docker: https://blog.csdn.net/qq_39900031/article/details/121666892 springboot-vue前后端分离项目:https://gitee.com/ma-haojie/springboot-vue-demo.git https://jackwei.blog.csdn.net/article/details/110227719 或者 --restart=always 参数能够使我们 在重启docker时,自动启动相关容器 。 Docker容器的重启策略如下: no,默认

    2024年02月13日
    浏览(45)
  • 【Docker】Linux中使用Docker安装Nginx部署前后端分离项目应用

    目录 一、概述 1. Nginx介绍 2. Nginx优势 3. Nginx的工作原理 二、容器创建 1. Mysql容器 2. Tomcat容器 3. Nginx容器 每篇一获 Nginx(发音为 \\\"engine x\\\")是一个开源的、高性能的 HTTP 服务器和反向代理服务器。它也可以作为一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由 Igor Sysoev 开发的,最

    2024年01月21日
    浏览(49)
  • k8s部署docker

    操作系统:centos7.9_x64 Docker:20-ce K8s:1.23 操作系统最小硬件配置(在vmmare安装时需要选择):2核CPU、2G内存、20G硬盘 k8s-master:192.168.88.191 k8s-node1:192.168.88.192 k8s-node2:192.168.88.193 先只安装一台centos,完成master和node公共的配置之后,再克隆。 安装docker 安装kubeadm、kubelet 只在

    2024年02月11日
    浏览(37)
  • K8s结合docker部署

    原生安装步骤 安装必要的环境依赖与工具 下载证书更新 修改相关变量 安装容器需要环境 关闭swap分区 修改/etc/fstab文件 打开文件后的内容如下: 第二条用 “# ”注释掉,注意第一条别注释,不然重启之后系统有可能会报“file system read-only”错误。 检查swap分区关闭情况 使用

    2024年02月16日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包