首页 > 其他分享 >快速一键化部署后端服务到k8s

快速一键化部署后端服务到k8s

时间:2024-06-05 18:03:19浏览次数:20  
标签:kubectl web 部署 app 一键 echo ylc Docker k8s

首先具备
在这里插入图片描述
1、创建 Dockerfile

FROM openjdk:17
RUN echo "Asia/Shanghai" > /etc/timezone
WORKDIR /app
COPY  *.jar /app/
COPY pod_start.sh /app/
RUN chmod +x /app/pod_start.sh
ENTRYPOINT ["/app/pod_start.sh"]

2、pod_start.sh

#!/bin/bash
echo "172.16.xx.xxx  	redis.xxx.com" >> /etc/hosts 
echo "172.16.xx.xxx   	dmsql.xxx.com" >> /etc/hosts 
echo "172.16.xx.xxx		pgsql.xxx.com" >> /etc/hosts 
jarname=`ls /app/*.jar`
JVM="-server -Xmx512M -Xms512M  -Djava.security.egd=file:/dev/./urandom"
java $JVM -jar $jarname --spring.profiles.active=dev

3、remote_script.sh

#!/bin/bash

# 远程服务器的地址
remote_server="172.16.xxx.xxx"

# SSH 连接的用户名
username="root"

# 远程服务器上的脚本路径
remote_script="/data/app/clean_docker_image.sh"

# 远程服务器上执行的命令
remote_command="cd /data/app && docker build -t ylc-dgcc-web:v1.0.0 ."

# 执行远程脚本
ssh $username@$remote_server bash $remote_script

# 在远程服务器上执行 docker build 命令
ssh $username@$remote_server $remote_command

echo "远程操作完成"

4、ylc-dgcc-web-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ylc-dgcc-web
  namespace: dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ylc-dgcc-web
  template:
    metadata:
      labels:
        app: ylc-dgcc-web
    spec:
      containers:
      - name: ylc-dgcc-web
        image: ylc-dgcc-web:v1.0.0
        ports:
        - containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: ylc-dgcc-web
  namespace: dev
spec:
  selector:
    app: ylc-dgcc-web
  ports:
  - port: 8000
    targetPort: 8000
    nodePort: 32080  # 在有效范围内的 NodePort
  type: NodePort

5、clean_docker_image.sh

#!/bin/bash

# 设置要删除的镜像标签
IMAGE_TAG="ylc-dgcc-web:v1.0.0"
# 查找要删除的镜像的 ID
IMAGE_ID=$(docker images -q $IMAGE_TAG)
# 检查是否找到了镜像
if [ -z "$IMAGE_ID" ]; then
    echo "未找到标签为 $IMAGE_TAG 的镜像。"
else
    # 删除镜像
    echo "正在删除标签为 $IMAGE_TAG 的镜像..."
    docker rmi $IMAGE_ID
    echo "镜像删除成功。"
fi

6、backup_script.sh

#!/bin/bash
# 设置备份目录
backup_dir="/data/backup/xxxx"
app_dir="/data/app"
app_name="app.jar"

# 确保备份目录存在
mkdir -p $backup_dir

# 获取当前时间并格式化为年月日时分秒
timestamp=$(date +"%Y%m%d%H%M%S")

# 构造备份文件名
backup_file="app-$timestamp.jar"

# 备份文件
cp "$app_dir/$app_name" "$backup_dir/$backup_file"

echo "备份完成,备份文件名为: $backup_file"


7、app_apply.sh 最主要脚本
记得以上脚本全部授权,授权命令

chmod +x xxx.sh
#!/bin/bash

# 定义可选操作
options=("Build Docker Image" "Apply Deployment" "Delete Deployment" "Delete Service" "Get Pods" "Get Services" "View Logs" "SCP App Directory" "Restart Deployment" "Scale Deployment" "Push Docker Image" "Backup App" "Exit")

# 显示菜单并读取用户选择
echo "请选择一个操作:"
select opt in "${options[@]}"
do
    case $opt in
        "Build Docker Image")
            echo "正在执行清理 Docker 镜像脚本..."
            if /data/app/clean_docker_image.sh; then
                echo "清理成功,正在构建 Docker 镜像..."
                if docker build -t ylc-dgcc-web:v1.0.0 .; then
                    echo "Docker 镜像构建成功"
                else
                    echo "Docker 镜像构建失败"
                fi
            else
                echo "清理 Docker 镜像脚本执行失败"
            fi
            ;;
        "Apply Deployment")
            echo "正在应用部署..."
            if kubectl apply -f /data/app/ylc-dgcc-web-deployment.yaml --namespace dev --validate=false; then
                echo "部署应用成功"
            else
                echo "部署应用失败"
            fi
            ;;
        "Delete Deployment")
            echo "正在删除部署..."
            if kubectl delete deployment ylc-dgcc-web --namespace dev; then
                echo "部署删除成功"
            else
                echo "部署删除失败"
            fi
            ;;
        "Delete Service")
            echo "正在删除服务..."
            if kubectl delete service ylc-dgcc-web --namespace dev; then
                echo "服务删除成功"
            else
                echo "服务删除失败"
            fi
            ;;
        "Get Pods")
            echo "正在获取 Pods..."
            kubectl get pods --namespace dev
            ;;
        "Get Services")
            echo "正在获取 Services..."
            kubectl get services --namespace dev
            ;;
        "View Logs")
            echo "正在获取 ylc-dgcc-web 的日志..."
            pod_name=$(kubectl get pods -n dev -l app=ylc-dgcc-web -o jsonpath="{.items[0].metadata.name}")
            if [ -n "$pod_name" ]; then
                kubectl logs -n dev -f --tail=1000 $pod_name
            else
                echo "未找到匹配的 Pod"
            fi
            ;;
        "SCP App Directory")
            echo "正在传输 app 目录..."
            if scp -r ../app [email protected]:/data; then
                echo "传输成功"
            else
                echo "传输失败"
            fi
            ;;
        "Restart Deployment")
            echo "请选择要重启的部署:"
            deployments=$(kubectl get deployments -n dev -o jsonpath="{.items[*].metadata.name}")
            select selected_pod in $deployments; do
                if [ -n "$selected_pod" ]; then
                    echo "正在重启部署 $selected_pod..."
                    if kubectl rollout restart -n dev deployment "$selected_pod"; then
                        echo "部署 $selected_pod 重启成功"
                    else
                        echo "部署 $selected_pod 重启失败"
                    fi
                    break
                else
                    echo "无效选择,请选择一个有效的部署"
                fi
            done
            ;;
        "Scale Deployment")
            echo "请输入要设置的副本数量:"
            read replicas
            echo "正在设置副本数量为 $replicas..."
            if kubectl scale --replicas=$replicas deployment ylc-dgcc-web -n dev; then
                echo "设置副本数量成功"
            else
                echo "设置副本数量失败"
            fi
            ;;
        "Push Docker Image")
            echo "正在推送 Docker 镜像..."
            if /data/app/remote_script.sh; then
                echo "推送成功"
            else
                echo "推送失败"
            fi
            ;;
        "Backup App")
            echo "正在执行备份脚本..."
            if /data/app/backup_script.sh; then
                echo "备份完成"
            else
                echo "备份失败"
            fi
            ;;
        "Exit")
            echo "退出"
            break
            ;;
        *)
            echo "无效选项,请选择一个有效的操作"
            ;;
    esac
done

8、运行脚本
在这里插入图片描述
就可以完成一键化部署,一键化删除,查看同步,最适合单主节点。
在这里插入图片描述
回车就可以一直继续

1) Build Docker Image 3) Delete Deployment 5) Get Pods 7) View Logs	9) Restart Deployment	11) Push Docker Image	13) Exit
2) Apply Deployment	 4) Delete Service	 6) Get Services	 8) SCP App Directory	10) Scale Deployment	12) Backup App

以下是这些操作的解释和对应命令:

1、Build Docker Image (构建 Docker 镜像)
解释:创建一个新的 Docker 镜像,这通常包括将应用程序代码和依赖项打包在一起。
命令:docker build -t <image_name>: .

2、Apply Deployment (应用部署)
解释:将应用的部署配置应用到 Kubernetes 集群,创建或更新部署。
命令:kubectl apply -f <deployment_file>.yaml

3、Delete Deployment (删除部署)
解释:删除 Kubernetes 中指定的部署。
命令:kubectl delete deployment <deployment_name>

4、Delete Service (删除服务)
解释:删除 Kubernetes 中指定的服务。
命令:kubectl delete service <service_name>

5、Get Pods (获取 Pods)
解释:列出当前 Kubernetes 集群中所有的 Pods。
命令:kubectl get pods

6、Get Services (获取服务)
解释:列出当前 Kubernetes 集群中所有的服务。
命令:kubectl get services
7、View Logs (查看日志)
解释:查看指定 Pod 的日志输出。
命令:kubectl logs <pod_name>

8、SCP App Directory (使用 SCP 传输应用目录)
解释:使用 SCP(安全复制协议)将应用程序目录传输到远程服务器。
命令:scp -r <local_directory> @<remote_host>:<remote_directory>

9、Restart Deployment (重启部署)
解释:重启 Kubernetes 中的一个部署,通常通过删除所有 Pod 来实现,Kubernetes 会自动重建它们。
命令:kubectl rollout restart deployment <deployment_name>

10、Scale Deployment (扩展/缩减部署)
解释:调整 Kubernetes 部署的副本数量,以实现扩展或缩减。
命令:kubectl scale deployment <deployment_name> --replicas=<number_of_replicas>

11 、Push Docker Image (推送 Docker 镜像)
解释:将本地构建的 Docker 镜像推送到 Docker 镜像仓库。
命令:docker push <image_name>:

12、Backup App (备份应用)
解释:备份应用程序,具体操作可能包括复制文件、导出数据库等。
命令:取决于具体的应用程序和需求。例如:
文件备份:tar -czvf backup.tar.gz /path/to/app

13、Exit (退出)
解释:退出当前会话或终端。
命令:exit

标签:kubectl,web,部署,app,一键,echo,ylc,Docker,k8s
From: https://blog.csdn.net/weimeilayer/article/details/139426815

相关文章

  • 【食物识别】flask部署
    文章目录flask安装创建flask应用路径问题选择模型并加载接收请求参数处理推理结果返回参数flask安装pipinstallflask创建flask应用app.pyfromflaskimportFlask,request,jsonify,send_fileimporttorchfromPILimportImageimportioimportbase6......
  • 【手把手教学】最新ChatTTS语音合成项目使用指南AI变声器chatTTS教程来了!5S夺走你的卧
    像这种充满语气充满感情色彩的人声,再搭配一段自拍图,是由最近大火的AI项目chatTTS生成的,ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小......
  • “粘土风格”轻松拿捏,基于函数计算部署 ComfyUI实现AI生图
    阿里云函数计算FC 一键部署火爆全球工作流AI生图平台——ComfyUI ,实现更高质量的图像生成,三步轻松完成“黏土”创意AI画作,晒图赢眼部按摩器等好礼!活动地址:https://developer.aliyun.com/topic/june/fc?spm=a2c6h.29234099.J_6985717350.4.65997562KE82EH实验准备目前在......
  • k8s 对外服务-Ingress
    一、Ingress简介:service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载均衡器,可以在集群内外部对pod进行访问。在Kubernetes中,Pod的IP地址和service的ClusterIP仅可以在集群网络内......
  • Linux 部署 MinIO(远程服务器)
      1.下载安装进入Linux内#我习惯放在local下cd/usr/local/#新建目录mkdirminio#进入目录cdminio下载路径:#下载地址wgethttps://dl.min.io/server/minio/release/linux-amd64/minio授权:#授权chmod+xminio 2.自定义配置自定义账号与登......
  • AnolisOS7.9(CentOS7)部署K8s(1.22.4)集群
    一.安装K8s集群1.准备工作,2台服务器①192.168.5.140-做为master节点#在该节点运行命令设置主机名:hostnamectlset-hostnamemaster②192.168.5.141-做为node1节点,在该节点运行命令设置主机名:#在该节点运行命令设置主机名:hostnamectlset-hostna......
  • docker部署hadoop集群
    docker部署hadoop集群:https://blog.51cto.com/865516915/2150651 一、主机规划3台主机:1个master、2个slaver/workerip地址使用docker默认的分配地址:master:主机名:hadoop2、ip地址:172.17.0.2 slaver1:主机名:hadoop3、ip地址:172.17.0.3主机名:hadoop4、ip地址:172.17......
  • Ubuntu server 24 (Linux) 安装部署smartdns 搭建智能DNS服务器
    SmartDNS是推荐本地运行的DNS服务器,SmartDNS接受本地客户端的DNS查询请求,从多个上游DNS服务器获取DNS查询结果,并将访问速度最快的结果返回给客户端,提高网络访问速度和准确性。支持指定域名IP地址,达到禁止过滤的效果。一安装smartdns1 关闭Ubuntu自带dns解析systemd-resolv......
  • IIS 安装和部署
    1.第一步 2.第二步:  第三步,把下面这些全安装上 4,第四步:在控制面板,将查看方式修改为小图标 5.找到"管理工具"有的电脑叫"windos工具"点击进入6.找到刚刚安装的IIS  7.添加网站 8,根据自己情况配置即可 ......
  • JAVA:实际工作中,项目上线——打包war,并部署到Tomcat中运行(史上最详细教程)
    每日一讲希望每天叫醒你的不是闹钟,而是梦想!目录每日一讲1.部署原因1.1Tomcat介绍 2.Tomcat下载及安装2.1Tomcat下载2.2Tomcat在IDEA上部署​2.3解决Tomcat乱码问题3.打包war文件,并在Tomcat目录下运行3.1打包文件3.2Tomcat环境配置3.3Tomcat运行1.部署原因......