我正在尝试在本地集群环境中运行为AWS云部署配置的这个项目。在云部署中,它使用Kubernetes CLI (kubectl
)和kops(创建&在AWS云上管理Kubernetes集群
简而言之,我的问题是:是否可以在我的本地2节点kubernetes集群中运行此应用程序进行测试(因为我没有AWS云)?
更多细节:
在云设置中,它有一个集群创建脚本来创建集群,创建集群后,我们得到两个AWS elb的URL,可以用来与云负载均衡器提供的两个服务(一个后端服务+一个前端服务)进行交互。
我的问题:当我试图在我的实验室托管的2节点kubernetes集群上运行这个项目时。我已经使用kubeadm
而不是GitHub链接中给出的本地AWS云(kops + k8s)设置了集群。我已经修改了脚本,分别删除了对kops和AWS的引用。在这个本地kubernetes集群中,我使用MetalLB作为服务的loadBalancer。
在脚本的最后,不像在AWS云部署中,客户端可以使用2个AWS ELB地址链接与系统服务接口,我们得到两个物理节点的公共ip:xxx.xxx.80.72
和xxx.xxx.12.58
分别为两个服务,由MetalLb负载均衡器提供(使用预配置的地址池)。
所有pod都处于running状态
$ 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
但是,当我尝试从集群中的客户端连接到服务时,它无法连接到服务。执行总是在_connect method
的if-else条件中进入异常(代码如下):
在这一点上,有人可以给我一些提示,什么可能是连接这个项目的服务在我的裸机2节点集群的问题?
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
不可能在我的本地2节点上运行此应用程序吗kubernetes集群测试(因为我没有aws云)?
这不是推荐的方法,也不会像预期的那样工作。
尝试在非aws环境上运行此设置,您没有满足先决条件:
我们假设您在AWS上的EC2 linux VM中运行安装Python3(最好是Python3.6或更高版本——我们没有使用早期版本测试)。AWS对资源有默认配额可以分配给账户。本文档中要创建的集群将超过常规AWS帐户的默认vCPU限制(32)。在继续之前,请确保此限制已解除。
为了在本地学习和测试,最好使用kubeadm创建一个集群:
如果你需要,kubeadm工具是很好的:
- 一个简单的方法让你尝试Kubernetes,可能是第一次。
- 现有用户自动设置集群和测试应用程序的方法。
- 在其他生态系统和/或更大范围的安装工具中的构建块。