快速一键化部署后端服务到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 root@172.16.xxx.xxx:/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

  • 33
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值