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在满足以下条件之一时被删除。

    1. Pod .metadata.deletionTimestamp 已经设置,并且容器未在运行。

 

    1. 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
广告
将在 10 秒后关闭
bannerAds