k8s一键部署tongweb企业版7049m6(by why+lqw)

声明

1.此贴仅供参考,请根据自身需求在测试环境测试和修改。

安装准备

1.获取对应的安装包和授权,并将授权和安装包放在同一个目录下

在这里插入图片描述
2.docekr已配置远程仓库

在这里插入图片描述

3.提前拉取jdk的镜像(这里配置了使用openjdk:8)
在这里插入图片描述

安装

将以下内容复制到k8s_deploy_TongWeb7049m6.sh里:

#!/bin/bash
# TongWeb Kubernetes 全自动部署脚本(支持镜像仓库)# 使用说明:
# 文件准备统一在同级目录下:
# /部署目录/
# ├── k8s_deploy_TongWeb.sh  部署脚本
# ├── license.dat      产品授权
# └──TongWeb7.0.4.9_M6_Enterprise_Linux.tar.gz  安装包
# 执行权限:chmod +x k8s_deploy_TongWeb7049m6.sh
# 运行部署:sudo ./k8s_deploy_TongWeb7049m6.sh# 配置信息
APP_NAME="tongweb"
APP_VERSION="7.0.4.9_M6_Enterprise_Linux"
TAR_PACKAGE="TongWeb7.0.4.9_M6_Enterprise_Linux.tar.gz"
INSTALL_DIR="/opt/tongweb-7049m6"
NAMESPACE="tongweb7049m6cloud-namespace"
IMAGE_NAME="tongweb:7049m6"
K8S_DIR="/tmp/tongweb-k8s-manifests"# 镜像仓库配置(根据实际情况修改)
REGISTRY_URL="192.168.10.108:5000"      # 镜像仓库地址
REGISTRY_PROJECT="tongweb7-cloud-7049m6"            # 仓库中的项目/命名空间名称(若无可留空)
REGISTRY_USER="admin"            # 仓库用户名
REGISTRY_PASSWORD="Harbor12345"  # 仓库密码
APP_VERSION="7.0.4.9_M6_Enterprise_Linux"              # 需在脚本中定义版本变量# 完整镜像地址格式:
REMOTE_IMAGE_NAME="${REGISTRY_URL}/${REGISTRY_PROJECT}/tongweb:${APP_VERSION}-$(date +%Y%m%d%H%M)"# 初始化环境
init_env() {# 创建临时目录mkdir -p "$K8S_DIR"# 检查必需命令for cmd in docker kubectl tar; doif ! command -v $cmd &> /dev/null; thenecho "错误:必需命令 $cmd 未找到!"exit 1fidone
}# 解压安装包
extract_package() {if [ ! -f "$TAR_PACKAGE" ]; thenecho "错误:安装包 $TAR_PACKAGE 不存在!"exit 1fiecho "正在解压安装包..."tar -zxvf "$TAR_PACKAGE" -C /optmv "/opt/TongWeb${APP_VERSION}" "$INSTALL_DIR"cp license.dat "$INSTALL_DIR"
}# 配置Kubernetes
setup_kubernetes() {# 创建命名空间if ! kubectl get namespace "$NAMESPACE" &> /dev/null; thenkubectl create namespace "$NAMESPACE"fi# 创建ConfigMapkubectl create configmap license7049m6 \--from-file=license.dat \-n "$NAMESPACE"
}# 构建并推送镜像
build_and_push_image() {# 基础镜像配置(可根据需要修改)local BASE_IMAGE="openjdk:8"# 生成Dockerfileecho "正在生成Dockerfile..."cat > "$INSTALL_DIR/Dockerfile" <<EOF
FROM ${BASE_IMAGE}# 时区配置
ENV TZ=Asia/Shanghai \\LANG=C.UTF-8# 拷贝TongWeb
#ADD tongweb /opt/TongWeb
ADD . /opt/TongWeb# 暴露端口(按需求改)
EXPOSE 8080 8443 9060# 启动命令
#ENTRYPOINT ["/opt/TongWeb/bin/startservernohup.sh"]
# 启动命令
ENTRYPOINT ["/opt/TongWeb/bin/startserver.sh"]RUN echo "[$(date '+%Y-%m-%d %H:%M:%S')] TongWeb ${APP_VERSION} 镜像构建成功"
EOF# 构建本地镜像echo "正在构建本地镜像..."if ! docker build -t "$IMAGE_NAME" -f "$INSTALL_DIR/Dockerfile" "$INSTALL_DIR"; thenecho "镜像构建失败!"exit 1fi# 标记并推送镜像echo "正在标记镜像..."docker tag "$IMAGE_NAME" "$REMOTE_IMAGE_NAME"echo "登录镜像仓库..."if ! docker login -u "$REGISTRY_USER" -p "$REGISTRY_PASSWORD" "$REGISTRY_URL"; thenecho "镜像仓库登录失败!"exit 1fiecho "正在推送镜像到仓库..."if ! docker push "$REMOTE_IMAGE_NAME"; thenecho "镜像推送失败!"exit 1fiecho "镜像推送成功:$REMOTE_IMAGE_NAME"
}# 生成部署文件
generate_manifests() {# 生成Deploymentcat > "$K8S_DIR/deployment.yaml" <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:name: $APP_NAME
spec:selector:matchLabels:app: $APP_NAMEreplicas: 1template:metadata:labels:app: $APP_NAMEspec:containers:- name: $APP_NAMEimage: $REMOTE_IMAGE_NAME  # 使用仓库镜像地址imagePullPolicy: Always    # 总是从仓库拉取env:- name: CONFIG_REMOTE_ENABLEvalue: "false"- name: ENV_TYPEvalue: "cloud"ports:- name: httpcontainerPort: 8080- name: httpscontainerPort: 8443- name: admincontainerPort: 9060volumeMounts:- name: log-volumemountPath: /opt/TongWeb/logs- name: autodeploy-volumemountPath: /opt/TongWeb/autodeploy- name: licensemountPath: /opt/TongWeb/license.datsubPath: license.datvolumes:- name: log-volumehostPath:path: /home/work/logstype: DirectoryOrCreate- name: autodeploy-volumehostPath:path: /home/work/autodeploytype: DirectoryOrCreate- name: licenseconfigMap:name: license7049m6
EOF# 生成Servicecat > "$K8S_DIR/service.yaml" <<EOF
apiVersion: v1
kind: Service
metadata:name: ${APP_NAME}srv
spec:selector:app: $APP_NAMEtype: NodePortports:- name: httpport: 8088targetPort: 8088nodePort: 30808  # 修改为有效范围内的端口- name: httpsport: 8443targetPort: 8443nodePort: 32443  # 修改为有效范围内的端口- name: adminport: 9060targetPort: 9060nodePort: 30906  # 修改为有效范围内的端口
EOF
}# 部署应用到集群
deploy_to_cluster() {echo "正在部署应用..."kubectl apply -f "$K8S_DIR/deployment.yaml" -n "$NAMESPACE"kubectl apply -f "$K8S_DIR/service.yaml" -n "$NAMESPACE"# 等待Pod就绪echo -n "等待Pod启动"local retry=0local max_retries=30  # 把重试次数增加为30local sleep_time=15   # 增加检查间隔为10秒while [ $retry -lt $max_retries ]; dolocal pod_status=$(kubectl get pod -n "$NAMESPACE" -l app=$APP_NAME -o jsonpath='{.items[0].status.phase}')local image_pulled=$(kubectl get pod -n "$NAMESPACE" -l app=$APP_NAME -o jsonpath='{.items[0].status.containerStatuses[0].state}')if [ "$pod_status" == "Running" ]; thenecho -e "\nPod 已正常运行!"kubectl get pod -n "$NAMESPACE"return 0elif [[ "$image_pulled" == *"ErrImagePull"* ]]; thenecho -e "\n错误:镜像拉取失败!请检查:"echo "1. 镜像地址是否正确:$REMOTE_IMAGE_NAME"echo "2. 仓库认证信息是否正确"exit 1fiecho -n "."((retry++))sleep $sleep_timedoneecho "错误:Pod 启动超时!"kubectl describe pod -n "$NAMESPACE" -l app=$APP_NAMEexit 1
}# 主流程
main() {init_envextract_packagesetup_kubernetesbuild_and_push_imagegenerate_manifestsdeploy_to_clusterecho ""echo "═"*50echo "TongWeb 7.0.4.9_M6 部署完成!"echo "管理控制台: http://<节点IP>:30906/console"echo "管理控制台初始账号:thanos"echo "管理控制台初始密码:thanos123.com"echo "如部署应用,访问: http://<节点IP>:30808"echo "管理命令:"echo "  kubectl get pod -n $NAMESPACE"echo "  kubectl logs -f <pod名称> -n $NAMESPACE"echo "═"*50
}# 执行主流程
main

执行以下指令:

# 执行权限:
chmod +x k8s_deploy_TongWeb7049m6.sh
# 运行部署:
sudo ./k8s_deploy_TongWeb7049m6.sh

执行后,使用以下指令查看日志:

 kubectl get pod -n tongweb7049m6cloud-namespacekubectl logs -f <pod名称> -n tongweb7049m6cloud-namespace

在这里插入图片描述
在这里插入图片描述
如果安装有问题,需要删掉pod重新操作,可执行以下指令:

#先查pod名称
kubectl get pod -n tongweb7049m6cloud-namespace
#删除pod
kubectl delete pod pod名 -n tongweb7049m6cloud-namespace
#删除跟license相关的configmap
kubectl delete configmap license -n tongweb7049m6cloud-namespace
#删除命名空间(前提是该命名空间只有tongweb相关的资源和配置)
kubectl delete namespace tongweb7049m6cloud-namespace

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86997.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 与 Halcon 联合开发六:基于海康SDK设计完整的相机类【附源码】

在现代工业自动化、机器人视觉、等领域&#xff0c;相机模块的作用至关重要。通过相机模块采集到的图像数据&#xff0c;我们能够进行一系列的图像处理和分析。为了高效地控制相机和处理图像&#xff0c;本篇文章将介绍如何使用Qt和Halcon联合开发一个相机模块&#xff0c;帮助…

第7篇:Gin模板引擎——服务端页面渲染

作者:GO兔 博客:https://luckxgo.cn 分享大家都看得懂的博客 引言 在Web开发中&#xff0c;服务端页面渲染(SSR)依然是构建动态网页的重要方式。Gin框架虽然以API开发见长&#xff0c;但也内置了强大的模板引擎支持&#xff0c;基于Go标准库的html/template包实现。本文将深入…

RagFlow 源码部署启动指南

一、环境准备 1. 安装 uv 和 pre-commit 如果已安装&#xff0c;可跳过。推荐使用官方方式安装&#xff0c;避免报错&#xff1a; pipx install uv pre-commit export UV_INDEXhttps://mirrors.aliyun.com/pypi/simple安装报错 使用清华源安装&#xff1a; pipx install uv…

【Python基础】12 闲谈分享:Python用于无人驾驶的未来

引言&#xff1a;一个程序员的自动驾驶梦想 还记得2016年的那个秋天&#xff0c;我第一次坐进特斯拉Model S的驾驶座&#xff0c;体验Autopilot功能。当方向盘开始自己转动&#xff0c;车辆在高速公路上自动跟随前车时&#xff0c;我的内心涌起了一种奇妙的感觉——这不就是我…

为什么js是单线程?

js单线程&#xff0c;同一时间只能做一件事 。js的单线程 主要与它的用途有关。作为浏览器脚本语言&#xff0c;js的主要用途是与用户互动&#xff0c;以及操作DOM。这决定了它只能是单线程&#xff0c;否则会带来很复杂的同步问题。如果js同时有两个线程&#xff0c;一个线程在…

DVWA靶场通关笔记-文件包含(Medium级别 9种渗透方法)

目录 一、文件包含 1、原因 2、危害 3、防范措施 二、代码审计&#xff08;Medium级别&#xff09; 1、渗透准备 &#xff08;1&#xff09;配置php.ini &#xff08;2&#xff09;file1.php &#xff08;3&#xff09;file2.php &#xff08;4&#xff09;file3.php…

飞云翻倍布林(翻倍密码系统四线布林版)双安全系统+均价趋势指标+日线周线MACD,组合操盘技术图文分享

如上图组合操盘套装指标&#xff0c;主图指标-翻倍密码系统四线布林版-飞云翻倍布林。副图指标1-均价趋势指标&#xff0c;跟踪市场均价走势和趋势&#xff1b;副图指标2-日线周线MACD指标&#xff0c;跟踪日线和周线两个级别的MACD多空走势以及共振与否。 主图指标-飞云翻倍布…

《汇编语言:基于X86处理器》第6章 条件处理(1)

本章向程序员的汇编语言工具箱中引入一个重要的内容&#xff0c;使得编写出来的程序具备作决策的功能。几乎所有的程序都需要这种能力。首先&#xff0c;介绍布尔操作&#xff0c;由于能影响CPU状态标志&#xff0c;它们是所有条件指令的核心。然后&#xff0c;说明怎样使用演绎…

【分治思想】归并排序 与 逆序对

归并排序 归并排序是一种分治算法&#xff0c;怎么分&#xff0c;怎么治&#xff1f; 分&#xff1a;通过递归不断把数组分成两半&#xff0c;直到每个子数组只剩 1 个元素&#xff08;天然有序&#xff09;治&#xff1a;把两个已经排好序的子数组合并成一个有序数组。 把问…

SQL参数化查询:防注入与计划缓存的双重优势

在数据库操作中&#xff0c;SQL参数化查询&#xff08;Parameterized Queries&#xff09;是一种非常有效的技术&#xff0c;它不仅可以防止SQL注入攻击&#xff0c;还可以提高数据库查询的效率&#xff0c;尤其是在与计划缓存&#xff08;Query Plan Caching&#xff09;结合使…

【你怕一E1】- 孰轻孰重如何断-组合问题的多种情形

摘要 本视频讲解了组合问题的多种情形,包括多选一、多选二、多选三以及分队问题的解题方法。首先介绍了从不同人数中选人的不同选择方式,如一百人中选一人有一百种选择。随后,详细讲解了有序思考方法在多选二问题中的应用,通过选队长的方式列举不同组合情况,并归纳出选择规…

nginx反向代理的bug

nginx反向代理的bug 问题呈现 当我们配置反向代理的时候查询error.log的时候我们发现以下的问题 2025/06/29 08:38:47 [error] 7#7: *2 open() “/usr/share/nginx/html/payed/notify” failed (2: No such file or directory), client: 192.168.98.1, server: localhost, r…

MyBatis 动态 SQL 与缓存机制深度解析

在Java持久层技术体系中&#xff0c;MyBatis凭借其灵活的SQL映射和强大的动态SQL能力&#xff0c;成为企业级应用开发的首选框架。本文从动态SQL核心语法、缓存实现原理、性能优化及面试高频问题四个维度&#xff0c;结合源码与工程实践&#xff0c;系统解析MyBatis的核心特性与…

Nuxt 3 中实现跨组件通信方式总结:使用 Pinia、Provide/Inject 或 Props

在开发复杂的 Web 应用时&#xff0c;跨组件通信是一个常见的需求。Nuxt 3 提供了多种方式来实现这一点&#xff0c;包括使用状态管理工具&#xff08;如 Pinia&#xff09;、Vue 的 provide/inject 机制以及传统的 props 传递。本文将详细介绍这三种方法&#xff0c;并通过一个…

Java ArrayList 扩容机制

一、ArrayList 简介 ArrayList 是 Java 集合框架中基于数组实现的可变长度列表&#xff0c;其核心特性是&#xff1a; 支持随机访问&#xff08;通过索引&#xff09;支持动态扩容插入/删除效率较低&#xff08;非尾部操作&#xff09; 二、底层数据结构 // JDK 11 transien…

C++面试题精讲系列之数组排序

数组排序是我们经常遇到的笔试题目&#xff0c;给大家盘一下这题到底想考察什么&#xff1f; // 考题如下 void main() {int arr[4] {26,28,24,11};// 请实现一个sortArray函数&#xff0c;对数组arr进行从小到大排序 }考点1&#xff1a;数组做函数参数如何传递参&#xff1f;…

Windows10/11 轻度优化 纯净版,12个版本!

系统介绍 镜像包均基于微软官方原版系统精心制作&#xff0c;确保系统的原汁原味与稳定性。Windows 10/11&#xff0c;都集成了最新的补丁。版本选对&#xff0c;一键安装到位&#xff0c;全自动无人值守安装模式。 系统特点 系统进行优化提供了12个系统版本集成了运行库、…

开发工具IDEA

开发工具IDEA 开发调试&#xff08;debug&#xff09;Maven配置三级目录 开发调试&#xff08;debug&#xff09; 史上最全的 IDEA Debug 调试技巧&#xff08;超详细案例&#xff09; Maven配置 idea全局Maven配置 IDEA中Maven配置详解 有些时候不要配置maven_home这些环境…

GitHub Actions与AWS OIDC实现安全的ECR/ECS自动化部署

引言 在现代云原生应用开发中,实现安全、高效的CI/CD流程至关重要。本文将详细介绍如何利用GitHub Actions和AWS OIDC(OpenID Connect)构建一个无需长期凭证的安全部署管道,将容器化应用自动部署到Amazon ECR和ECS服务。 架构概述 整个解决方案的架构包含三个主要部分:…

一、MongoDB安装-二进制安装

下载tar包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.21.tgz wget https://downloads.mongodb.com/compass/mongosh-2.5.3-linux-x64.tgz安装 解压 tar xf mongodb-linux-x86_64-rhel70-7.0.21.tgz cp mongodb-linux-x86_64-rhel70-7.0.21/bi…