Kubernetes(k8s) v1.21.0-beta.1 版本上线发布说明

原创
半兽人 发表于: 2021-03-10   最后更新时间: 2021-06-29 10:06:22  
{{totalSubscript}} 订阅, 2,280 游览

Kubernetes(k8s)v1.21.0-beta.0以来的变更日志

紧急升级说明

(不,真的,在你升级之前,你一定要看这个。)

  • Kubeadm: 在init期间,除非用户明确指出,否则KubeletConfiguration中的空 cgroupDriver 值现在始终设置为 ”systemd“。这需要现有的机器设置来配置容器运行时以使用 "systemd" 驱动程序。关于这个主题的文档可以在这里找到:https://kubernetes.io/docs/setup/production-environment/container-runtimes/
    当使用 "kubeadm upgrade"升级现有的集群 /节点时,旧的 cgroupDriver 值将被保留,但在1.22中,这一变化也将适用于"upgrade"。关于迁移到 "systemd" 驱动或继续使用 "cgroupfs "驱动的更多信息请参见:https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/

  • pkg/kubelet/certificate迁移到结构化日志记录,退出代码从255改为1。

  • 由 EBS 插件新提供的PV将不再使用被废弃的 "fail-domain.beta.kubernetes.io/zone" 和 "fail-domain.beta.kubernetes.io/region" 标签。它将使用 "topology.kubernetes.io/zone" 和 "topology.kubernetes.io/region" 标签代替。

  • 由 OpenStack Cinder 插件新提供的PV将不再使用被废弃的 "fail-domain.beta.kubernetes.io/zone" 和 "fail-domain.beta.kubernetes.io/region" 标签。它将使用 "topology.kubernetes.io/zone" 和 "topology.kubernetes.io/region" 标签代替。

  • OpenStack Cinder CSI 迁移默认是开启的,必须在 OpenStack 上的集群上安装 Clinder CSI 驱动,Cinder卷才能工作。

  • pkg/kubelet/server 迁移到结构化日志记录 退出代码从 255 改为 1。

  • Pkg/kubelet/kuberuntime/kuberuntime_manager.go迁移到结构化日志记录 退出代码从255更改为1

种类变更

弃用

  • Kubeadm:不再支持废弃的kube-dns作为选项。如果 "ClusterConfiguration.dns.type" 被设置为"kube-dns",kubeadm将抛出一个错误。

  • 移除在kubectl run命令中的 --generator --replicas --service-generator --service-overrides --schedule from kubectl run Deprecate --serviceaccount --hostport --requests --limits

  • audit.k8s.io/v1beta1 和 audit.k8s.io/v1alpha1 审计策略配置和审计事件已被废弃,转而使用从 v1.13 开始提供的 audit.k8s.io/v1。使用 --audit-policy-file 指定 alpha 或 beta 策略配置,或使用 --audit-log-version / --audit-webhook-version 明确请求 alpha 或 beta 审计事件的 kube-apiserver 调用必须更新为使用 audit.k8s.io/v1 并接受 v1.24 之前的 audit.k8s.io/v1 事件。

  • 自 v1.21 版本起,树内 vSphere 卷插件的 diskformat stroage class 参数已被废弃。vSphere CSI 驱动程序不支持 diskformat storageclass 参数,请考虑更新 storageclass 并删除 diskformat 参数。

  • 自 v1.21 起,低于 67u3 的 vSphere 版本已被废弃。vSphere CSI 驱动程序至少需要 vSphere 67u3。

  • 自 v1.21 起,小于 15 的 VM 硬件版本已被废弃。vSphere CSI 驱动程序建议将 Node VM 的硬件版本设置为至少 vmx-15。

  • 从v1.21开始,多vCenter支持已被废弃。如果您拥有横跨多个 vCenter 服务器的 Kubernetes 群集,请考虑将所有 k8s 节点移动到单个 vCenter Server。vSphere CSI 驱动程序不支持横跨多个 vCenter 服务器的 Kubernetes 部署。

  • 在Kubernetes v1.24之前,将支持这些弃用。- 对这些弃用的支持将在Kubernetes v1.24之前提供。

API变更

  • PodAffinityTerm包括一个namespaceSelector字段,允许根据标签选择符合条件的命名空间。

  • 一个新的CrossNamespacePodAffinity quota范围API,允许通过namespaceSelector或namespaces字段限制哪些namespaces允许使用corss-namespace引用的PodAffinityTerm。

  • 增加一个默认的元数据名称标签,用于通过名称选择任何命名空间。

  • 为Job添加了.spec.completionMode字段,接受值为NonIndexed(默认)和Indexed.

  • 澄清了NetworkPolicy policyTypes文档。

  • DaemonSets在其滚动更新策略上接受一个MaxSurge整数或百分比,它将在节点上启动更新后的pod,并等待这些pod准备就绪后再将过时的旧pod标记为删除。这使得工作负载在使用DaemonSets部署时,可以避免升级期间的停机时间。这个功能是alpha,在DaemonSetUpdateSurge功能门之后。

  • EndpointSlice API 现在是 GA。EndpointSlice 拓扑字段已从 GA API 中移除,将由新的每个 Endpoint Zone 字段取代。如果以前使用过拓扑字段,它将被转换为v1资源中的注释。发现.k8s.io/v1alpha1 API已被删除。

  • EndpointSlice控制器现在是GA。EndpointSlice控制器不会填充deprecatedTopology字段,只会通过zone和nodeName字段提供拓扑信息。

  • IngressClass资源现在可以引用特定命名空间中的资源进行特定的实现配置(以前只允许Cluster级资源)。这个功能可以使用IngressClassNamespacedParams功能门启用。

  • PodDisruptionBudget引入条件

  • Jobs API有一个新的.spec.suspend字段,可以用来暂停和恢复Jobs。

  • Kubelet Graceful Node Shutdown功能现在是beta(测试版)。

  • 限制hugepage的追求值为oage size的整数倍。

  • Service中增加了一个新的字段 InternalTrafficPolicy,它指定了集群内部流量是应该路由到所有端点还是只路由到节点本地端点。它指定集群内部流量是应该路由到所有端点还是只路由到节点本地端点。"集群 "将服务的内部流量路由到所有端点。"Local"仅将流量路由到本地节点端点,如果本地节点端点没有好,则会丢弃流量。默认值是"Cluster"。

  • 如果启用了GenericEphemeralVolume功能门,PodSecurityPolicy仅将 "generic"作为允许的卷类型存储。

  • 将CronJobs升级为batch/v1

  • 删除对使用 bazel 构建 Kubernetes 的支持。

  • 在负载均衡器的服务类型中设置loadBalancerClass,可以使用PR。用户如果想使用自定义的负载均衡器,可以指定loadBalancerClass来实现。

  • 存储容量跟踪(=CSIStorageCapacity功能)是测试版,storage.k8s.io/v1alpha1/VolumeAttachment 和 storage.k8s.io/v1alpha1/CSIStorageCapacity对象已被废弃。

  • 支持有索引的Job:当与0到(.spec.completions-1)的索引相关联的Pods成功时,Job就被认为已经完成。

  • apiserver现在能重新设置被改变许可控制器破坏的managedFields。

  • controller.kubernetes.io/pod-deletion-cost 注释可以被设置为提供一个提示,说明与属于同一 ReplicaSet 的其他 pod 相比,删除一个 pod 的成本。具有较低删除成本的 pod 将首先被删除。这是一个alpha功能。

特色功能

  • 增加了一个client-go的度量,rest_client_exec_plugin_call_total,以跟踪client-go凭证插件的总调用。

  • 增加 --use-protocol-buffers选项到 kubectl top pods和nodes。

  • 增加支持为新的darwin/arm64平台生成客户端二进制文件。

  • 增加ephemeral_volume_controller_create[_failures]_total 计数到 kube-controller-manager 度量中。

  • 增加alpha功能VolumeCapacityPriority,使得调度器根据多个拓扑结构中静态供应的PV的最佳匹配大小来优先处理节点。

  • 为cronjob添加了两个新的指标,一个是直方图,用于跟踪job创建的时间和预期的创建时间的时间差,另一个是cronjob错过的时间表的衡量标准。

  • Kubectl Command Headers 的 Alpha 实现:当在客户端命令行设置 KUBECTL_COMMAND_HEADERS 环境变量时,启用SIG CLI KEP 859。

    • 要启用: export KUBECTL_COMMAND_HEADERS=1; kubectl ...
  • 组件所有者可以使用'--allow-metric-labels'标志配置度量标签的允许名单。

  • 如果规模无法计算,中断控制器只向每个PodDisruptionBudget发送一个事件。

  • EndpointSliceNodeName将始终被启用,因此NodeName将始终在v1beta1 API中可用。

  • Graduate CRIContainerLogRotation功能到GA。

  • Kube-proxy iptables:新的度量 sync_proxy_rules_iptables_total,暴露了每张表在每次迭代中程序的规则数量。

  • Kube-scheduler现在可以在--v=4处记录插件的得分摘要。

  • Kubeadm: 警告用户,因为ipv6 site-local已被弃用。

  • Kubeadm:在 "init"、"join "和 "upgrade "期间,在控制平面节点上应用 "node.kubernetes.io/exclud-from-external-load-balancers"标签,以保持与lagacy LB模式的向后兼容性,在该模式下,标为 "master "的节点被排除在外。要退出,你可以从节点上删除标签。更多细节请参见#97543和链接的KEP。

  • Kubeadm:如果用户通过kubeadm配置自定义了他们的镜像仓库,那么通过--pod-infra-container-image将自定义的暂停镜像仓库和标签传递给kubelet,不仅适用于Docker,而且适用于所有容器运行时。这个标志告诉kubelet,它不应该垃圾回收镜像。

  • Kubeadm:将IPv6DualStack功能门推广到Beta版

  • Kubectl版本改变了,如果客户端和服务器的版本差异超过了支持的+/-1个小版本的版本倾斜,就会向stderr写一条警告信息。

  • Kubernetes现在是用Golang 1.16构建的。

  • 用btrfs文件系统格式化的持久性卷,现在将在展开时自动调整大小。

  • 删除由Kubelet收集的cAdvisor json指标api。

  • Sysctls现在是GA的,并锁定为默认值。

  • NodeAffinity插件实现了PreFilter扩展,为Filter提供了更强的性能。

  • endpointslice镜像控制器将endpoints注解和标签镜像到生成的endpoint slices上,它还确保这些字段的任何更新都被镜像。众所周知的endpoints.kubernetes.io/last-change-trigger-time注释会被跳过,不会被镜像。

  • 将最新的Docker有效版本更新到20.10。

  • 将节点本地DNS升级到1.17.0,以更好地支持IPv6。

  • 用户可以在Pod中指定kubectl.kubernetes.io/default-exec-container注解,为kubectl命令预选容器。

  • 当缩减 ReplicaSets 时,准备好的时间戳和创建时间戳会以对数比例进行比较。

  • 当kubelet纯粹在为容器设置环境变量的情况下监视一个ConfigMap或Secret时,在取消该监听之前,只需将该监听保持在规定的时间内。这一改变降低了大型集群中kube-apiserver的CPU和内存使用率。

  • WindowsEndpointSliceProxying功能已经升级为beta版,并默认启用。这意味着kube-proxy将默认从Windows的EndpointSlices而不是Endpoints中读取。

bug或回归

  • 对于非CSI插件,用DataSource创建PVC应该失败。

  • EndpointSlice控制器现在不太可能发出FailedToUpdateEndpointSlices事件。

  • EndpointSliceMirroring控制器现在不太可能发出FailedToUpdateEndpointSlices事件。

  • 修复--ignore-errors在打印多条日志和取消关注时不生效。

  • 修正了一个bug,尽管至少有一个指标不可用/无效,但Horizontal Pod自动缩放还是会缩小规模。

  • 修正systemd使用cgroup v2时对cgroup的处理。

  • 修正Windows上的smb挂载PermissionDenied问题。

  • 修正了CPU静态策略下conntrack-max数量较少的bug。

  • 修正了导致 cAdvisor 错误检测单socket multi-NUMA 拓扑的错误。

  • 修复了add-on manager leader选举的问题。

  • 在新的探测结果出来后,改进了Pod状态的更新时间。

  • Kube-apiserver:在创建具有通用临时卷的pod后,如果该功能已被禁用,那么对具有通用瞬时卷的pod进行更新时,该卷就会丢失。

  • Kubeadm: 当 allocate-node-cidr-mask 设置为 false 时,跳过对 pod 子网的验证。

  • 在单堆栈配置(IPv4 或 IPv6,但不能同时配置)集群上,无头(无集群 IP)和无选择器(空选择器或未定义选择器)的Services将报告 ipFamilyPolicy RequireDualStack,并在 IPv4 和 IPv6 的 ipFamilies[]中都有条目。这是alpha的变化,但对Services的手动指定Endpoints和EndpointSlices没有任何影响。

  • 解决kubelet logs中失败的列出*v1.Secret或Failed*v1.ConfigMap的虚假消息。

  • 当使用dockershim作为运行时,报告未启动或正在运行的Pod的startedAt和finishedAt时,返回零时间(midnight on Jan. 1, 1970)而不是负数。

  • Stdin现在只在检测到它是交互式终端时才会传递给client-go exec凭证插件。以前,当*stdout-被检测到是交互式终端时,它会被传递给client-go exec插件。

  • EndpointSlices中允许的最大端口数已从100个增加到20000个。

  • 更新命令

  • 当CNI插件返回双栈pod IP时,kubelet现在将尝试尊重集群的 "主IP家族",选择一个与(主)节点IP相同家族的主pod IP,而不是假设CNI插件按照管理员想要的顺序返回IP(因为一些CNI插件不允许配置这个)。

  • 在Windows上使用Containerd时,"C:\Windows\System32\drivers\etc\hosts "文件现在将由kubelet管理。

  • VolumeBindingArgs现在允许将BindTimeoutSeconds设置为零,而值为零则表示没有等待检查卷绑定操作。

  • kubectl execkubectl attach现在尊重--quiet标志,它抑制了本地二进制的输出,这些输出可能会被脚本与远程命令输出混淆(所有非失败的输出都被隐藏)。此外,当我们默认使用第一个spec.container时,exec和attach内联打印备用的容器列表。

其他 (Cleanup or Flake)

  • Apiserver_request_duration_seconds 升为稳定状态。

  • Apiserver_request_total被提升为稳定状态,不再有内容类型的维度,所以任何假定存在这个维度的警报/图表都会失败。不过,这不太可能,因为它本来就是一个无限制的维度。

  • 现在,当标签改变时,EndpointSlice的生成会递增。

  • AllowInsecureBackendProxy晋升为GA。

  • 将 pkg/kubelet/(eviction)迁移到结构化记录中去

  • 将deployment控制器的日志信息迁移到结构化日志记录中。

  • 将 pkg/kubelet/cloudresource 迁移到结构化记录

  • 将 pkg/kubelet/cri/remote 日志迁移到结构化日志记录。

  • 将 pkg/kubelet/kuberuntime/kuberuntime_container.go 日志迁移为结构化日志。

  • 将 pkg/kubelet/status 迁移到结构化日志记录上

  • 将 pkg/kubelet/token 迁移到结构化日志记录。

  • 将 pkg/kubelet/util 迁移到结构化日志记录。

  • 将 proxy/userspace/proxier.go 日志迁移到结构化日志记录中。

  • 将一些kubelet/metrics日志信息迁移到结构化日志记录中。

  • Windows上的进程启动时间现在使用当前进程信息。

未分类的

  • 将 pkg/kubelet/stats 迁移到结构化日志记录。

  • DownwardAPIHugePages功能是测试版。如果集群中的所有work都是最小的1.20版本,用户可以使用该功能。该功能将在1.22版本的所有安装中默认启用。

依赖

已经添加的

  • github.com/go-errors/errors: v1.0.1
  • github.com/gobuffalo/here: v0.6.0
  • github.com/google/shlex: e7afc7f
  • github.com/markbates/pkger: v0.17.1
  • github.com/monochromegane/go-gitignore: 205db1a
  • github.com/niemeyer/pretty: a10e7ca
  • github.com/xlab/treeprint: a009c39
  • go.starlark.net: 8dd3e2e
  • golang.org/x/term: 6a3ed07
  • sigs.k8s.io/kustomize/api: v0.8.5
  • sigs.k8s.io/kustomize/cmd/config: v0.9.7
  • sigs.k8s.io/kustomize/kustomize/v4: v4.0.5
  • sigs.k8s.io/kustomize/kyaml: v0.10.15

已变更的

  • dmitri.shuralyov.com/gpu/mtl: 666a987 → 28db891
  • github.com/creack/pty: v1.1.7 → v1.1.9
  • github.com/go-openapi/spec: v0.19.3 → v0.19.5
  • github.com/go-openapi/strfmt: v0.19.3 → v0.19.5
  • github.com/go-openapi/validate: v0.19.5 → v0.19.8
  • github.com/google/cadvisor: v0.38.7 → v0.38.8
  • github.com/kr/text: v0.1.0 → v0.2.0
  • github.com/mattn/go-runewidth: v0.0.2 → v0.0.7
  • github.com/olekukonko/tablewriter: a0225b3 → v0.0.4
  • github.com/sergi/go-diff: v1.0.0 → v1.1.0
  • golang.org/x/crypto: 7f63de1 → 5ea612d
  • golang.org/x/exp: 6cc2880 → 85be41e
  • golang.org/x/mobile: d2bd2a2 → e6ae53a
  • golang.org/x/mod: v0.3.0 → ce943fd
  • golang.org/x/net: 69a7880 → 3d97a24
  • golang.org/x/sys: 5cba982 → a50acf3
  • golang.org/x/time: 3af7569 → f8bda1e
  • golang.org/x/tools: 113979e → v0.1.0
  • gopkg.in/check.v1: 41f04d3 → 8fa4692
  • gopkg.in/yaml.v2: v2.2.8 → v2.4.0
  • k8s.io/kube-openapi: d219536 → 591a79e
  • k8s.io/system-validators: v1.3.0 → v1.4.0

已经移除的

  • github.com/codegangsta/negroni: v1.0.0
  • github.com/golangplus/bytes: 45c989f
  • github.com/golangplus/fmt: 2a5d6d7
  • github.com/gorilla/context: v1.1.1
  • github.com/kr/pty: v1.1.5
  • sigs.k8s.io/kustomize: v2.0.3+incompatible

原文来自:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md

更新于 2021-06-29

查看kubernetes更多相关的文章或提一个关于kubernetes的问题,也可以与我们一起分享文章