What are the exact system requirements for Knative set up? Why the basic setup guide lead me to exhaustion of resource?

8/26/2019

I have been trying to set up Knative development environment on my system. But everytime i deploy Istio , the pilot remain in pending state and i find its because of resource exhaustion.

I followed basic setup guide from Knative docs. i.e. serving/blob/master/DEVELOPMENT.md

Now if i install and deploy istio according to it, the resources get exhausted and istio-pilot remain in pending state due to no node available.

If i try same with the one given on installation guide i.e. https://knative.dev/docs/install/installing-istio/

It works fine until later when i restart the cluster the api-server get stopped which is according to what i found by searching is also due to lack of resources.

So What is the exact requirement for Knative set up?

I used system with 8 -core processor and 32GB RAM.

Am i allocating it wrong? as much I understood we have to give at least 8Gb memory and 6 CPU to a single node kubernetes structures(That's what i'm using). What about the resources Istio and Knative deployments use?

I checked for the resources and limits in node and got the limits are set to 0%.

I have already tried to limit the CPU and RAM in minikube config, then with --cpu and --memory on the time of starting the minikube, but the output remain the same.

Minikube started with : minikube start

     Creating virtualbox VM (CPUs=6, Memory=8192MB, Disk=20000MB) ...
     Preparing Kubernetes v1.15.2 on Docker 18.09.8 ...
     Pulling images ...

ISTIO Deployed by:

    kubectl apply -f ./third_party/istio-1.2-latest/istio-crds.yaml
    while [[ $(kubectl get crd gateways.networking.istio.io -o 
    jsonpath='{.status.conditions[?(@.type=="Established")].status}') != 
    'True' ]]; do
    echo "Waiting on Istio CRDs"; sleep 1
    done
    kubectl apply -f ./third_party/istio-1.2-latest/istio.yaml

The pilot remain pending and after describing the pod we get :

Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  71s (x4 over 5m12s)  default-scheduler  0/1 nodes are available: 1 Insufficient cpu.

Output for kubectl describe node nodename:

Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests          Limits
  --------           --------          ------
  cpu                5105m (85%)       13800m (229%)
  memory             3749366272 (45%)  9497290Ki (117%)
  ephemeral-storage  0 (0%)            0 (0%)
Events:
  Type    Reason                   Age                From                  Message
  ----    ------                   ----               ----                  -------
  Normal  Starting                 19m                kubelet, minikube     Starting kubelet.
  Normal  NodeHasSufficientMemory  19m (x8 over 19m)  kubelet, minikube     Node minikube status is now: NodeHasSufficientMemory
  Normal  NodeHasNoDiskPressure    19m (x8 over 19m)  kubelet, minikube     Node minikube status is now: NodeHasNoDiskPressure
  Normal  NodeHasSufficientPID     19m (x7 over 19m)  kubelet, minikube     Node minikube status is now: NodeHasSufficientPID
  Normal  NodeAllocatableEnforced  19m                kubelet, minikube     Updated Node Allocatable limit across pods
  Normal  Starting                 18m                kube-proxy, minikube  Starting kube-proxy.

The setup should have been successful as i did set up the limits with RequestQuotas and LimitRange too. But nothing is working.

what am i doing wrong here?

-- rskcodin
istio
knative
knative-serving
kubernetes
linux

1 Answer

8/28/2019

You definitely don't have enough resources. Only for Istio on Minikube you need:

16384 MB of memory and 4 CPUs

Add to this requirements for Knative which are not included in the above and you'll see that resources you provide are not enough.

-- mario
Source: StackOverflow