blob: 7d5b4f5785d9be15c8eb9d6ec8500e636ac6e668 [file] [log] [blame] [view]
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-->
# Deploying OpenWhisk on kind
## Overview
You can run Kubernetes on top of Docker on Linux, MacOS, and Windows using the
[kind](https://github.com/kubernetes-sigs/kind) project.
Based on using Docker-in-Docker (DIND) virtualization and
`kubeadm`, kind can be used to create a virtual multi-node
Kubernetes cluster that is suitable for deploying
OpenWhisk for development and testing. For detailed instructions on kind, we
refer you to that project's [github repository](https://github.com/kubernetes-sigs/kind).
Here we will only cover the basic operations needed to create and
operate a default cluster with two virtual worker nodes.
## Initial setup
Download the latest stable release of `kind` for your platform from
https://github.com/kubernetes-sigs/kind/releases. Our TravisCI testing
currently uses kind v0.11.1 on an ubuntu 18.04 host.
### Creating the Kubernetes Cluster
On Linux, make sure your userid is in the `docker` group on the host
machine. This will enable you to run `kind` without
requiring `sudo` to gain `root` privileges.
We've provided a [script](../deploy/kind/start-kind.sh)
that you can use to bring up a kind cluster in a
reasonable configuration for OpenWhisk. The script
assumes that port 31001 is available on your machine
and can be used by openwhisk. To use a different port,
edit `deploy/kind/kind-cluster.yaml`.
```
./deploy/kind/start-kind.sh
```
### Configuring OpenWhisk
Assuming you used the default port 31001 when starting kind, a
[mycluster.yaml](../deploy/kind/mycluster.yaml]
for a standard deployment of OpenWhisk would be:
```yaml
whisk:
ingress:
type: NodePort
apiHostName: localhost
apiHostPort: 31001
useInternally: false
nginx:
httpsNodePort: 31001
# disable affinity
affinity:
enabled: false
toleration:
enabled: false
invoker:
options: "-Dwhisk.kubernetes.user-pod-node-affinity.enabled=false"
# must use KCF as kind uses containerd as its container runtime
containerFactory:
impl: "kubernetes"
```
Note that you must use the KubernetesContainerFactory when running
OpenWhisk on `kind` because it is configured to use `containerd`
as the underlying container engine.
External to the Kubernetes cluster, for example when using the `wsk` cli,
we will use the port forwarding configured by the `extraPortMappings`
in [kind-cluster.yaml](../deploy/kind/kind-cluster.yaml) to allow the
OpenWhisk apihost property to be set to localhost:31001
## Hints and Tips
If you are working on the core OpenWhisk system and want
to use a locally built controller, invoker, or scheduler image
to test your changes, you need to push the image to the docker image
repository inside the `kind` cluster.
For example, suppose I had a local change to the controller
I wanted to test. To do this, I would build the image normally
(`gradlew distDocker` in `openwhisk`). Then, execute the `kind`
command
```shell
kind load docker-image whisk/controller
```
Then add a stanza to your `mycluster.yaml` to override the default
behavior of pulling a stable `openwhisk/controller` image from Docker Hub.
```yaml
controller:
imageName: "whisk/controller"
imageTag: "latest"
```
Then deploy OpenWhisk normally using `helm install`. The deployed
system will use the locally built `whisk/controller` image.
## Limitations
Using kind is only appropriate for development and testing purposes.
It is not recommended for production deployments of OpenWhisk.
TLS termination will be handled by OpenWhisk's `nginx` service and
will use self-signed certificates. You will need to invoke `wsk` with
the `-i` command line argument to bypass certificate checking.
Unlike using Kubernetes with Docker for Mac 18.06 and later, only the
virtual master/worker nodes are visible to Docker on the host system. The
individual pods running the OpenWhisk system are only visible using
`kubectl` and not directly via host Docker commands.