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

news/2024/5/19 0:57:32 标签: kubernetes, 容器, 云原生, docker, 学习, prometheus

文章目录

  • 一、docker run 运行测试
    • 1.数据库测试
    • 2.接口测试
    • 3.前端界面测试
  • 二、编写dockerfile
    • 1.前端
    • 2.后端
  • 三、推送镜像(后面k8s就从这里获取镜像了)
  • 四.编写 docker-compose.yml
  • 五.K8s部署
    • 1.yaml文件编写及部署
      • houduan-deployment.yaml
      • houduan-service.yaml
      • qianduan-deployment.yaml
      • qianduan-service.yaml
    • 2. 应用的伸缩与不停机升级
  • 六.K8s容器监控


docker_run__7">一、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_66">二、编写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镜像

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

dockercomposeyml_140">四.编写 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

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

在这里插入图片描述


http://www.niftyadmin.cn/n/479523.html

相关文章

(二十二)数据符号化——矢量数据符号化②

数据符号化——矢量数据符号化② 目录 数据符号化——矢量数据符号化② 3.统计符号设置4.组合符号设置 3.统计符号设置 在 ArcMap 中可以使用符号系统来设置和定制地图元素的样式、颜色和标注。其中&#xff0c;统计符号可以用于表示一个或多个统计值的分布情况和趋势。 这是…

Python中的for循环语句及其应用举例(等差数列求和、阶乘、寻找最大值)

Python中的for循环语句及其应用举例(等差数列求和、阶乘、寻找最大值) 在学习任何编程语言的时候&#xff0c;不熟悉判断选择结构和循环结构&#xff0c;就难以发挥计算机优秀的计算能力和提高学习工作效率。本文将重点讲解Python中的for循环语句&#xff0c;并举例等差数列求…

1 Prometheus-监控简介

目录 1 什么是监控 1.1 技术作为客户 1.2 业务作为客户 2. 监控基础知识 2.1 事后监控 2.2 机械式/模板式/无脑式监控 2.3 不够准确的监控 2.4 静态监控 2.5 不频繁的监控 2.6 缺少自动化或操作繁琐/不便 2.7 监控模式总结 3.监控机制 3.1 探针和内省 3.2 拉取和推…

Java 构造方法

在Java中&#xff0c;构造方法是一种特殊的方法&#xff0c;用于创建和初始化对象。每个类都可以定义一个或多个构造方法&#xff0c;用于初始化对象的属性值。在本文中&#xff0c;我们将深入探讨Java构造方法的使用和实现。 构造方法的基本概念 构造方法是一种特殊的方法&a…

React修改Antd组件的样式

修改默认的antd组件&#xff0c;需要使用global import React, { useState, useEffect } from react; import { Tabs, Rate, Steps } from antd; import styles from ./index.less;const Index (props) >{return (<div className{styles.class_steps}><Stepsprog…

青大数据结构【2018】【算法设计】

关键词&#xff1a; 单链表递增、树的先序遍历 1&#xff09;带头结点的单链表L&#xff0c;从首结点开始&#xff0c;依次两两比较&#xff0c;如果前者大于等于后者&#xff0c;说明是非递增的&#xff1b;否则递增。 2&#xff09; 1&#xff09;先遍历二叉树&#xff0c;…

IMX6ULL系统移植篇-镜像烧写说明

一. 镜像烧写简介 之前一篇文章学习了 阿尔法开发板烧写镜像的方法。 即将 镜像烧写到 Nand-Flash内部&#xff0c;设备最终从 Nand-Flash启动。说明博文如下&#xff1a; IMX6ULL系统移植篇-镜像烧写方法_凌肖战的博客-CSDN博客 二. 镜像烧写说明 之前文章说明了 使用 mfg…

linux入门之环境基础以及开发工具的使用(yum,vim,gcc/g++.makefile,gdb,git)

文章目录 目录 前言 一、Linux软件包管理器yum 二、Linux编辑器 -vim的使用 1.vim的基本概念 2.vim的基本操作 3.vim的基本配置 4.Linux编译器-gcc/g使用 在这里涉及到一个概念&#xff1a;函数库 5.Linux调试器-gdb使用 6.Linux项目自动化构建工具-make/makefile 1…