当前位置: 首页 > news >正文

k8s一键部署tongweb7容器版脚本(by why+lqw)

声明

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

安装准备

1.获取对应的安装包和授权,并将授权和安装包放在同一个目录下:
在这里插入图片描述
2.docekr已配置远程仓库

在这里插入图片描述

3.提前拉取jdk的镜像(这里配置了使用openjdk1.8)

在这里插入图片描述

安装

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

#!/bin/bash
# TongWeb Kubernetes 全自动部署脚本# 使用说明:
# 文件准备统一在同级目录下:
#/部署目录/
# ├── k8s_deploy_TongWeb.sh  部署脚本
# ├── license.dat      产品授权
# └── tongweb-cloud-7.0.C.6_P5.tar.gz  安装包
# 执行权限:chmod +x k8s_deploy_TongWeb.sh
# 运行部署:sudo ./k8s_deploy_TongWeb.sh# 配置信息
APP_NAME="tongweb"
APP_VERSION="7.0.C.6_P5"
TAR_PACKAGE="tongweb-cloud-${APP_VERSION}.tar.gz"
INSTALL_DIR="/opt/tongweb-cloud-7.0.C.6"
NAMESPACE="tongweb-namespace"
IMAGE_NAME="192.168.10.108:5000/tongweb7/tongweb:v70c6"  # 修改为私有仓库地址
K8S_DIR="/tmp/tongweb-k8s-manifests"# 初始化环境
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 /optTARGET_DIR="$INSTALL_DIR/tongweb/kernel"#cp license.dat "$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 license \--from-file=license.dat \-n "$NAMESPACE"
}# 构建Docker镜像
build_image() {# 基础镜像配置(可根据需要修改)local BASE_IMAGE="openjdk:8"local IMAGE_ARCHIVE="openjdk-8.tar"  # 用于离线环境的镜像包echo "正在生成Dockerfile..."cat > "$INSTALL_DIR/Dockerfile" <<EOF
FROM ${BASE_IMAGE}# 时区配置
ENV TZ=Asia/Shanghai \\LANG=C.UTF-8# 拷贝TongWeb
ADD tongweb /opt/TongWeb# 暴露端口(按需修改)
EXPOSE 8088 8443# 启动命令
ENTRYPOINT ["/opt/TongWeb/kernel/bin/startserver.sh"]RUN echo "[$(date '+%Y-%m-%d %H:%M:%S')] TongWeb ${APP_VERSION} 镜像构建成功"
EOF# 检查基础镜像echo "验证基础镜像..."if ! docker image inspect "${BASE_IMAGE}" &> /dev/null; thenecho "正在拉取基础镜像 ${BASE_IMAGE}..."if ! docker pull "${BASE_IMAGE}"; thenecho "错误:基础镜像拉取失败!解决方案:"echo "1. 检查网络连接"echo "2. 使用离线镜像:docker load -i ${IMAGE_ARCHIVE}"echo "3. 修改BASE_IMAGE为本地已有镜像"exit 1fifiecho "正在构建应用镜像..."local build_log="${K8S_DIR}/docker-build.log"if ! docker build -t "$IMAGE_NAME" \--build-arg http_proxy="${HTTP_PROXY}" \--build-arg https_proxy="${HTTPS_PROXY}" \-f "$INSTALL_DIR/Dockerfile" \"$INSTALL_DIR" | tee "$build_log"; thenecho "镜像构建失败!错误日志:"tail -n 20 "$build_log"exit 1fi# 验证镜像构建local image_id=$(docker images -q "$IMAGE_NAME")if [ -z "$image_id" ]; thenecho "错误:镜像构建失败,未生成有效镜像!"exit 1fiecho "镜像构建成功!镜像ID:${image_id}"# 推送镜像到私有仓库if ! docker push "$IMAGE_NAME"; thenecho "错误:镜像推送到私有仓库失败!请检查网络连接和仓库配置。"exit 1fi
}# 生成部署文件
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: $IMAGE_NAMEimagePullPolicy: IfNotPresentenv:- name: CONFIG_REMOTE_ENABLEvalue: "false"- name: ENV_TYPEvalue: "cloud"ports:- name: port-httpcontainerPort: 8088- name: port-httpscontainerPort: 8443volumeMounts:- name: log-volumemountPath: /opt/TongWeb/kernel/logs- name: autodeploy-volumemountPath: /opt/TongWeb/kernel/autodeploy- name: licensemountPath: /opt/TongWeb/kernel/license.datsubPath: license.datvolumes:- name: log-volumehostPath:path: /home/work/logstype: DirectoryOrCreate- name: autodeploy-volumehostPath:path: /home/work/autodeploytype: DirectoryOrCreate- name: licenseconfigMap:name: license
EOF# 生成Servicecat > "$K8S_DIR/service.yaml" <<EOF
apiVersion: v1
kind: Service
metadata:name: ${APP_NAME}srv
spec:selector:app: $APP_NAMEtype: NodePortports:- name: port-httpnodePort: 30080port: 9060targetPort: 8088- name: port-httpsnodePort: 30081port: 9443targetPort: 8443
EOF
}# 部署应用到集群
deploy_to_cluster() {echo "正在部署应用..."kubectl apply -f "$K8S_DIR/deployment.yaml" -n "$NAMESPACE"kubectl apply -f "$K8S_DIR/service.yaml" -n "$NAMESPACE"# 等待Pod就绪local retry=0while [ $retry -lt 10 ]; dolocal status=$(kubectl get pod -n "$NAMESPACE" -l app=$APP_NAME -o jsonpath='{.items[0].status.phase}')if [ "$status" == "Running" ]; thenecho ""echo "Pod 已正常运行!"kubectl get pod -n "$NAMESPACE"return 0fiecho -n "."((retry++))sleep 5doneecho "错误:Pod 启动超时!"kubectl describe pod -n "$NAMESPACE" -l app=$APP_NAMEexit 1
}# 主流程
main() {init_envextract_packagesetup_kubernetesbuild_imagegenerate_manifestsdeploy_to_clusterecho ""echo "═"*50echo "部署完成!"echo "访问地址:http://<节点IP>:30080"echo "管理命令:"echo "  kubectl get pod -n $NAMESPACE"echo "  kubectl logs -f <pod名称> -n $NAMESPACE"echo "═"*50
}# 执行主流程
main

执行以下指令:

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

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

# 通过该指令查看pod名称kubectl get pod -n tongweb-namespacekubectl logs -f <pod名称> -n tongweb-namespace

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

#先查pod名称
kubectl get pod -n tongweb-namespace
#删除pod
kubectl delete pod pod名 -n tongweb-namespace
#删除跟license相关的configmap
kubectl delete configmap license -n tongweb-namespace
http://www.dtcms.com/a/262968.html

相关文章:

  • 车辆工程中的压力传感技术:MEMS与薄膜传感器的实战应用
  • 22.安卓逆向2-frida hook技术-app使用非http协议抓不到包解决方式
  • Linux 安装使用教程
  • Pytest自动化测试框架入门?
  • Kafka 核心机制面试题--自问自答
  • 在Flutter中生成App Bundle并上架Google Play
  • 「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
  • 鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
  • Flutter视频压缩插件video_compressffmpeg_kit_flutter_new
  • Memcached 安装使用教程
  • Flutter插件ios_pod
  • httpd-devel 与服务无关
  • Java历史:从橡树到火星探索,从微软法律战到Spring、Gradle
  • [6-02-01].第05节:配置文件 - 读取配置文件的内容
  • 一、(基础)构建一个简单的 LangChain 应用
  • 对称非对称加密,https和http,https通讯原理,Charles抓包原理
  • macos 使用 vllm 启动模型
  • WIFI 低功耗保活知识系列---三.WiFi AP如何广播自己的缓存区信息
  • OpenCV CUDA模块设备层----计算向量的平方根函数sqrt
  • 基于Spring Boot的绿园社区团购系统的设计与实现
  • Python 安装使用教程
  • Spring Boot 启动性能优化实战指南
  • 基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 论坛设计与实现7000字论文
  • 【硬核数学】2.7 理论与现实的鸿沟:深度学习的数值稳定性挑战《从零构建机器学习、深度学习到LLM的数学认知》
  • 【Spring】——事务、整合、注解
  • 后台管理系统模板Art Design Pro
  • js代码03
  • Karmada 多集群服务发现
  • Apache Doris Profile 深度解析:从获取到分析,解锁查询性能优化密码
  • RedhatCentos挂载镜像