daisy-ycguo closed pull request #317: Documentation enhancements
URL: https://github.com/apache/incubator-openwhisk-deploy-kube/pull/317
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/README.md b/README.md
index 099559e..151115d 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,7 @@ This repository can be used to deploy OpenWhisk to a 
Kubernetes cluster.
 * [Setting up Kubernetes and Helm](#setting-up-kubernetes-and-helm)
 * [Deploying OpenWhisk](#deploying-openwhisk)
 * [Deploying OpenWhisk Providers](#deploying-openwhisk-providers)
+* [Development and Testing](#development-and-testing)
 * [Cleanup](#cleanup)
 * [Issues](#issues)
 
@@ -59,15 +60,17 @@ available as part of the
 [Getting started](https://docs.docker.com/docker-for-mac/#kubernetes)
 documentation from Docker.
 
-In a nutshell, open the Docker preferences pane, switch to the
-Kubernetes panel, and check the box to enable Kubernetes.  You will
-want to use the `kubectl` cli that is installed by Docker in
-`/usr/local/bin`, so please make sure it is appears in your path
-before any `kubectl` you have installed on your machine.  Pick the
+In a nutshell, open the Docker preferences window, switch to the
+`Advanced` panel and make sure you have at least 4GB of Memory
+allocated to Docker. Then switch to the Kubernetes panel, and check
+the box to enable Kubernetes. It is recommended that you use the
+`kubectl` cli that is installed by Docker in `/usr/local/bin`, so
+please make sure it is appears in your path before any `kubectl` you
+might also have installed on your machine.  Finally, pick the
 `docker-for-desktop` config for `kubectl` by executing the command
 `kubectl config use-context docker-for-desktop`.
 
-Once nice feature of using Kubernetes in Docker, is that the
+One nice feature of using Kubernetes in Docker, is that the
 containers being run in Kubernetes are also directly
 visible/accessible via the usual Docker commands. Furthermore, it is
 straightforward to deploy local images by adding a stanza to your
@@ -80,9 +83,9 @@ controller:
   imagePullPolicy: "IfNotPresent"
 ```
 
-NOTE: Docker for Windows 18.06 and later also has similar built-in
-support for Kubernetes. We would be interested in any experience using
-it to run Apache OpenWhisk on the Windows platform.
+NOTE: Docker for Windows 18.06 and later has similar built-in support
+for Kubernetes. We would be interested in any experience using it to
+run Apache OpenWhisk on the Windows platform.
 
 ### Using kubeadm-dind-cluster
 On Linux, you can get a similar experience to using Kubernetes in
@@ -90,13 +93,14 @@ Docker for Mac via the
 [kubeadm-dind-cluster](https://github.com/kubernetes-sigs/kubeadm-dind-cluster)
 project.  In a nutshell, you can get started by doing
 ```shell
+# Get the script for the Kubernetes version you want
 wget 
https://cdn.rawgit.com/kubernetes-sigs/kubeadm-dind-cluster/master/fixed/dind-cluster-v1.10.sh
 chmod +x dind-cluster-v1.10.sh
 
 # start the cluster
 ./dind-cluster-v1.10.sh up
 
-# add kubectl directory to PATH
+# add kubectl directory to your PATH
 export PATH="$HOME/.kubeadm-dind-cluster:$PATH"
 ```
 
@@ -207,7 +211,7 @@ nginx:
 
 Beyond specifying the ingress, the `mycluster.yaml` file is also used
 to customize your OpenWhisk deployment by enabling optional features
-and controlling the replication factor of the various micro-services
+and controlling the replication factor of the various microservices
 that make up the OpenWhisk implementation. See the [configuration
 choices documentation](./docs/configurationChoices.md) for a
 discussion of the primary options.
@@ -287,6 +291,72 @@ Please see the `values.yaml` file and/or README.md in the 
individual
 charts for instructions on enabling any optional customizations of the
 providers.
 
+# Development and Testing
+
+This section outlines how common OpenWhisk development tasks are
+supported when OpenWhisk is deployed on Kubernetes using Helm.
+
+### Running OpenWhisk test cases
+
+Some key differences in a Kubernetes-based deployment of OpenWhisk are
+that deploying the system does not generate a `whisk.properties` file and
+that the various internal microservices (`invoker`, `controller`,
+etc.) are not directly accessible from the outside of the Kubernetes cluster.
+Therefore, although you can run full system tests against a
+Kubernetes-based deployment by giving some extra command line
+arguments, any unit tests that assume direct access to one of the internal
+microservices will fail.   The system tests can be executed in a
+batch-style as shown below, where WHISK_SERVER and WHISK_AUTH are
+replaced by the values returned by `wsk property get --apihost` and
+`wsk property get --auth` respectively.
+```shell
+cd $OPENWHISK_HOME
+./gradlew :tests:testSystemBasic -Dwhisk.auth=$WHISK_AUTH 
-Dwhisk.server=https://$WHISK_SERVER -Dopenwhisk.home=`pwd`
+```
+You can also launch the system tests as JUnit test from an IDE by
+adding the same system properties to the JVM command line used to
+launch the tests:
+```shell
+ -Dwhisk.auth=$WHISK_AUTH -Dwhisk.server=https://$WHISK_SERVER 
-Dopenwhisk.home=`pwd`
+```
+
+### Deploying a locally built docker image.
+
+By overriding the default `image` and `imagePullPolicy` for one or
+more OpenWhisk components, you can run locally built docker images.
+For example, to use a locally built controller image, just add the
+stanza below to your `mycluster.yaml` to override the default behavior
+of pulling `openwhisk/controller:latest` from Docker Hub.
+```yaml
+controller:
+  image: "whisk/controller"
+  imagePullPolicy: "IfNotPresent"
+```
+
+### Selectively redeploying using a locally built docker image
+
+You can use the `helm upgrade` command to selectively redeploy one or
+more OpenWhisk componenets.  Continuing the example above, if you make
+additional changes to the controller source code and want to just
+redeploy it without redeploying the entire OpenWhisk system you can do
+the following:
+```shell
+# Execute these commands in your openwhisk directory
+./gradlew distDocker
+docker tag whisk/controller whisk/controller:v2
+```
+Then, edit your `mycluster.yaml` to contain:
+```yaml
+controller:
+  image: "whisk/controller:v2"
+  imagePullPolicy: "IfNotPresent"
+```
+Redeploy with Helm by executing this commaned in your
+openwhisk-deploy-kube directory:
+```shell
+helm upgrade ./helm/openwhisk --namespace=openwhisk --name=owdev -f 
mycluster.yaml
+```
+
 # Cleanup
 
 Use the following command to remove all the deployed OpenWhisk components:
diff --git a/docs/ingress.md b/docs/ingress.md
index d46b897..3460b37 100644
--- a/docs/ingress.md
+++ b/docs/ingress.md
@@ -91,10 +91,11 @@ nginx:
 ## Setting up NodePort using kubadm-dind-cluster
 
 Obtain the IP address of one of the two Kubernetes worker nodes using
-the command below.  To eliminate a network hop to the nginx pod, pick the
-worker node which you did not label with `openwhisk-role=invoker`.
-So, if you label `kube-node-2` as your invoker node, pick `kube-node-1`
-as your api_host.
+the command below.  Although the nginx NodePort service is actually
+available on both of the nodes, by using the node which you did not
+label with `openwhisk-role=invoker` as your api-host you can cut 1 hop
+out of the network path. So, if you label `kube-node-2` as your
+invoker node, pick `kube-node-1` as your api_host.
 ```shell
 kubectl describe node kube-node-1 | grep InternalIP
 ```
diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md
index 34306f8..7b1c863 100644
--- a/docs/troubleshooting.md
+++ b/docs/troubleshooting.md
@@ -42,12 +42,32 @@ running on your Kubernetes worker node.
 
 If services are having trouble connecting to Kafka, it may be that the
 Kafka service didn't actually come up successfully. One reason Kafka
-can fail to come up is that it cannot connect to itself.  On minikube,
+can fail to fully come up is that it cannot connect to itself.  On minikube,
 fix this by saying `minikube ssh -- sudo ip link set docker0 promisc
 on`. If using kubeadm-dind-cluster, set `USE_HAIRPIN=true` in your environment
 before running 'dind-cluster.sh up`. On full scale Kubernetes clusters,
 make sure that your kubelet's `hairpin-mode` is not `none`).
 
+The usual symptom of this network misconfiguration is the controller
+pod being in a CrashLoopBackOff where it exits before it reports
+the successful creation of its `completed` topic.
+
+Here's an example controller log of a successful startup:
+```
+[2018-10-18T17:53:48.129Z] [INFO] [#tid_sid_unknown] [Config] environment set 
value for kafka.hosts
+[2018-10-18T17:53:48.130Z] [INFO] [#tid_sid_unknown] [Config] environment set 
value for port
+[2018-10-18T17:53:49.360Z] [INFO] [#tid_sid_unknown] [KafkaMessagingProvider] 
created topic completed0
+[2018-10-18T17:53:49.685Z] [INFO] [#tid_sid_unknown] [KafkaMessagingProvider] 
created topic health
+[2018-10-18T17:53:49.929Z] [INFO] [#tid_sid_unknown] [KafkaMessagingProvider] 
created topic cacheInvalidation
+[2018-10-18T17:53:50.151Z] [INFO] [#tid_sid_unknown] [KafkaMessagingProvider] 
created topic events
+```
+Here's what it looks like when the network is misconfigured and kafka is not 
really working:
+```
+[2018-10-18T17:30:37.309Z] [INFO] [#tid_sid_unknown] [Config] environment set 
value for kafka.hosts
+[2018-10-18T17:30:37.310Z] [INFO] [#tid_sid_unknown] [Config] environment set 
value for port
+[2018-10-18T17:30:53.433Z] [INFO] [#tid_sid_unknown] [Controller] Shutting 
down Kamon with coordinated shutdown
+```
+
 ### wsk `cannot validate certificates` error
 
 If you installed self-signed certificates, which is the default


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to