Apache Openwhisk with Kubespray
If you’ looking into serverless computing, you probably have bumped into Apache Openwhisk and Knative. Both are the opensource frameworks for serverless computing that allow you to deploy event-driven microservices, called functions.
Apache Openwhisk deployment has many options, including on top of a running Kubernetes cluster. You may always use the Kubernetes deployment tools such as RKE or Kubespray to deploy Kubernetes and later use helm charts to deploy Apache Openwhisk. I found this the most consistent way of creating Apache Openwhisk deployments for evaluation and performance analysis.
If you used Kubespray to deploy Kubernetes, note that starting version 2.9.0 , Kubespray no longer supports KubeDNS, so your Kubernetes deployment will be using CoreDNS instead. This will impact your Apache Openwhisk deployment, which by default uses KubeDNS for dns resolution. When you deploy the helm chart for openwhisk, you will get an error like this in the nginx pod
nginx: [emerg] 1#1: host not found in resolver "kube-dns.kube-system" in /etc/nginx/nginx.conf:41 nginx: [emerg] host not found in resolver "kube-dns.kube-system" in /etc/nginx/nginx.conf:41
What you need to do is to change the config to use the CoreDNS by updating the k8s section in the values.yaml to use coredns, like this:
k8s: domain: cluster.local dns: coredns.kube-system persistence: enabled: true hasDefaultStorageClass: true explicitStorageClass: nil
You will need to redeploy the helm chart.
Another option if you don’t want to redeploy is to edit the config map of nginx
kubectl edit configmap -n NAMESPACE nginx
you will have to update the resolver to be like this
resolver coredns.kube-system;
Then, you will need to restart the nginx, by scaling it down to 0 pods and then scaling it back up
kubectl scale deployment nginx -n NAMESPACE --replicas=0 kubectl scale deployment nginx -n NAMESPACE --replicas=1
This should fix the dns resolution issue
Good luck !
Leave a Reply