-1

I am trying to run this project configured for AWS cloud deployment in my local cluster environment. In the cloud deployment, it is configured using Kubernetes CLI (kubectl) and kops (a tool to create & manage Kubernetes clusters on public cloud infrastructure) on AWS cloud.

In short, my question is: Is not it possible to run this application in my local 2-node kubernetes cluster for testing (as I do not have AWS cloud)?

More details:

In the cloud setup, it has a cluster creating script to create a cluster and after the creation of the cluster, we get the URL of two AWS ELBs, which can be used to interact with two services provided by the cloud loadbalancer (one backend service+ one frontend service).

My problem: As I am trying to run the project on a 2-node kubernetes cluster hosted in my lab. I have set up the cluster using kubeadm instead of native AWS cloud (kops + k8s) as given in the GitHub link. I have modified the script to remove the references to kops and AWS respectively. In this local kubernetes cluster, I have used MetalLB as a loadBalancer for the services.

At the end of script, unlike in AWS cloud deployment, instead of 2 AWS ELB address links which the client can use to interface with the system services, we are getting two public IPs of the physical nodes: xxx.xxx.80.72 and xxx.xxx.12.58 respectively for the two services, provided by the MetalLb loadbalancer (using pre-configured address pool).

As expected all the pods are in running state.

$ kubectl get all -o wide

NAME                        READY   STATUS    RESTARTS   AGE   IP               NODE   NOMINATED NODE   READINESS GATES

pod/benchmark-nodes-qccl6   4/4     Running   0          22h   xxx.xxx..58    srl1   <none>           <none>

pod/benchmark-nodes-s2rqj   4/4     Running   0          22h   xxx.xxx.80.72    srl2   <none>           <none>

pod/function-nodes-ct7jm    4/4     Running   17         22h   xxx.xxx.12.58    srl1   <none>           <none>

pod/function-nodes-d5r6w    4/4     Running   7          22h   xxx.xxx..80.72    srl2   <none>           <none>

pod/management-pod          1/1     Running   0          22h   192.168.120.66   srl1   <none>           <none>

pod/memory-nodes-7dhsv      1/1     Running   1          22h   xxx.xxx.80.72    srl2   <none>           <none>

pod/memory-nodes-v8s2c      1/1     Running   1          22h   xxx.xxx.12.58    srl1   <none>           <none>

pod/monitoring-pod          1/1     Running   1          22h   192.168.120.84   srl1   <none>           <none>

pod/routing-nodes-lc62q     1/1     Running   1          22h   xxx.xxx.80.72    srl2   <none>           <none>

pod/routing-nodes-xm8n2     1/1     Running   1          22h   xxx.xxx.12.58    srl1   <none>           <none>

pod/scheduler-nodes-495kj   1/1     Running   0          22h   xxx.xxx.80.72    srl2   <none>           <none>

pod/scheduler-nodes-pjb9w   1/1     Running   0          22h   xxx.xxx.12.58    srl1   <none>           <none>

$kubectl get svc -A

NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                                                                                    AGE   SELECTOR

service/function-service   LoadBalancer   10.108.79.97    xxx.xxx.12.58   5000:32427/TCP,5001:30516/TCP,5002:30830/TCP,5003:31430/TCP,5004:32448/TCP,5005:30177/TCP,5006:30892/TCP   22h   role=scheduler

service/kubernetes         ClusterIP      10.96.0.1       <none>          443/TCP                                                                                                    20d   <none>

service/routing-service    LoadBalancer   10.107.63.188   xxx.xxx.80.72   6450:31251/TCP,6451:31374/TCP,6452:30037/TCP,6453:32030/TCP                                                22h   role=routing

However, when I try to connect with the service from a client in the cluster, it is failing to connect to the services. The execution always going into the exception in the if-else condition at _connect method (code given bellow):

At this point can someone please give me some pointers on what might be the issue with connecting the services for this project in my bare-metal 2-node cluster?

def _connect(self):
       sckt = self.context.socket(zmq.REQ)
       sckt.setsockopt(zmq.RCVTIMEO, 1000)
       sckt.connect(self.service_addr % CONNECT_PORT)

       sckt.send_string('')


       try:
           result = sckt.recv_string()
           return result
       except zmq.ZMQError as e:
           if e.errno == zmq.EAGAIN:
               return None
           else:
               raise e


Wytrzymały Wiktor
  • 11,492
  • 5
  • 29
  • 37
Azad Md Abul Kalam
  • 115
  • 1
  • 1
  • 7

1 Answers1

0

Is not it possible to run this application in my local 2-node kubernetes cluster for testing (as I do not have aws cloud)?

It is not a recommended approach and will not work as expected.

By trying to run this setup on non-AWS environment you are not meeting the Prerequisites:

We assume you are running inside an EC2 linux VM on AWS, where you have Python3 installed (preferably Python3.6 or later -- we have not tested with earlier versions). AWS has default quotas on resources that can be allocated for accounts. The cluster to create in this doc will exceed the default vCPU limit(32) for a regular AWS account. Please make sure this limit is lifted before proceeding.

For learning and testing purposes locally it would be better for you to go by Creating a cluster with kubeadm:

The kubeadm tool is good if you need:

  • A simple way for you to try out Kubernetes, possibly for the first time.
  • A way for existing users to automate setting up a cluster and test their application.
  • A building block in other ecosystem and/or installer tools with a larger scope.
Wytrzymały Wiktor
  • 11,492
  • 5
  • 29
  • 37
  • Thanks a lot! Actually my current 2-node kubernetes cluster is setup using kubeadm. But I am not sure if it can cause any problem to run the application mentioned above. My observation is if they can run in VM, it should also run in local machine k8s cluster. About your concern regarding the requirments, I have modified their yaml files to lower the limit so that it can fit into my cluster nodes. Another thing, I removed their aws and kops refereces in the code as I have already setup the cluster manually using kubeadm. – Azad Md Abul Kalam Aug 09 '21 at 13:27
  • The tutorial you linked is tailored for AWS and by changing several parts of it you run into the risk of messing things up. There are mechanisms running under the hood that would be difficult to even list here. Your idea of learning k8s is great and you should go for that but I recommend following a guide or tutorial targeted at local environment or getting an AWS account to test it there. – Wytrzymały Wiktor Aug 10 '21 at 09:03