Getting started on Docker for Mac
The following will help you get started running a riff function with Knative on Docker Community Edition for Mac.
TL;DR
- Install the latest release of Docker for Mac
- Configure the cluster and enable Kubernetes
- Install Knative using the riff CLI
- Create a function
- Invoke the function
install Docker
Kubernetes and the kubectl CLI are now included with Docker Community Edition for Mac.
configure the VM
Once Docker is installed and running, use the Preferences feature in the Docker menu to open Resources / Advanced settings and configure your VM with 4GB of memory and 4 CPUs. Click on Apply & Restart.
enable Kubernetes
Now enable Kubernetes, and wait for the cluster to start.
If you previously had Minikube or GKE configured, switch your kubectl context to "docker-desktop".
install the riff CLI
The riff CLI is available to download from our GitHub releases page. Once installed, check that the riff CLI version is 0.3.0 or later.
riff version
Version
riff cli: 0.3.1 (1ff6c6d7a708e52eb6843e89f9a618fcbfebbb9f)
At this point it is useful to monitor your cluster using a utility like watch
. To install on a Mac
brew install watch
Watch pods in a separate terminal.
watch -n 1 kubectl get pod --all-namespaces
install Knative using the riff CLI
Install Knative, watching the pods until everything is running (this could take a couple of minutes). The --node-port
option replaces LoadBalancer type services with NodePort.
riff system install --node-port
You should see pods running in namespaces istio-system, knative-build, knative-serving, and knative-eventing as well as kube-system when the system is fully operational.
NAMESPACE NAME READY STATUS RESTARTS AGE
docker compose-7cf768cb84-dm5ch 1/1 Running 0 36m
docker compose-api-579965d67f-m4hzk 1/1 Running 0 36m
istio-system cluster-local-gateway-547467ccf6-f7lnz 1/1 Running 0 2m7s
istio-system istio-citadel-7d64db8bcf-9hg6r 1/1 Running 0 2m8s
istio-system istio-cleanup-secrets-kq74p 0/1 Completed 0 2m17s
istio-system istio-egressgateway-6ddf4c8bd6-hm298 1/1 Running 0 2m8s
istio-system istio-galley-7dd996474-94nwm 1/1 Running 0 2m9s
istio-system istio-ingressgateway-84b89d647f-9lgpm 1/1 Running 0 2m8s
istio-system istio-pilot-54b76645df-fb7fv 2/2 Running 0 2m2s
istio-system istio-policy-5c4d9ff96b-w6tpb 2/2 Running 0 2m8s
istio-system istio-sidecar-injector-6977b5cf5b-plf8x 1/1 Running 0 2m8s
istio-system istio-statsd-prom-bridge-b44b96d7b-fzd4l 1/1 Running 0 2m9s
istio-system istio-telemetry-7676df547f-hx7zh 2/2 Running 0 2m8s
knative-build build-controller-7b8987d675-9ch5q 1/1 Running 0 81s
knative-build build-webhook-74795c8696-sbg9g 1/1 Running 0 81s
knative-eventing eventing-controller-864657d8d4-l666c 1/1 Running 0 78s
knative-eventing in-memory-channel-controller-f794cc9d8-f4hml 1/1 Running 0 77s
knative-eventing in-memory-channel-dispatcher-8595c7f8d7-s7xc6 2/2 Running 1 77s
knative-eventing webhook-5d76776d55-r7qzm 1/1 Running 0 78s
knative-serving activator-7c8b59d78-nf6qq 2/2 Running 1 79s
knative-serving autoscaler-666c9bfcc6-vwg49 2/2 Running 1 79s
knative-serving controller-799cd5c6dc-zj6lw 1/1 Running 0 79s
knative-serving webhook-5b66fdf6b9-xtcsn 1/1 Running 0 79s
kube-system coredns-86c58d9df4-ldzk2 1/1 Running 0 37m
kube-system coredns-86c58d9df4-psg2l 1/1 Running 0 37m
kube-system etcd-docker-desktop 1/1 Running 0 36m
kube-system kube-apiserver-docker-desktop 1/1 Running 0 36m
kube-system kube-controller-manager-docker-desktop 1/1 Running 0 36m
kube-system kube-proxy-2gb2c 1/1 Running 0 37m
kube-system kube-scheduler-docker-desktop 1/1 Running 0 36m
initialize the namespace and provide credentials for pushing images to DockerHub
Use the riff CLI to initialize your namespace (if you plan on using a namespace other than default
then substitute the name you want to use). This will create a serviceaccount and a secret with the provided credentials and install a buildtemplate. Replace the ??? with your docker username.
export DOCKER_ID=???
riff namespace init default --docker-hub $DOCKER_ID
You will be prompted to provide the password.
create a function
This step will pull the source code for a function from a GitHub repo, build a container image based on the node function invoker, and push the resulting image to your dockerhub repo.
riff function create square \
--git-repo https://github.com/projectriff-samples/node-square \
--artifact square.js \
--verbose
If you're still watching pods, you should see something like the following
NAMESPACE NAME READY STATUS RESTARTS AGE
default square-jhtmf-pod-23a291 0/1 Init:1/7 0 16s
The 7 "Init" containers may take a while to complete the first time a function is built, but eventually that pod should show a status of completed, and a new square deployment pod should be running 3/3 containers.
NAMESPACE NAME READY STATUS RESTARTS AGE
default square-jhtmf-pod-23a291 0/1 Completed 0 101s
default square-pb9nf-deployment-849689c559-jg87j 3/3 Running 0 44s
invoke the function
riff service invoke square --json -- -w '\n' -d 8
result
curl http://localhost:31380/ -H 'Host: square.default.example.com' -H 'Content-Type: application/json' -w '\n' -d 8
64
delete the function
riff service delete square
uninstalling and reinstalling
If you need to upgrade riff, we recommend resetting the Kubernetes cluster first from the Troubleshoot menu, and then reinstalling.