快速部起一個Openwhisk平臺,使用telego k8s服務部署能力內網部署

Telego 簡介與 OpenWhisk 部署實踐

概述

Telego 是一個用于便攜式 Kubernetes 部署的工具,旨在解決容器鏡像拉取中的網絡代理問題。本文檔描述了如何通過 Telego 將 Apache OpenWhisk(一個 Serverless 計算平臺)部署到 Kubernetes 集群,并通過本地鏡像倉庫規避網絡代理限制。以下內容基于提供的配置文件和實踐經驗,詳細說明部署流程、環境配置及核心配置文件。


背景與需求

Apache OpenWhisk 是一個開源的 Serverless 計算平臺,之前通過 apache/openwhisk-deploy-kube 倉庫的 Helm 部署方式進行安裝。然而,在部署過程中,經常遇到網絡代理問題,導致鏡像拉取失敗。為了解決這一問題,研發了 Telego,通過將所有所需鏡像全量拉取到本地鏡像倉庫,并結合 Telego 的便攜部署能力,徹底規避網絡代理限制。


前提環境配置

在開始部署之前,需確保以下環境配置已完成:

運維流程

  1. 發布到 MainNode:完成 MainNode 的安裝和更新配置。
  2. 必要二進制文件準備:準備并上傳必要的二進制文件。
  3. 部署鏡像倉庫:配置并部署本地鏡像倉庫。
  4. 部署鏡像上傳服務:確保鏡像上傳服務可用。

Kubernetes 可訪問性(可選)

  • 操作節點已對接目標 Kubernetes 集群,或本身位于集群中。
  • 配置或獲取管理員級別的 kubeconfig 文件。

核心配置文件

以下是 Telego 的核心配置文件及其詳細解釋,用于部署 OpenWhisk:

comment: openwhisk serverless 計算平臺local_values:ingress_ip: 192.168.31.162openwhisk-override-values:read_from_file: template/override-values.ymloverride-init_db:read_from_file: template/override-init_db.shoverride-runtimes:read_from_file: template/override-runtimes.jsonprepare:- filemap: content: ${openwhisk-override-values}path: teledeploy/override-values.ymlmode: 755- filemap:content: ${override-runtimes}path: openwhisk-deploy-kube/helm/openwhisk/runtimes.jsonmode: 755- filemap:content: ${override-init_db}path: openwhisk-deploy-kube/helm/openwhisk/configMapFiles/initCouchDB/initdb.shmode: 755- git: https://github.com/apache/openwhisk:ef725a653ab112391f79c274d8e3dcfb915d59a3- image: openwhisk/java8action:1.17.0- image: openwhisk/ow-utils:ef725a6- image: zookeeper:3.4- image: wurstmeister/kafka:2.12-2.3.1- image: apache/couchdb:2.3- image: nginx:1.21.1- image: openwhisk/controller:ef725a6- image: openwhisk/scheduler:ef725a6- image: bitnami/etcd:3.4.0- image: openwhisk/invoker:ef725a6- image: openwhisk/apigateway:1.0.0- image: redis:4.0- image: openwhisk/user-events:ef725a6- image: prom/prometheus:v2.14.0- image: grafana/grafana:6.3.0- image: openwhisk/alarmprovider:2.3.0- image: openwhisk/kafkaprovider:2.1.0- image: busybox:latest- image: docker.elastic.co/elasticsearch/elasticsearch:6.7.2helms:openwhisk:helm-dir: openwhisk-deploy-kube/helm/openwhiskoverwrite-config: teledeploy/override-values.ymlnamespace: openwhisk

配置項解釋

local_values
  • ingress_ip:指定 OpenWhisk 的 Ingress IP 地址(例如 192.168.31.162),用于外部訪問。
  • openwhisk-override-values:引用 template/override-values.yml,用于覆蓋 Helm 的默認值。
  • override-init_db:引用 template/override-init_db.sh,用于覆蓋 CouchDB 初始化腳本。
  • override-runtimes:引用 template/override-runtimes.json,用于覆蓋運行時配置。
prepare
  • filemap:將模板文件映射到指定路徑,并設置文件權限(mode: 755)。例如:
    • openwhisk-override-values 寫入 teledeploy/override-values.yml
    • override-runtimes 寫入 openwhisk-deploy-kube/helm/openwhisk/runtimes.json
    • override-init_db 寫入 CouchDB 初始化腳本路徑。
  • git:指定 OpenWhisk 倉庫的特定提交(ef725a653ab112391f79c274d8e3dcfb915d59a3),Telego 將其下載并準備為壓縮包(teledeploy/倉庫名.tar.gz)。
  • image:列出所有所需鏡像(包括 OpenWhisk 組件及其他依賴,如 Zookeeper、Kafka 等)。Telego 在 prepare 階段拉取這些鏡像(支持 arm64amd64 架構),并在 upload 階段上傳到本地鏡像倉庫。
helms
  • openwhisk
    • helm-dir:指定 Helm Chart 目錄(openwhisk-deploy-kube/helm/openwhisk)。
    • overwrite-config:指定覆蓋值的文件(teledeploy/override-values.yml)。
    • namespace:指定部署的 Kubernetes 命名空間(openwhisk)。

準備內部鏡像

OpenWhisk 部署依賴 Helm Chart。為確保鏡像拉取無網絡問題,需執行以下步驟:

  1. 定位 Helm 值文件

    • 分析 openwhisk-deploy-kube/helm/openwhisk 中的 values.yaml,列出所有使用的鏡像及其標簽。
    • prepare 階段,將這些鏡像添加到 image 列表中(見上述配置)。
  2. 鏡像拉取與上傳

    • Telego 在 prepare 階段全量拉取列出的鏡像(支持 arm64amd64 架構)。
    • upload 階段,鏡像被統一上傳到預配置的本地鏡像倉庫。

Helm 值覆蓋配置

為確保容器從本地鏡像倉庫拉取鏡像,需通過 Helm 的值覆蓋機制調整配置:

配置示例

local_values:openwhisk-override-values:read_from_file: template/override-values.ymlprepare:- filemap: content: ${openwhisk-override-values}path: teledeploy/override-values.ymlmode: 755helms:openwhisk:helm-dir: openwhisk-deploy-kube/helm/openwhiskoverwrite-config: teledeploy/override-values.ymlnamespace: openwhisk

template/override-values.yml 內容
以下是覆蓋值的部分內容,展示了鏡像地址重定向和 Ingress 配置:

scheduler:enabled: true
metrics:prometheusEnabled: trueuserMetricsEnabled: true
invoker:containerFactory:impl: "kubernetes"
whisk:ingress:apiHostName: ${ingress_ip}apiHostProto: "http"limits:actionsInvokesPerminute: 100000actionsInvokesConcurrent: 100000utility:imageName: "${IMG_REPO}/teleinfra/ow-utils"
zookeeper:imageName: "${IMG_REPO}/teleinfra/zookeeper"
kafka:imageName: "${IMG_REPO}/teleinfra/kafka"
db:imageName: "${IMG_REPO}/teleinfra/couchdb"
nginx:imageName: "${IMG_REPO}/teleinfra/nginx"
controller:imageName: "${IMG_REPO}/teleinfra/controller"
scheduler:imageName: "${IMG_REPO}/teleinfra/scheduler"
etcd:imageName: "${IMG_REPO}/teleinfra/etcd"imageTag: "3.4.0"
invoker:imageName: "${IMG_REPO}/teleinfra/invoker"
apigw:imageName: "${IMG_REPO}/teleinfra/apigateway"
redis:imageName: "${IMG_REPO}/teleinfra/redis"
user_events:imageName: "${IMG_REPO}/teleinfra/user-events"
prometheus:imageName: "${IMG_REPO}/teleinfra/prometheus"
grafana:imageName: "${IMG_REPO}/teleinfra/grafana"
providers:alarm:imageName: "${IMG_REPO}/teleinfra/alarmprovider"kafka:imageName: "${IMG_REPO}/teleinfra/kafkaprovider"
busybox:imageName: "${IMG_REPO}/teleinfra/busybox"
elasticsearch:image: "${IMG_REPO}/teleinfra/elasticsearch"

關鍵點

  • 鏡像地址重定向:所有鏡像名稱被覆蓋為 ${IMG_REPO}/teleinfra/{鏡像名},指向本地鏡像倉庫。
  • Ingress 配置apiHostName 使用 local_values 中的 ingress_ip 動態替換。
  • 性能測試:通過設置較高的 actionsInvokesPerminuteactionsInvokesConcurrent(均為 100000)進行壓力測試。

平臺綁定的特化配置覆蓋

在部署過程中,發現 openwhisk-deploy-kube/helm/openwhisk/runtimes.json 中也包含鏡像地址,需進行覆蓋:

runtimes.json 示例

{"java": [{"kind": "java:8","default": true,"image": {"prefix": "${IMG_REPO}/teleinfra","name": "java8action","tag": "1.17.0"}}]
}
  • 使用 Telego 的變量替換機制,將鏡像地址重定向到本地鏡像倉庫。

平臺綁定的特化腳本覆蓋

CouchDB 初始化腳本(init_db.sh)中包含對 GitHub 倉庫的訪問,同樣受網絡代理限制。Telego 通過共享文件服務器解決此問題:

覆蓋邏輯

  1. Git 資源準備

    • prepare 階段,指定 OpenWhisk 倉庫及其提交 ID:
      prepare:- git: https://github.com/apache/openwhisk:ef725a653ab112391f79c274d8e3dcfb915d59a3
      
    • Telego 將資源下載并打包為 teledeploy/openwhisk.tar.gz
  2. 腳本覆蓋

    • 使用 template/override-init_db.sh 替換默認的 init_db.sh
      # 原始邏輯(注釋掉)
      # git clone https://github.com/apache/openwhisk /openwhisk
      # pushd /openwhisk
      #     git checkout $OW_GIT_TAG_OPENWHISK
      # popd# 從 MainNode 下載
      curl -O http://${MAIN_NODE_IP}:8003/k8s_openwhisk/openwhisk.tar.gz
      tar -xzf openwhisk.tar.gz
      
    • 使用 Telego 的變量替換機制,將 MAIN_NODE_IP 動態替換為主節點的 IP 地址。

總結

通過 Telego 的便攜部署能力,結合本地鏡像倉庫和 Helm 值覆蓋機制,成功規避了 OpenWhisk 部署中的網絡代理問題。核心步驟包括:

  1. 配置本地鏡像倉庫并全量拉取所需鏡像。
  2. 使用 Helm 值覆蓋重定向鏡像地址。
  3. 利用 Telego 的變量替換和共享文件服務器處理特化配置和腳本。
  4. 通過 Telego 的 preparehelms 配置實現自動化部署。

此實踐展示了 Telego 在復雜 Kubernetes 部署場景中的靈活性和可靠性,適用于需要隔離網絡環境的 Serverless 平臺部署。


備注:本文檔基于提供的配置和實踐經驗整理,旨在為類似場景提供參考。如需進一步調整或優化,可根據實際環境和需求修改配置文件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907221.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907221.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LockSupport與Condition解析

本章我們介紹兩個Java 并發包中用于線程協作的工具--LockSupport和Condition LockSupport: Java 并發包(java.util.concurrent.locks)提供了基于許可(permit)的線程阻塞和喚醒機制--LockSupport 對于LockSupport是通…

【機器學習基礎】機器學習入門核心算法:邏輯回歸(Decision Tree)

機器學習入門核心算法:邏輯回歸(Decision Tree) 一、算法邏輯1.1 基本概念1.2 算法流程 二、算法原理與數學推導2.1 特征選擇指標信息熵(ID3算法)信息增益(Information Gain)信息增益率&#xf…

網絡編程3

管道的性質 讀緩沖區為空,read阻塞寫緩沖區為空,write阻塞一端先close,另一端繼續read,read不阻塞,立刻返回0一端先close,另一端繼續write,write會觸發SIGPIPE信號,進程異常終止 soc…

influxdb時序數據庫

以下概念及操作均來自influxdb2 官方文檔 InfluxDB2 is the platform purpose-built to collect, store, process and visualize time series data. Time series data is a sequence of data points indexed in time order. Data points typically consist of successive meas…

洛谷 P3372 【模板】線段樹 1

【題目鏈接】 洛谷 P3372 【模板】線段樹 1 【題目考點】 1. 線段樹 2. 樹狀數組 【解題思路】 本題要求維護區間和,實現區間修改、區間查詢。 可以使用樹狀數組或線段樹完成該問題,本文僅介紹使用線段樹的解法。 解法1:線段樹 線段樹…

軟件更新 | TSMaster 202504 版本已上線!三大功能讓車載測試更智能

車載測試的智能化時代正在加速到來!TSMaster 202504 版本正式發布,本次更新聚焦以太網通信與數據高效處理,帶來三大核心功能升級—以太網報文信息過濾、XCP on Ethernet支持、按時間范圍離線回放,助力工程師更精準、更靈活地完成測…

java-單列集合list與set。

集合定位:存儲數據的容器 與數組的區別: 數組只能存儲同種數據類型數據,集合可以存儲不同類型的數據。 數組的長度一旦創建長度不可變,集合的長度是可變的 數組的操作單一,集合的操作比較豐富(增刪改查&…

ai之pdf解析工具 PPStructure 還是PaddleOCR

目錄 重點是四 先用 PPStructure 版面分析,分成不同的塊兒,再選用 PaddleOCR、或PPStructure基礎路徑OCR模型配置OCR模型配置GPU配置硬件配置性能配置一、框架選型對比分析1. **PaddleOCR核心能力**2. **PP-Structure核心能力**3. **選型結論**二、錯誤根因分析與修復方案1. …

Android計算機網絡學習總結

TCP vs UDP 核心區別?? ?題目?:TCP為什么稱為可靠傳輸協議?UDP在哪些場景下比TCP更具優勢? ?得分要點?: ?可靠性機制? 三握四揮建立可靠連接確認應答(ACK) 超時重傳滑動窗口流量控制擁塞控制&…

深入解析Java組合模式:構建靈活樹形結構的藝術

引言:當對象需要樹形組織時 在日常開發中,我們經常需要處理具有層次結構的對象集合。比如: 文件系統中的文件夾與文件GUI界面中的容器與控件企業組織架構中的部門與員工 這類場景中的對象呈現明顯的整體-部分層次結構,如何優雅…

mobaxterm通過ssh登錄docker無圖形界面

1. 流程 下面是使用Mobaxterm通過SSH登錄Docker無圖形界面的步驟: 步驟 操作 1 在本地安裝Mobaxterm 2 配置Mobaxterm連接SSH 3 啟動Docker容器 4 在Mobaxterm中通過SSH連接到Docker容器 2. 操作步驟 步驟1:安裝Mobaxterm 首先&#xff…

【趙渝強老師】HBase的體系架構

HBase是大表(BigTable)思想的一個具體實現。它是一個列式存儲的NoSQL數據庫,適合執行數據的分析和處理。簡單來說,就是適合執行查詢操作。從體系架構的角度看,HBase是一種主從架構,包含:HBase H…

linux 新增驅動宏config.in配置

?1. 添加配置宏步驟? ?1.1 修改 Kconfig(推薦方式)? ?定位 Kconfig 文件? 內核各子目錄(如 drivers/char/)通常包含 Kconfig 文件,用于定義模塊配置選項7。?添加宏定義? 示例:在 drivers/char/Kc…

關于git的使用

下載git 可以去git的官網下載https://git-scm.com/downloads 也可以去找第三方的資源下載,下載后是一個exe應用程序,直接點開一直下一步就可以安裝了 右鍵任意位置顯示這兩個就代表成功,第一個是git官方的圖形化界面,第二個是用…

WPF【11_8】WPF實戰-重構與美化(UI 與視圖模型的聯動,實現INotifyPropertyChanged)

11-13 【重構】INotifyPropertyChanged 與 ObservableCollection 現在我們來完成新建客戶的功能。 當用戶點擊“客戶添加”按鈕以后系統會清空當前所選定的客戶,客戶的詳細信息以及客戶的預約記錄會從 UI 中被清除。然后我們就可以在輸入框中輸入新的客戶信息了&am…

ArkUI:鴻蒙應用響應式與組件化開發指南(一)

文章目錄 引言1.ArkUI核心能力概覽1.1狀態驅動視圖1.2組件化:構建可復用UI 2.狀態管理:從單一組件到全局共享2.1 狀態裝飾器2.2 狀態傳遞模式對比 引言 鴻蒙生態正催生應用開發的新范式。作為面向全場景的分布式操作系統,鴻蒙的北向應用開發…

List優雅分組

一、前言 最近小永哥發現,在開發過程中,經常會遇到需要對list進行分組,就是假如有一個RecordTest對象集合,RecordTest對象都有一個type的屬性,需要將這個集合按type屬性進行分組,轉換為一個以type為key&…

AI與.NET技術實操系列(八):使用Catalyst進行自然語言處理

引言 自然語言處理(Natural Language Processing, NLP)是人工智能領域中最具活力和潛力的分支之一。從智能客服到機器翻譯,再到語音識別,NLP技術正以其強大的功能改變著我們的生活方式和工作模式。 Catalyst的推出極大降低了NLP…

MySQL 8.0 OCP 1Z0-908 題目解析(13)

題目49 Choose the best answer. t is a non - empty InnoDB table. Examine these statements, which are executed in one session: BEGIN; SELECT * FROM t FOR UPDATE;Which is true? ○ A) mysqlcheck --analyze --all - databases will execute normally on all ta…

Docker 一鍵部署倒計時頁面:Easy Countdown全設備通用

Easy Countdown 介紹 Easy countdown是一個易于設置的倒計時頁面。可以設置為倒計時或計時器。可用于個人生活、工作管理、教育、活動策劃等多個領域。 🚢 項目地址 Github:https://github.com/Yooooomi/easy-countdown 🚀Easy Countdown …