一个 Kubernetes Pod 如何服务多个用户?
How Can One Kubernetes Pod Serve Multiple Users?
我和我的同事有一个问题,一个 Kubernetes Pod 如何服务多个用户。我们相信 is/was 一个 Pod 服务于一个最终用户。这是我们的实验。
我们有一个基本的 Angular 前端与 .Net API 服务器通信,该服务器在 Linode Kubernetes 集群上使用 MySQL PVClaim 结构 运行。集群有 3 个节点,具有大量 RAM、磁盘 space 和 CPU。这是 'kubectl get all' 的打印输出:
C:\development\Kubernetes >kubectl get all
NAME READY STATUS RESTARTS AGE
pod/dataapi-server-57c87f56c6-2fcdz 1/1 Running 0 21h
pod/gems-deployment-c9f6dbdbb-2qhff 1/1 Running 0 20h
pod/mysql-6d4b9f6f46-8m66h 1/1 Running 0 21h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/dataapi-server ClusterIP 10.128.6.155 <none> 80/TCP 21h
service/gems-frontend-service LoadBalancer 10.128.76.185 104.***.**.** 80:31190/TCP 20h
service/kubernetes ClusterIP 10.128.0.1 <none> 443/TCP 4d23h
service/mysql ClusterIP None <none> 3306/TCP 21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/dataapi-server 1/1 1 1 21h
deployment.apps/gems-deployment 1/1 1 1 20h
deployment.apps/mysql 1/1 1 1 21h
我和我的同事在两台不同的客户端机器上并肩工作,在我们各自的 Chrome 浏览器中启动了前端,并且都做了一些基本的独立工作。令我们惊讶的是,我们都能够访问同一个 Pod ('gems-deployment-c9...') 并高效地工作。基于我们在 Pods 和虚拟机上的所有理解,这对我们来说没有意义。我会在这里指出,我们对 Kubernetes 和容器世界来说是相当新的。
谁能解释一下为什么会这样?是否有任何文件可以指出我们?我的 Google 搜索只找到了关于每个 Pod 多个容器的论文,这不是我们的情况。
提前致谢!
当您向 Angular 应用程序发出常规 HTTP GET 请求时,负载均衡器(服务)会根据节点上的压力确定哪个 pod 应该接收请求。因为你有一个前端 pod,它只驻留在一个节点上,所以选择了那个节点。
然后该节点会创建一个新线程,该线程的持续时间与向您发送响应(即网页)所需的时间一样长。如果您的请求是同时发出的,该节点通常只会打开另一个线程并同时为您提供服务,这与您在 Kubernetes 之外托管此前端时会发生的情况相同。
对于您担心成为问题的问题,节点必须接收比它能够有效处理的更多的请求。在这种情况下,优化负载均衡器或提高节点功率都是有效的响应。
我和我的同事有一个问题,一个 Kubernetes Pod 如何服务多个用户。我们相信 is/was 一个 Pod 服务于一个最终用户。这是我们的实验。
我们有一个基本的 Angular 前端与 .Net API 服务器通信,该服务器在 Linode Kubernetes 集群上使用 MySQL PVClaim 结构 运行。集群有 3 个节点,具有大量 RAM、磁盘 space 和 CPU。这是 'kubectl get all' 的打印输出:
C:\development\Kubernetes >kubectl get all
NAME READY STATUS RESTARTS AGE
pod/dataapi-server-57c87f56c6-2fcdz 1/1 Running 0 21h
pod/gems-deployment-c9f6dbdbb-2qhff 1/1 Running 0 20h
pod/mysql-6d4b9f6f46-8m66h 1/1 Running 0 21h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/dataapi-server ClusterIP 10.128.6.155 <none> 80/TCP 21h
service/gems-frontend-service LoadBalancer 10.128.76.185 104.***.**.** 80:31190/TCP 20h
service/kubernetes ClusterIP 10.128.0.1 <none> 443/TCP 4d23h
service/mysql ClusterIP None <none> 3306/TCP 21h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/dataapi-server 1/1 1 1 21h
deployment.apps/gems-deployment 1/1 1 1 20h
deployment.apps/mysql 1/1 1 1 21h
我和我的同事在两台不同的客户端机器上并肩工作,在我们各自的 Chrome 浏览器中启动了前端,并且都做了一些基本的独立工作。令我们惊讶的是,我们都能够访问同一个 Pod ('gems-deployment-c9...') 并高效地工作。基于我们在 Pods 和虚拟机上的所有理解,这对我们来说没有意义。我会在这里指出,我们对 Kubernetes 和容器世界来说是相当新的。
谁能解释一下为什么会这样?是否有任何文件可以指出我们?我的 Google 搜索只找到了关于每个 Pod 多个容器的论文,这不是我们的情况。
提前致谢!
当您向 Angular 应用程序发出常规 HTTP GET 请求时,负载均衡器(服务)会根据节点上的压力确定哪个 pod 应该接收请求。因为你有一个前端 pod,它只驻留在一个节点上,所以选择了那个节点。
然后该节点会创建一个新线程,该线程的持续时间与向您发送响应(即网页)所需的时间一样长。如果您的请求是同时发出的,该节点通常只会打开另一个线程并同时为您提供服务,这与您在 Kubernetes 之外托管此前端时会发生的情况相同。
对于您担心成为问题的问题,节点必须接收比它能够有效处理的更多的请求。在这种情况下,优化负载均衡器或提高节点功率都是有效的响应。