我在AWS上有一个Kubernetes群集,设置为kops
。
我设置了一个运行Apache容器和部署服务的部署(类型:LoadBalancer)。
当我通过运行kubectl set image ...
更新部署时,只要新ReplicaSet
的第一个窗格准备就绪,第一个请求到服务超时
我尝试过的事情:
readinessProbe
,正常工作。curl localhost
,正常工作。curl
在DNS中查找该DNS查找的IP,则第一个请求将超时。这告诉我这不是ELB问题。这真的令人沮丧,因为否则我们的Kubernetes堆栈工作得很好,但每次我们部署我们的应用程序时,都会冒着用户超时请求的风险。
答案 0 :(得分:0)
经过大量调试后,我想我已经解决了这个问题。
TL; DR; Apache必须优雅地退出。
InitializeComponent();
List<string> nonReadebleFonts = new List<string>();
nonReadebleFonts.Add("Wingdings");
foreach (FontFamily font in Fonts.SystemFontFamilies)
{
ComboBoxItem boxItem = new ComboBoxItem();
boxItem.Content = font.ToString();
Uri s = font.BaseUri;
if (!nonReadebleFonts.Contains(font.ToString()))
{
boxItem.FontFamily = font;
}
fontsComboBox.Items.Add(boxItem);
}
,正常工作。curl
无选择器服务,认为它可能与DNS查找有关,但没有帮助。我在pod上设置了preStop
生命周期钩子,以优雅地终止Apache运行externalName
问题(至少从我所知道的)是,当pod在部署中被删除时,它们会收到apachectl -k graceful-stop
信号,这会导致apache到immediately kill所有孩子。此可能导致竞争条件,其中TERM
仍会向已收到kube-proxy
信号但未完全终止的广告连播发送一些流量。
还从这个blog post获得了一些关于如何设置钩子的帮助。
我还建议增加PodSpec中的TERM
,以便apache有足够的时间优雅地退出。