- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个工作集群,其中的服务全部响应在 Azure AKS 上运行的安装了 Ingress nGinx 的 helm 后面。 这最终是 Azure 特定的。
My question is: Why does my connection to the services / pods in this cluster periodically get severed (apparently by some sort of idle timeout), and why does that connection severing appear to also coincide with my Az AKS Browse UI connection getting cut?
这是为了获得最终答案,了解到底是什么触发了超时,导致本地“浏览”代理 UI 与我的集群断开连接(更多背景说明我为什么要求关注)。
从 Az CLI 使用 Azure AKS 时,您可以使用以下命令从终端启动本地浏览 UI:
az aks browse --resource-group <resource-group> --name <cluster-name>
这工作正常并弹出一个浏览器窗口,看起来像这样(是的):
在您的终端中,您将看到类似以下内容的内容:
如果您将与集群的连接保持空闲几分钟(即您不与 UI 交互),您应该会看到以下打印内容,表明连接已超时:
E0605 13:39:51.940659 5704 portforward.go:178] lost connection to pod
我仍然不明白的一件事是集群内的其他事件是否可以延长此超时,但无论如何,一旦您看到上面的内容,您基本上就处于我所在的位置...这意味着我们可以讨论这个事实看起来我从该服务器中的 pod 发出的所有其他连接也已被负责切断与 AKS 浏览 UI 联系的任何超时进程关闭。
这对我来说是一个问题,因为我有一个运行 Ghost Blog pod 的服务,它使用名为“Knex”的 npm 包连接到远程 MySQL 数据库。碰巧,较新版本的 Knex 有一个错误(尚未解决),如果 Knex 客户端和远程数据库服务器之间的连接被切断并且需要恢复,它不会重新连接,而是无限地连接负载。
在我的情况下,nGinx Ingress 给我一个错误 503 网关超时。这是因为在空闲超时切断 Knex 连接后 Ghost 没有响应 - 因为 Knex 无法正常工作并且无法正确恢复与服务器断开的连接。
很好。我回滚了 Knex,一切都很好。
But why the heck are my pod connections being severed from my Database to begin with?
因此,这个问题有望节省 future 一些人尝试解决与 Kubernetes(可能是 Azure 特定的,也可能不是)相关的虚拟问题的时间,在服务/pod 空闲一段时间后切断连接。
最佳答案
Azure AKS automatically deploys an Azure Load Balancer (with public IP address) when you add a new ingress (nGinx / Traefik... ANY Ingress) — that Load Balancer has its settings configured as a 'Basic' Azure LB which has a 4 minute idle connection timeout.
该空闲超时既是标准的也是必需的(尽管您可以修改它,请参见此处: https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-tcp-idle-timeout )。话虽如此,对于从负载均衡器 IP 向外发送的任何流量,无法完全消除它 — 当前支持的最长持续时间是 30 分钟。
Azure 没有原生方法可以避免空闲连接被切断。
因此,根据最初的问题,(我认为)处理此问题的最佳方法是将超时保留为 4 分钟(因为它无论如何都必须存在),然后设置您的基础设施以优雅的方式断开连接(在达到负载均衡器超时之前)。
对于我们的 Ghost 博客(它访问了 MySQL 数据库),我能够按照上面提到的方式进行回滚,这使得 Ghost 进程能够处理数据库断开/重新连接的情况。
是的。同样的问题。
对于一个单独的基于 Rails 的应用程序,我们还在 AKS 上运行,该应用程序连接到远程 Postgres DB(不是在 Azure 上),我们最终通过此处找到的精彩说明实现了 PGbouncer ( https://github.com/pgbouncer/pgbouncer ) 作为集群上的附加容器: https://github.com/edoburu/docker-pgbouncer/tree/master/examples/kubernetes/singleuser
通常,任何尝试从 AKS 访问远程数据库的人都可能需要实现中间连接池解决方案。池服务位于中间(我们的 PGbouncer)并跟踪连接空闲的时间,以便您的工作进程不需要关心它。
如果您开始接近负载均衡器超时,连接池服务将丢弃旧连接并创建一个新连接(重置计时器)。这样,当您的客户端通过管道发送数据时,它会按预期到达您的数据库服务器。
这是一个令人极其沮丧的错误/案例。我们花了至少 2 天的开发运营时间来找出第一个解决方案,但即使知道这可能是同一个问题,这次我们又花了 2 天的时间。
即使将计时器延长到超过 4 分钟默认值也无济于事,因为这只会使问题更难以解决。我想我只是希望任何从 Azure AKS/Kubernetes 连接到远程数据库时遇到问题的人都比我更擅长谷歌搜索,这样可以减轻自己的痛苦。
感谢 MSFT 支持(Kris,你是最棒的)对 LB 计时器的提示,以及将 PGbouncer 放在容器中的家伙,这样我就不必重新发明轮子了。
关于azure - Azure Kubernetes (AKS) 'Time-out' 会发生什么情况会断开集群中 Pod 进出的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50706483/
kubernetes的新手,希望了解使用不同kubernetes对象的最佳实践,并且很难理解“Pods”和“Static Pods”在功能上的主要区别(如果有)吗? 主要问题如下: 问题1:如果有功能
以下是 pods 文件的截图,其中不包含 AFNetworking 库。当我在终端中运行命令 pod install 时,它安装了 AFNetworking 库版本 3.0.1。我无法理解为什么会这样
在通过 pod lib create projectName 创建的目录中执行 pod init 是否受支持?它似乎对我不起作用,但否则如何指定他们正在创建的 pod 的上游依赖项? pod inst
我正在尝试制作一个 Pod::Simple::HTML 的简单子(monad)类用于 Pod::Simple::HTMLBatch .我希望使用 POD::Weaver 对所有 POD 进行预处理.但
根据定义here , POD 是一个简单的类,没有用户定义的构造函数、非静态成员,并且只包含简单的数据类型。 问题是,下面这两个类是否等同于 POD 类型(就内存占用而言): class pod {
使用 Airflow 在 AWS EKS 上运行 KubernetesPodOperator 获取 kubernetes.client.rest.ApiException: (400),指出版本\"v
据我了解,当 POD 与服务对话时,IP 表已由 CNI 提供商更新(这可能特定于某些但不是所有 CNI 提供商)。 iptables 基本上提供了一个虚拟 IP,然后循环或分发(以某种方式)到后端临
我有一个 pod 需要将数据持久保存到 pod 外部的位置。我认为persistentVolume 是一个好主意。名为 writerPod 的 pod 需要对该卷进行读写访问。 多个其他 Pod(我称
我想知道,如果 HPA 考虑一个 pod 中多个容器的 CPU 利用率的平均值,以便向上/向下扩展数量。 pod 。例如,如果我为具有 2 个容器的部署(pod)指定如下所示的 HPA。为了让 HPA
我有以下情况: 我有几个微服务,现在只有两个是相关的。 - Web 套接字服务 API - 调度服务 我们有 3 个用户,我们将分别称为 1、2 和 3。这些用户将自己连接到我们后端的 Web 套接字
我已经注意到,当使用kubectl时,您几乎可以互换使用 pod 和 pods 。是否有任何实例可以使用一个实例而不是另一个实例来获得不同的结果,或者您可以只使用其中一个而不用担心呢? 例如: kub
我尝试使用命令 pod update 更新我的 podfile但它需要永远。 我也按照这个问题做了所有的步骤 cocoapods - 'pod install' takes forever但什么都没有
我正在设置一个 Kubernetes 主节点。 只是主节点,暂时没有工作节点。 使用 this tutorial. 完成设置,没有任何问题现在, $kubectl get pods -o wide -
是否可以在 pod install 期间让一个 Pod 保持不变和pod update ? pod update 不是一个选项。 最佳答案 您实际上可以使用pod update [NAMES...]来
基本上,我有一个部署,它创建了 3 个自动扩展的容器:PHP-FPM、NGINX 和包含应用程序的容器,所有这些都设置了 secret 、服务和入口。该应用程序还在 PHP-FPM 和 NGINX 之
在为Kubernetes创建/添加节点时,我们还必须创建Canal pod。 当前,kubernetes在尝试调度Pod之前不会等待Canal Pod准备就绪,从而导致失败(错误如下) Error s
我正在寻找一个选项来从部署/复制中删除 pod 而不删除它。我找到了一个很好的解决方案 using selector and labels here ,但在我的情况下这是不可能的,因为我不是 pod/
来自 PodInterface两个操作Delete和 Evict似乎具有相同的效果:删除旧 Pod 并创建一个新 Pod。 如果两个操作效果一样,为什么删除一个Pod并创建一个新的Pod需要两个API
Kubernetes版本1.12.3。 kubectl排水是先移开 pods 还是先创建 pods 。 最佳答案 您可以在节点上执行维护(例如内核升级,硬件维护等)之前,使用kubectlrain安全
有没有办法通过主机名访问 pod? 我有一个主机名:my-pod-1需要使用主机名连接到另一个 pod:my-pod-2 . 在没有服务的情况下实现这一目标的最佳方法是什么? 最佳答案 通过您的描述,
我是一名优秀的程序员,十分优秀!