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
英文地址,請注明出處:http://en.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…