我按照此处找到的指南设置了一个 4 节点 Kubernetes 集群:https://www.tecmint.com/install-a-kubernetes-cluster-on-centos-8/
它有一个主节点和3个工作节点。
我正在运行一个名为“hello world”的部署,它基于bashofmann/rancher演示映像,有20个副本。我还创建了一个名为hello world的nodeport服务,它将nodeport 30213映射到每个pod上的端口8080。
基本细节见下文:
# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/hello-world-655b948488-22dq4 1/1 Running 0 112m
pod/hello-world-655b948488-2fd7f 1/1 Running 0 112m
pod/hello-world-655b948488-2hrtw 1/1 Running 0 112m
pod/hello-world-655b948488-5h4ns 1/1 Running 0 112m
pod/hello-world-655b948488-5zg9w 1/1 Running 0 112m
pod/hello-world-655b948488-7kcsp 1/1 Running 0 112m
pod/hello-world-655b948488-c5m67 1/1 Running 0 112m
pod/hello-world-655b948488-dswcv 1/1 Running 0 112m
pod/hello-world-655b948488-fbtx6 1/1 Running 0 112m
pod/hello-world-655b948488-g7bxp 1/1 Running 0 112m
pod/hello-world-655b948488-gfb4v 1/1 Running 0 112m
pod/hello-world-655b948488-j6lz9 1/1 Running 0 112m
pod/hello-world-655b948488-jthnq 1/1 Running 0 112m
pod/hello-world-655b948488-pm5b8 1/1 Running 0 112m
pod/hello-world-655b948488-qt7gs 1/1 Running 0 112m
pod/hello-world-655b948488-s2hjv 1/1 Running 0 112m
pod/hello-world-655b948488-vcjzz 1/1 Running 0 112m
pod/hello-world-655b948488-vprgn 1/1 Running 0 112m
pod/hello-world-655b948488-x4b9n 1/1 Running 0 112m
pod/hello-world-655b948488-ztfh7 1/1 Running 0 112m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/hello-world NodePort 10.110.212.243 <none> 8080:30213/TCP 114m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d2h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-world 20/20 20 20 112m
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-world-655b948488 20 20 20 112m
# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-master Ready control-plane,master 2d2h v1.21.3 192.168.188.190 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
k8s-worker1 Ready <none> 2d2h v1.21.3 192.168.188.191 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
k8s-worker2 Ready <none> 2d2h v1.21.3 192.168.188.192 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
k8s-worker3 Ready <none> 2d2h v1.21.3 192.168.188.193 <none> CentOS Linux 8 4.18.0-305.10.2.el8_4.x86_64 docker://20.10.7
我发现群集未在三个工作节点之间进行负载平衡。如果我打开我的Web浏览器并转到 http://192.168.188.191:30213 那么它将加载网站,但只有在k8s-worker1上的pods提供时才加载。同样,如果我去 http://192.168.188.192:30213 那么它会加载网站,但只有当k8s-worker2上的pods提供时。
这个特定容器/吊舱图像的一点是,它将显示在任何给定时间哪个吊舱正在为我的网站请求提供服务。页面刷新并循环浏览集群中的所有可用pod。我可以看到,每当页面成功刷新时,它只会由k8s-worker1上的一个pod提供服务。它还会显示存在多少副本。我应该看到20个,但我最多只能看到8个副本。
它永远不会加载由任何其他工作节点上的任何 Pod 提供的网站。从 k8s-master 中,我可以发出“curl --不安全 http://192.168.188.191:30213”命令,并在大约 33% 的时间内得到响应。其余时间它会失败。我相信这是因为它试图对其他工作节点的请求进行负载平衡,但这些请求失败了。
由于我对这个东西还很陌生,所以我不知道该看什么。副本集是否有问题?
每个工作节点都打开了以下防火墙规则:
# firewall-cmd --list-ports
6443/tcp 2379-2380/tcp 10250/tcp 10251/tcp 10252/tcp 10255/tcp 6783/tcp 6783/udp 6784/udp 443/tcp
我是否需要打开更多端口?我是否应该打开3000-32767的所有端口?这似乎是一个可能的安全漏洞。
您所面临的行为可能由您为pod负载平衡创建的服务类型给出:您使用了类型NodePort。
提到kubernetes的官方文档,NodePort类型是在每个节点的IP上的静态端口(在您的示例中是30213)上公开服务。在这种情况下,通过向节点发出请求,您可以连贯地看到始终相同的节点和该节点上调度的POD数量,在您提到的示例中:8(请注意,该数量可能会随POD分布而变化)。
如果您想对所有pod进行负载平衡,您应该使用一种服务类型:LoadBalancer或ClusterIp入口。
请注意,我提到的两个选项都要求集群能够具有外部 IP,该 IP 在 kubernetes 作用域之外进行外部负载平衡。如果您使用的是托管 kubernetes 安装(例如 GKE、EKS、AKS),您将“免费”拥有它。由于您使用的是自定义群集安装,因此对于负载平衡,您可以查看 MetalLB 项目。
我创建了一个部署,它导致跨2个节点存在4个吊舱。 然后,我通过一个服务公开这些pod,该服务将产生以下集群IP和podendpoint: 如果通过集群IP在内部访问服务,请求将在两个节点和所有pod之间平衡,而不仅仅是在单个节点上的pod之间平衡(例如,像通过节点端口访问一样)。 我知道kubernetes使用IP表来平衡单个节点上跨吊舱的请求,但我找不到任何文档来解释kubernetes如何平衡
我有一个名为“backend-app”的应用程序部署在几个不同节点上的pod中运行。我还有一个服务,它将“backend-app”公开为其他集群内部pod作为我的“前端应用程序”pod访问。 如果我使用 DNS 从不同的应用部署(称为“前端应用”)连接到“后端应用”,是否会将请求负载均衡到每个节点上的每个“后端应用”Pod? 听起来NodePort服务只会连接到一个节点,而不会对我对其他节点的请求
我在3个节点上进行了压力测试,但只有一个CPU很高,其他的都很低。Ignite集群使用TCP发现,我有一个jdbc连接,例如:jdbc:Ignite:Thin://172.16.14.15、172.16.14.16、172.16.14.17/
假设我在一个集群中有3个ActiveMQ Artemis代理: 经纪人_01 在给定的时间点,我有每个经纪人的消费者数量: 经纪人有50名消费者 让我们假设在这个给定的时间点,有70条消息要发送到集群中的一个队列。 我们期望集群完成负载平衡,以便Broker_01将接收50条消息,Broker_0210条消息,Broker_0310条消息,但目前我们正在经历70条消息通过所有3个代理随机分发。 是
我安装了一个kubernetes集群。我想为我的一个微服务使用外部数据库(在我的集群之外),但这个外部数据库被设置为集群,没有自己的负载均衡器。 有没有办法创建一个内部负载平衡器服务,让kubernetes始终将微服务定向到正在运行的实例? 我看到您可以设置loadbalancer类型的服务,我如何使用它?我尝试创建它,但我看到loadbalancer服务是用NodePort创建的。它可以在没有节
我必须手动在MS Azure中创建Kubernetes群集,而不是使用AKS。因此: > 我在一个可用性集中创建了2个VM:一个用于k8s master,第二个用于k8s节点。 我创建了外部负载均衡器并将2个VM添加到后端池。 我使用kubes祈祷创建了k8s集群。 我创建了部署和负载均衡器服务: 但LoadBalancer服务外部IP始终处于挂起状态: 此外,telnet azure\u loa