Kubernetes v1.8:已知问题 (Known Issues)
本篇总结了Kubernetes v1.8变更日志中的已知问题(Known Issues)。其他内容请参阅以下链接。
-
- Kubernetes v1.8: 主な変更点 (Major Themes)
-
- Kubernetes v1.8: Before Upgrading
-
- Kubernetes v1.8: 既知の問題 (Known Issues)
- Kubernetes v1.8: Deprecations
以下是在 v1.8.0 版本发布时已知的问题。由于大部分问题已在 v1.8.1 版本中修复,因此请同时参考那个版本的 CHANGELOG。
- https://github.com/kubernetes/kubernetes/releases/tag/v1.8.1
kubelet TLS引导程序和证书轮换获取的客户端证书在机器重新启动后会丢失。
在Kubernetes的kubelet中使用TLS引导(–bootstrap-kubeconfig)或证书轮换(–rotate-certificates)获取的客户端证书会在机器重启后丢失的问题。这是因为指定存储证书的路径 –cert-dir 默认为 /var/run/kubernetes,并且在一些平台上,/var/run目录下的内容会在重启时自动清理,因此会导致客户端证书丢失,从而导致重启后无法连接到API服务器。
通过将 –cert-dir 参数明确更改为不涉及到路径来解决此问题。此问题已在 v1.8.1 中修复,其默认值为 /var/lib/kubelet/pki。
-
- TLS-bootstrapped kubelet loses client certs after reboot, node stays on NotReady status · Issue #53288 · kubernetes/kubernetes
- Change default –cert-dir for kubelet to a non-transient location by liggitt · Pull Request #53317 · kubernetes/kubernetes
在使用 kubeadm init 和 kubeadm join 命令时,出现了 “/var/lib/kubelet is not empty” 错误信息,导致预检失败。
如果在kubelet的客户端证书的问题中,将kubelet证书的存储位置设置为”/var/lib/kubelet/pki”,则在1.8.0版本的kubeadm init和kubeadm join的准飞行检查中,期望”/var/lib/kubelet”为空,并且与消息”/var/lib/kubelet is not empty”一起失败。
可以通过以下措施绕过此问题,作为一种解决办法。
-
- pre-flight チェックでの失敗がこのエラーのみであれば、–skip-preflight-checks=true を指定すること pre-flight チェックを無効化できる
-
- init または join コマンドを実行する前に kubelet サービスを停止し、/var/lib/kubelet/pki を削除する
- init または join コマンドを実行する前に kubeadm reset を実行する
这个问题已经在版本1.8.1中得到修复了。
- kubeadm 1.8.0 init fails with “/var/lib/kubelet is not empty” · Issue #53356 · kubernetes/kubernetes
在由数百个节点构成的大型集群中,一次性删除数千个Pod时,删除Pod API调用的延迟会暂时增加。
当数千个 Pod 在由数百个节点组成的大型集群中同时删除时,delete pod API 调用的服务水平目标(SLO)设定为1秒,但延迟却会增加超过该设定。
背景是,在删除Pod之前需要等待容器停止、卷删除和cgroups删除,但由于没有等待容器删除,因此进行了修正,使Pod在满足以下条件之一时被删除。
-
- Pod .metadata.deletionTimestamp 已经设置,并且容器未在运行。
-
- Pod 被驱逐(Phase 为 Failed 并且 Reason 为 Evicted)。
https://github.com/kubernetes/kubernetes/blob/v1.8.0/pkg/kubelet/eviction/helpers.go#L1088-L1091
然而,由于容器的删除被作为每30秒一次的定期垃圾回收进行执行,因此通过等待容器删除进行Pod删除的上述更改导致了Pod删除的同时进行,这导致大量Pod的批量删除会暂时增加API服务器的负载。
这个问题已经通过在v1.8.1中进行更改来修复,不再使用定期垃圾收集来删除容器,而是根据Pod的状态来动态删除。
-
- `delete pods` API call latencies shot up on large cluster tests · Issue #51899 · kubernetes/kubernetes
-
- Wait for container cleanup before deletion by dashpole · Pull Request #50350 · kubernetes/kubernetes
- Remove containers from deleted pods once containers have exited by dashpole · Pull Request #53233 · kubernetes/kubernetes
高级审计可能会影响API服务器的性能和大型请求响应的延迟。
高级审计可能会对满足以下条件的API服务器的性能和请求响应的延迟产生影响。
-
- JSON フォーマットのログバックエンドを使っている
JSON の marshal / unmarshal のパフォーマンスの問題だったため、json-iterator ライブラリを利用するように修正された
Use json-iterator instead of ugorji for JSON. by thockin · Pull Request #48287 · kubernetes/kubernetes
AuditPolicy でリクエストまたはレスポンスで大規模な API コールを記録している
由于高级审计设置错误会导致大量的日志输出和发送,因此需要谨慎设置。
- `delete pods` API call latencies shot up on large cluster tests · Issue #51899 · kubernetes/kubernetes
使用minikube v0.22.2或更低版本以及kubectl v1.8或更高版本从操作上无法正常工作。
因为在minikube的API服务器中存在未注册的类型而发生。在新版本的kubectl中,强制使用OpenAPI模式对对象进行验证,但是minikube的API服务器并没有包含所需的所有类型在其发布的OpenAPI模式中。
当使用类似于 minikube (localkube) 的方式获取 k8s.io/kubernetes 时,会因路径不同而出现此问题。此问题已经在 minikube v0.22.3 中修复。
-
- Kubectl 1.8 broken for minikube – OpenAPI swagger file doesn’t include `x-kubernetes-group-version-kind` · Issue #1996 · kubernetes/minikube
-
- Add patch for openapi by r2d4 · Pull Request #2031 · kubernetes/minikube
- Release v0.22.3 · kubernetes/minikube
在GCE部署脚本中,ENABLE_APISERVER_BASIC_AUDIT参数损坏了。
ENABLE_APISERVER_BASIC_AUDIT 参数用于在 API 服务器上启用传统的Legacy Audit,但由于1.8版本中默认启用了Advanced Audit,所以此参数将不再起作用。Legacy Audit 已被废弃,并计划在将来删除,请改用Advanced Audit。
-
- ENABLE_APISERVER_BASIC_AUDIT configuration out of date · Issue #53154 · kubernetes/kubernetes
- Fix basic audit in GCE deploy scripts by crassirostris · Pull Request #53225 · kubernetes/kubernetes
有时候,在 ReplicaSet 和 DaemonSet 上,kubectl set 命令会返回版本错误。
对于 ReplicaSet 和 DaemonSet,所有的 set 命令(包括 set image,set env,set resources,set serviceaccounts)都会产生影响。这似乎是因为在发送补丁时,有时编码器会返回版本错误,因为它没有特定版本的信息。
此问题已被修复,要求将其首次编码为与v1.8.1中加载的对象相同的版本。
-
- `kubectl set` commands on ReplicaSet and DaemonSet occasionally return version registration errors · Issue #53040 · kubernetes/kubernetes
- Calculate patches for commands using input version by liggitt · Pull Request #53158 · kubernetes/kubernetes
Object Count Quotas不会执行与其他配额相一致的请求和更新。
不管对象是否被初始化,对象计数配额会在对象创建时进行请求。这是为了保护系统免受大量未初始化的对象的影响而设计的,但其他配额会在对象初始化时进行请求,缺乏一致性。
这个问题将在未来进行修正。
-
- Known object count quota problems with uninitialized objects · Issue #53109 · kubernetes/kubernetes
- Resource Quotas – Kubernetes