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

yaml 复制代码
comment: openwhisk serverless 计算平台

local_values:
  ingress_ip: 192.168.31.162
  openwhisk-override-values:
    read_from_file: template/override-values.yml
  override-init_db:
    read_from_file: template/override-init_db.sh
  override-runtimes:
    read_from_file: template/override-runtimes.json

prepare:
  - filemap: 
      content: ${openwhisk-override-values}
      path: teledeploy/override-values.yml
      mode: 755
  - filemap:
      content: ${override-runtimes}
      path: openwhisk-deploy-kube/helm/openwhisk/runtimes.json
      mode: 755
  - filemap:
      content: ${override-init_db}
      path: openwhisk-deploy-kube/helm/openwhisk/configMapFiles/initCouchDB/initdb.sh
      mode: 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.2

helms:
  openwhisk:
    helm-dir: openwhisk-deploy-kube/helm/openwhisk
    overwrite-config: teledeploy/override-values.yml
    namespace: 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 的值覆盖机制调整配置:

配置示例

yaml 复制代码
local_values:
  openwhisk-override-values:
    read_from_file: template/override-values.yml

prepare:
  - filemap: 
      content: ${openwhisk-override-values}
      path: teledeploy/override-values.yml
      mode: 755

helms:
  openwhisk:
    helm-dir: openwhisk-deploy-kube/helm/openwhisk
    overwrite-config: teledeploy/override-values.yml
    namespace: openwhisk

template/override-values.yml 内容

以下是覆盖值的部分内容,展示了镜像地址重定向和 Ingress 配置:

yaml 复制代码
scheduler:
  enabled: true
metrics:
  prometheusEnabled: true
  userMetricsEnabled: true
invoker:
  containerFactory:
    impl: "kubernetes"
whisk:
  ingress:
    apiHostName: ${ingress_ip}
    apiHostProto: "http"
  limits:
    actionsInvokesPerminute: 100000
    actionsInvokesConcurrent: 100000

utility:
  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 示例

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:

      yaml 复制代码
      prepare:
        - git: https://github.com/apache/openwhisk:ef725a653ab112391f79c274d8e3dcfb915d59a3
    • Telego 将资源下载并打包为 teledeploy/openwhisk.tar.gz

  2. 脚本覆盖

    • 使用 template/override-init_db.sh 替换默认的 init_db.sh

      bash 复制代码
      # 原始逻辑(注释掉)
      # 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 平台部署。


备注:本文档基于提供的配置和实践经验整理,旨在为类似场景提供参考。如需进一步调整或优化,可根据实际环境和需求修改配置文件。

相关推荐
庸子3 小时前
使用Rancher在CentOS 环境上部署和管理多Kubernetes集群
kubernetes·centos·rancher
Dust | 棉花糖5 小时前
Kubernetes
云原生·容器·kubernetes
久绊A5 小时前
OceanBase 共享存储:云原生数据库的存储
数据库·云原生·oceanbase
沛沛老爹5 小时前
探索服务网格(Service Mesh):云原生时代的网络新范式
微服务·云原生·服务网格·service_mesh·架构知识
Bypass--5 小时前
《云原生安全攻防》-- K8s日志审计:从攻击溯源到安全实时告警
安全·docker·云原生·容器·kubernetes
Big__Star16 小时前
Windows 上配置 Docker,Docker 的基本原理和用途,以及如何在 Docker 中运行程序
windows·docker·容器
云攀登者-望正茂17 小时前
深入探究AKS Workload Identity
kubernetes·azure
小黑屋说YYDS21 小时前
Docker常用命令介绍
运维·docker·容器
王 富贵21 小时前
docker命令
运维·docker·容器