来自 kube-apiserver 的 "apiserver received an error that is not an unversioned" 个错误的原因

Cause of "apiserver received an error that is not an unversioned" errors from kube-apiserver

在将 kubernetes 从 1.0.6 升级到 1.1.3 时,当我的任何 kube master 或 etcd 主机出现故障时,我现在在滚动升级期间看到以下一堆错误。我们目前只有一个主机,有两个 etcd 主机。

2015-12-11T19:30:19.061+00:00 kube-master1 [err] [kube-apiserver] E1211 19:30:18.726490   26551 errors.go:62] apiserver received an error that is not an unversioned.Status: too old resource version: 3871210 (3871628)
2015-12-11T19:30:19.075+00:00 kube-master1 [err] [kube-apiserver] E1211 19:30:18.733331   26551 errors.go:62] apiserver received an error that is not an unversioned.Status: too old resource version: 3871156 (3871628)
2015-12-11T19:30:19.081+00:00 kube-master1 [err] [kube-apiserver] E1211 19:30:18.736569   26551 errors.go:62] apiserver received an error that is not an unversioned.Status: too old resource version: 3871623 (3871628)
2015-12-11T19:30:19.095+00:00 kube-master1 [err] [kube-apiserver] E1211 19:30:18.740328   26551 errors.go:62] apiserver received an error that is not an unversioned.Status: too old resource version: 3871622 (3871628)
2015-12-11T19:30:19.110+00:00 kube-master1 [err] [kube-apiserver] E1211 19:30:18.742972   26551 errors.go:62] apiserver received an error that is not an unversioned.Status: too old resource version: 3871210 (3871628)

我认为这些错误是由于 this new feature in 1.1 默认添加了 --watch-cache 选项造成的。错误在滚动升级结束时停止。

我想知道如何解释这些错误,是否可以安全地忽略它们,以及如何更改系统以避免将来出现这些错误(长期解决方案)。

是 - 正如您所建议的,这些错误与从 apiserver 中的内存缓存提供监视服务的新功能有关。

所以,如果我没理解错的话,这里发生的事情是: - 你升级了(或者一般重启了)apiserver - 这会导致所有现有的手表连接终止 - 一旦 apiserver 成功启动,它会重新生成其内部内存缓存 - 由于 watch 可能会有一些延迟,因此客户端(正在更新他们的 watch 连接)可能会稍微落后 - 这导致产生此类错误,并迫使客户重新列出并从新点开始观看

IIUC,这些错误仅在升级期间出现并在升级后消失 - 这很好。

换句话说 - 此类错误可能会在更新时出现(或者通常在任何重新启动 apiserver 后立即出现)。在这种情况下,可以安全地忽略它们。

事实上,那些不应该是错误 - 我们或许可以将它们更改为警告。