Dispatch is a framework for deploying and managing serverless style applications.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 8 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 8 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 8 年前 | ||
| 7 年前 | ||
| 7 年前 | ||
| 8 年前 | ||
| 7 年前 | ||
| 8 年前 | ||
| 5 年前 | ||
| 7 年前 |
**重要提示:**VMware 已停止对此项目的积极开发,此代码库将不再更新。

**注意:**这是 Dispatch 的 Knative 分支。完整功能的 Dispatch 还有一段时间才能完成。这里的代码代表正在进行中的工作。关于 Dispatch Solo(作为 OVA 分发的 Dispatch 版本)的信息,请参阅 solo 分支 或 文档。
Dispatch 是一个用于部署和管理无服务器风格应用程序的框架。其目的是提供一个框架,让开发者能够构建由处理业务逻辑的函数和提供其他所有功能的服务定义的应用程序:
- 状态(数据库)
- 消息传递/事件(队列)
- 入口(API 网关)
- 等等。
我们的目标是提供一个可以作为无服务器应用程序框架的基础和扩展的底层结构。此外,框架必须提供工具和特性,以帮助开发者构建、调试和维护他们的无服务器应用程序。
文档
架构
**注意:**本节中的信息特定于 Dispatch 的 Knative 分支。Dispatch Solo 的等效文档可以在 solo 分支 中找到。
下图说明了构成 Dispatch 项目的不同组件:

安装
**注意:**本节中的信息特定于 Dispatch 的 Knative 分支。Dispatch Solo 的等效文档可以在 solo 分支 中找到。
先决条件
GKE
-
export GCLOUD_KEY=<path to key.json> -
创建 GKE 集群:
K8S_VERSION=1.10.7-gke.6 export CLUSTER_NAME=dispatch-knative gcloud container clusters create -m n1-standard-4 --cluster-version ${K8S_VERSION} ${CLUSTER_NAME} gcloud container clusters get-credentials ${CLUSTER_NAME} -
安装 Knative:
# 获取与 dispatch 一起使用的当前 knative 版本 KNATIVE_VERSION=$(cat Gopkg.toml | grep -A 2 'name = "github.com/knative/serving"' | grep revision | cut -d '"' -f2) ./scripts/install-knative.py ${CLUSTER_NAME} --gcloud-key=${GCLOUD_KEY} --revision=${KNATIVE_VERSION}
VMware Cloud PKS
-
创建一个启用了特权模式的 Cloud PKS 集群。
export VKE_CLUSTER=dispatch-knative vke cluster create --privilegedMode --name $VKE_CLUSTER --cluster-type PRODUCTION --region us-west-2 -
获取 kubectl 凭据:
vke cluster auth setup $VKE_CLUSTER -
安装 Knative:
- 安装 Istio:
kubectl apply -f third-party/vmware-cloud-pks/istio-1.0.2/istio.yaml - 等待 Istio pod 变为 READY(智能集群扩展可能需要一些时间):
kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE istio-citadel-746c765786-2cm5p 1/1 Running 0 6m istio-cleanup-secrets-vbqk7 0/1 Completed 0 6m istio-egressgateway-57df84cfcf-hpkx4 1/1 Running 0 6m istio-galley-5b4f774c-9gcqm 1/1 Running 0 6m istio-ingressgateway-76dbd65c-7qf2w 1/1 Running 0 6m istio-pilot-7ddfbdf465-cj5jl 2/2 Running 0 6m istio-policy-56789fbb8c-flxkz 2/2 Running 0 6m istio-statsd-prom-bridge-7c77ddc9b9-s2zwl 1/1 Running 0 6m istio-telemetry-855bb88878-kbhsj - 安装 Knative serving(包括构建):
kubectl apply -f third-party/vmware-cloud-pks/serving-0.2.2/release.yaml
- 安装 Istio:
其他
要安装 Knative,请遵循 开发说明
Dispatch
安装 Dispatch 需要一个安装了 Knative 组件(构建、服务以及即将推出的事件)的 Kubernetes 集群。以下是如何构建和安装 dispatch 的步骤:
-
设置以下环境变量:
export DISPATCH_NAMESPACE="default" export DISPATCH_DEBUG="true" export RELEASE_NAME="dispatch" export MINIO_USERNAME="dispatch" export MINIO_PASSWORD="dispatch" export INGRESS_IP=$(kubectl get service -n istio-system knative-ingressgateway -o wide | tail -n1 | awk '{print $4}') -
构建并发布一个 dispatch 镜像(替换为你的 docker 仓库):
注意:如果你只想使用一个预先创建的镜像,使用脚本创建你的
values.yaml并继续第 4 步。TAG="v0.1.22-knative" ./scripts/values.shDISPATCH_SERVER_DOCKER_REPOSITORY=<docker repository username> PUSH_IMAGES=1 make images -
上一步将输出一个配置文件
values.yaml:image: host: username tag: v0.1.xx registry: url: http://dispatch-docker-registry:5000/ repository: dispatch-docker-registry:5000 storage: minio: address: dispatch-minio:9000 username: ******** password: ******** -
通过 helm 图表部署(如果 helm 未安装和初始化,请先执行):
helm init --wait # helm 不会覆盖现有的 config-maps(至少在第一次/安装时不会),所以明确删除它们。 kubectl delete configmap -n knative-serving config-domain config-network helm dependency build ./charts/dispatch/ helm upgrade -i --debug ${RELEASE_NAME} ./charts/dispatch --namespace ${DISPATCH_NAMESPACE} -f values.yaml**注意:**使用以下命令为 tiller 创建集群角色绑定:
kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default -
重新配置 Knative 服务(需要将我们的内部仓库添加到白名单):
./scripts/configure-knative.sh -
构建 CLI(如果需要,将 darwin 替换为 linux):
make cli-darwin # 创建到二进制文件的符号链接 ln -s `pwd`/bin/dispatch-darwin /usr/local/bin/dispatch -
创建 Dispatch 配置:
cat << EOF > config.json { "current": "${RELEASE_NAME}", "contexts": { "${RELEASE_NAME}": { "host": "$(kubectl -n ${DISPATCH_NAMESPACE} get service ${RELEASE_NAME}-nginx-ingress-controller -o wide | tail -n1 | awk '{print $4}')", "port": 443, "scheme": "https", "insecure": true } } } EOF # 指向配置文件(也可以移动到 ~/.dispatch/config) export DISPATCH_CONFIG=`pwd`/config.json -
测试你的安装: 首先,创建一个基础镜像:
dispatch create base-image python3-base dispatchframework/python3-base:0.0.13-knative Created baseimage: python3-base然后,创建一个镜像:
dispatch create image python3 python3-base Created image: python3等待状态变为 READY:
dispatch get images NAME | DESTINATION | BASEIMAGE | STATUS | CREATED DATE -------------------------------------------------------------------------- python3 | *********** | ********* | READY | Tue Sep 25 16:51:35 PDT 2018创建一个函数:
dispatch create function --image python3 hello ./examples/python3/hello.py Created function: hello等状态变为 READY:
dispatch get function NAME | FUNCTIONIMAGE | STATUS | CREATED DATE ---------------------------------------------------------------- hello | ************* | READY | Thu Sep 13 12:41:07 PDT 2018执行函数:
dispatch exec hello <<< '{"name": "user"}' | jq . { "context": { "logs": { "stdout": [ "messages to stdout show up in logs" ], "stderr": null } }, "payload": { "myField": "Hello, user from Nowhere" } }创建一个端点:
dispatch create endpoint get-hello hello --method GET --method POST --path /hello使用 curl 打击端点:
curl -v http://${INGRESS_IP}/hello?name=Jon -H 'Host: default.${DISPATCH_NAMESPACE}.dispatch.local'
有关更完整的快速入门,请参阅 开发者文档