- Notifications
You must be signed in to change notification settings - Fork56
Dispatch is a framework for deploying and managing serverless style applications.
License
vmware-archive/dispatch
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
IMPORTANT: VMware has ended active development of this project, this repository will no longer be updated.
NOTE: This is the knative branch of Dispatch. Full Dispatch functionality is still a ways off. The code hererepresents a work in progress. For information about Dispatch Solo, the version of Dispatch distributed as an OVA,seethe
solobranch ordocumentation.
Dispatch is a framework for deploying and managing serverless style applications. The intent is a frameworkwhich enables developers to build applications which are defined by functions which handle business logic and serviceswhich provide all other functionality:
- State (Databases)
- Messaging/Eventing (Queues)
- Ingress (Api-Gateways)
- Etc.
Our goal is to provide a substrate which can be built upon and extended to serve as a framework for serverlessapplications. Additionally, the framework must provide tools and features which aid the developer in building,debugging and maintaining their serverless application.
Checkout the detaileddocumentation including aquickstart guide.
NOTE: The information in this section is specific to the knative branch of Dispatch. Equivalent documentation for Dispatch Solo can be found onthe
solobranch.
The diagram below illustrates the different components which make up the Dispatch project:
NOTE: The information in this section is specific to the knative branch of Dispatch. Equivalent documentation for Dispatch Solo can be found onthe
solobranch.
export GCLOUD_KEY=<path to key.json>
Create GKE cluster:
K8S_VERSION=1.10.7-gke.6export CLUSTER_NAME=dispatch-knativegcloud container clusters create -m n1-standard-4 --cluster-version${K8S_VERSION}${CLUSTER_NAME}gcloud container clusters get-credentials${CLUSTER_NAME}
Install Knative:
# Get the current knative verision used with dispatchKNATIVE_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}
Create a Cloud PKS clusterwith privileged mode enabled.
export VKE_CLUSTER=dispatch-knativevke cluster create --privilegedMode --name$VKE_CLUSTER --cluster-type PRODUCTION --region us-west-2
Get kubectl credentials:
vke cluster auth setup$VKE_CLUSTERInstall Knative:
- Install Istio:
kubectl apply -f third-party/vmware-cloud-pks/istio-1.0.2/istio.yaml
- Wait for Istio pods to become READY (will take a little while to scale up smart cluster):
kubectl get pods -n istio-systemNAME READY STATUS RESTARTS AGEistio-citadel-746c765786-2cm5p 1/1 Running 0 6mistio-cleanup-secrets-vbqk7 0/1 Completed 0 6mistio-egressgateway-57df84cfcf-hpkx4 1/1 Running 0 6mistio-galley-5b4f774c-9gcqm 1/1 Running 0 6mistio-ingressgateway-76dbd65c-7qf2w 1/1 Running 0 6mistio-pilot-7ddfbdf465-cj5jl 2/2 Running 0 6mistio-policy-56789fbb8c-flxkz 2/2 Running 0 6mistio-statsd-prom-bridge-7c77ddc9b9-s2zwl 1/1 Running 0 6mistio-telemetry-855bb88878-kbhsj
- Install Knative serving (includes build):
kubectl apply -f third-party/vmware-cloud-pks/serving-0.2.2/release.yaml
- Install Istio:
In order to install Knative, follow thedevelopment instructions
Installing Dispatch depends on having a Kubernetes cluster with the Knative components installed (Build, Serving and soon Eventing). From here build and install dispatch as follows:
Set the following environment variables:
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}')
Build and publish a dispatch image (Substitute in your docker repository):
Note: if you just want to use a pre-created image use the script to create your
values.yamland continue to step 4.TAG="v0.1.22-knative" ./scripts/values.shDISPATCH_SERVER_DOCKER_REPOSITORY=<docker repository username> PUSH_IMAGES=1 make images
The previous command will output a configuration file
values.yaml:image:host:usernametag:v0.1.xxregistry:url:http://dispatch-docker-registry:5000/repository:dispatch-docker-registry:5000storage:minio:address:dispatch-minio:9000username:********password:********
Deploy via helm chart (if helm is not installed and initialized, do that first):
helm init --wait# helm won't overwrite the existing config-maps (at least not the first/install time), so explicitly delete them.kubectl delete configmap -n knative-serving config-domain config-networkhelm dependency build ./charts/dispatch/helm upgrade -i --debug${RELEASE_NAME} ./charts/dispatch --namespace${DISPATCH_NAMESPACE} -f values.yaml
NOTE: Use following to create cluster role binding for tiller:
kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
Reconfigure Knative serving (need to whitelist our internal repository):
./scripts/configure-knative.sh
Build the CLI (substitute darwin for linux if needed):
make cli-darwin# Create symlink to binaryln -s`pwd`/bin/dispatch-darwin /usr/local/bin/dispatch
Create the Dispatch config:
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# point to the config file (could also move to ~/.dispatch/config)export DISPATCH_CONFIG=`pwd`/config.json
Test out your install:First, create an baseimage:
dispatch create base-image python3-base dispatchframework/python3-base:0.0.13-knativeCreated baseimage: python3-base
Then, create an image:
dispatch create image python3 python3-baseCreated image: python3
Wait for status READY:
dispatch get images NAME| DESTINATION| BASEIMAGE| STATUS| CREATED DATE-------------------------------------------------------------------------- python3|***********|*********| READY| Tue Sep 25 16:51:35 PDT 2018
Create a function:
dispatch createfunction--image python3 hello ./examples/python3/hello.pyCreated function: hello
Once status is READY:
dispatch get function NAME| FUNCTIONIMAGE| STATUS| CREATED DATE---------------------------------------------------------------- hello|*************| READY| Thu Sep 13 12:41:07 PDT 2018
Exec the function:
dispatchexec hello<<<'{"name": "user"}'| jq.{"context": {"logs": {"stdout": ["messages to stdout show up in logs" ],"stderr": null } },"payload": {"myField":"Hello, user from Nowhere" }}
Create an endpoint:
dispatch create endpoint get-hello hello --method GET --method POST --path /hello
Hit the endpoint with curl:
curl -v http://${INGRESS_IP}/hello?name=Jon -H'Host: default.${DISPATCH_NAMESPACE}.dispatch.local'
For a more complete quickstart see thedeveloper documentation
About
Dispatch is a framework for deploying and managing serverless style applications.
Topics
Resources
License
Contributing
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.

