快速部起一个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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 …