应用打包部署k8s (包括dockerfile打包及仓库上传)


一、docker run 运行测试

小唐的项目主要是(mysql+jar+vue),然后所有项目都是打包好了的,然后现在我们用docker run 来测试一下

1.数据库测试

1.存储文件夹

mkdir -p mysql/data mysql/init mysql/conf

data 文件夹是数据存储目录  (如果mysql初始化错误  需要将文件夹内部全部删除)
init 文件夹可以放置 .sh .sql 文件 在初始化容器时会执行
conf 文件夹 放置 my.cnf 配置文件

并将我们的sql文件转移至init
在编写mysql文件之前,我们可以先使用docker镜像的方式去看看我们的sql文件是否可以正确导入至我们的容器

2.准备好对于位置
在这里插入图片描述

3.运行docker中镜像

docker run -d --name mysql-container \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=bilibili \
-v /home/xiaotang0711/Desktop/docker/sql:/docker-entrypoint-initdb.d \
mysql:8.0

MYSQL_DATABASE#你数据库名
-V 本机地址:/docker-entrypoint-initdb.d #这个位置会在mysql启动时自动执行
docker exec -it <容器id> mysql -u root -p

检查是否执行成功

在这里插入图片描述

2.接口测试

docker run -d -p 8081:8081  \
-v /home/xiaotang0711/Desktop/docker/hadoop.jar:/usr/hadoop.jar \
--name springboot java:8u111  \
java -jar /usr/hadoop.jar

在这里插入图片描述
在这里插入图片描述

3.前端界面测试

docker run  -d  -p 80:80 \
--name nginx \
-v /home/xiaotang0711/Desktop/docker/dist:/usr/share/nginx/html:ro \
nginx

在这里插入图片描述

在上诉运行没有问题之后,我们去编写我们所对应的dockekfile

二、编写dockerfile

由于本应用主要有前端和后端组成,将它们分别打包为不同的镜像,并在部署时进行组合使用。这样可以更加灵活地管理和升级应用,同时也方便扩展和维护。根据上诉打包过程中的dockerfile 进行如下编写【依据我们docker run中代码进行编写,会用chatgpt的可以把docker run的代码给他,让他帮你写dockerfile】

1.前端

# 基于官方 nginx 镜像创建新的镜像
FROM nginx
# 将主机的 dist 目录映射到容器内的 /usr/share/nginx/html 目录,并且使用只读模式
VOLUME /usr/share/nginx/html
COPY dist /usr/share/nginx/html
RUN chmod -R a+r /usr/share/nginx/html
# 暴露容器的默认端口 80
EXPOSE 80
docker build -t qianduan .
docker run -d -p 80:80 --name qianduanqianduan

在这里插入图片描述
在这里插入图片描述

2.后端

# 基于mysql:8.0镜像创建新的镜像
FROM mysql:8.0

# 设置环境变量
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=bilibili
ENV MYSQL_USER=nacos
ENV MYSQL_PASSWORD=nacos
# 将sql文件夹中的文件复制到容器中的初始化脚本目录下
COPY ./mysql/init /docker-entrypoint-initdb.d/
# 将配置文件复制到容器内
COPY ./mysql/conf/my.cnf /etc/mysql/my.cnf
# 挂载数据卷
VOLUME /var/lib/mysql/
# 暴露端口
EXPOSE 3306
# 修改默认密码策略
CMD ["mysqld", "--default-authentication-plugin=mysql_native_password", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_general_ci", "--explicit_defaults_for_timestamp=true", "--lower_case_table_names=1"]

# 基于java:8u111镜像创建新的镜像
FROM java:8u111
# 复制应用程序jar包到容器内
COPY ./hadoop.jar /usr/hadoop.jar
# 暴露端口
EXPOSE 8081
# 启动springboot应用
CMD ["java", "-jar", "/usr/hadoop.jar"]
docker build -t houduan .
docker run -d -p 3306:3306 -p 8081:8081 houduan 

在这里插入图片描述
在这里插入图片描述

三、推送镜像(后面k8s就从这里获取镜像了)

【官网仓库参考】Ubantu docker学习笔记(三)docker账号push及Dockerfile优化
【私有仓库参考】Ubantu docker学习笔记(八)私有仓库

登录
在这里插入图片描述

Push镜像

在这里插入图片描述
在这里插入图片描述

四.编写 docker-compose.yml

这个是为了可以一键启动和终止我们的镜像
根据上诉dockfile打包的命令,我们进行dockers-compose.yml的编写【也可以用chatgpt来写】,不用部署K8S的做到这一步就ok了

version: '3'
services:
  houduan:
    image: xiaotang0711/houduan
    ports:
      - '3306:3306'
      - '8081:8081'

  qianduan:
    image: xiaotang0711/qianduan
    ports:
      - '80:80'
    container_name: qianduan
docker compose up -d
docker compose down

在这里插入图片描述

五.K8s部署

1.yaml文件编写及部署

主要分为service和deployment两个文件的编写,deployment指明的是我们pod里面的内容,service指明的是我们一个pod集合的类容【包括总的端口和ip地址】

houduan-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: houduan-deployment
spec:
  selector:
    matchLabels:
      app: houduan
  replicas: 1
  template:
    metadata:
      labels:
        app: houduan
    spec:
      containers:
      - name: houduan
        image: xiaotang0711/houduan
        ports:
        - containerPort: 3306
        - containerPort: 8081

houduan-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: houduan-service
spec:
  selector:
    app: houduan
  ports:
  - name: mysql
    port: 3306
    targetPort: 3306
  - name: http
    port: 8081
    targetPort: 8081

qianduan-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: qianduan-deployment
spec:
  selector:
    matchLabels:
      app: qianduan
  replicas: 1
  template:
    metadata:
      labels:
        app: qianduan
    spec:
      containers:
      - name: qianduan
        image: xiaotang0711/qianduan
        ports:
        - containerPort: 80

qianduan-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: qianduan-service
spec:
  selector:
    app: qianduan
  ports:
  - name: http
    port: 80
    targetPort: 80

然后去运行我们的ymal文件就可以啦

kubectl create namespace app
kubectl apply -f houduan-deployment.yaml
kubectl apply -f houduan-service.yaml
kubectl apply -f qianduan-deployment.yaml
kubectl apply -f qianduan-service.yaml

在这里插入图片描述

kubectl get pods -n app
kubectl get services -n app

2. 应用的伸缩与不停机升级

kubectl get deployments -n app
kubectl get rs -n app
kubectl scale deployments/houduan-deployment --replicas=4-n app

在这里插入图片描述
也可以使用自动扩缩

autoscaler.yaml

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: example-autoscaler
  namespace: houduan
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: houduan-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50
kubectl apply  -f  autoscaler.yaml
kubectl get hpa -n app #查看

在这里插入图片描述

滚动更新

kubectl rollout undo deployments/houduan-deployment

在这里插入图片描述

六.K8s容器监控

大家可以参考
Kubernetes集群资源监控
我是按照他来的
K8S版本:1.27.1

需要保证我们节点都启动起来
在这里插入图片描述
先去看我们普罗米修斯的服务器
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 非常感谢您的问题。Kubernetes是一种可扩展的开源容器编排和管理平台,它可以帮助我们轻松地管理和部署应用程序。Spring Boot是一种轻量级的Java框架,可以帮助我们快速构建可靠的应用程序。在Kubernetes部署Spring Boot应用程序需要执行以下步骤: 1. 创建一个Docker镜像,并将Spring Boot应用程序打包Docker镜像中。 2. 创建一个Kubernetes Deployment对象,定义应用程序的容器镜像和其他配置。 3. 创建一个Kubernetes Service对象,以公开应用程序并在群集中暴露其端点。 4. 如果需要,可以创建其他Kubernetes对象,例如ConfigMaps和Secrets,以管理应用程序的配置和敏感信息。 在完成这些步骤后,您的Spring Boot应用程序将在Kubernetes集群中成功部署和运行。希望这个回答能够帮助到您! ### 回答2: Kubernetes(简称为K8s)是一个用于容器编排和管理的开源平台,它可以帮助我们轻松地部署和扩展应用程序。Spring Boot是一个用于构建独立的、生产级的Java应用程序的框架。在K8s部署Spring Boot应用程序需要以下几个步骤: 1. 编写Dockerfile:首先,我们需要在项目根目录下创建一个Dockerfile文件。在Dockerfile中,我们可以指定基础镜像、添加应用程序文件和依赖项,并设置应用程序的启动命令。 2. 构建Docker镜像:使用Dockerfile,我们可以构建一个镜像,该镜像包含了我们的Spring Boot应用程序和所有的依赖项。我们可以使用Docker命令行工具或Docker客户端来构建镜像。 3. 将镜像推送到镜像仓库:构建完成后,可以将镜像推送到镜像仓库,以便在K8s集群中进行访问和部署。常见的镜像仓库包括Docker Hub、私有镜像仓库等。 4. 创建K8s部署文件:接下来,我们需要创建K8s部署文件,该文件定义了应用程序的部署配置,例如容器数量、资源限制等。部署文件可以使用YAML或JSON格式编写。 5. 部署应用程序:使用kubectl命令行工具或K8s API,我们可以将部署文件应用K8s集群中,从而部署我们的Spring Boot应用程序。K8s将自动为我们创建和管理应用程序的Pods、Services和其他相关资源。 6. 监控和扩展:一旦应用程序成功部署,我们可以使用K8s提供的监控和扩展功能来监视和调整应用程序的运行。K8s提供了各种工具和指标,可以帮助我们实现应用程序的自动扩展和高可用。 通过以上步骤,我们可以在K8s集群中轻松部署和管理Spring Boot应用程序。K8s提供了强大的容器编排和管理功能,可以帮助我们构建可靠、高可用的应用程序环境。 ### 回答3: K8sKubernetes)是一种开源的容器编排平台,它可以帮助我们更方便地部署、管理和扩展容器应用。Spring Boot是一种快速开发、便捷部署的Java框架,它提供了一种简化Spring应用开发的方式。 在将Spring Boot应用部署K8s上时,我们可以按照以下步骤进行操作: 1. 创建Docker镜像:首先,我们需要将Spring Boot应用打包成一个Docker镜像。我们可以使用Maven或Gradle构建工具来执行此操作。在创建镜像时,我们需要指定容器运行所需的基础镜像、将Spring Boot应用的JAR文件添加到镜像中,并配置容器的启动命令。 2. 配置K8s资源:接下来,我们需要定义一组K8s资源,用于描述如何部署和运行Spring Boot应用。这些资源包括Deployment、Service和Ingress。Deployment用于定义应用部署规则,Service用于暴露应用的网络访问入口,Ingress则用于将外部请求路由到应用的Service。 3. 应用部署:在配置完成后,我们可以使用Kubectl命令将应用部署K8s集群中。Kubectl是Kubernetes的命令行工具,它可以与K8s API进行交互,管理集群中的资源。通过执行`kubectl create`或`kubectl apply`命令,可以创建或更新我们定义的K8s资源。 4. 监控和扩展:一旦应用部署成功,我们可以使用K8s提供的监控工具来监控应用的性能和运行状态。K8s还提供了自动伸缩的功能,可以根据应用的负载情况自动调整副本数量,以提供更好的性能和可用性。 总结来说,将Spring Boot应用部署K8s上可以帮助我们更好地管理和扩展应用。通过将应用打包Docker镜像,并使用K8s的资源配置和管理工具,我们可以轻松地将应用部署K8s集群中,并享受K8s提供的自动扩展和监控功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我小唐就好了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值