1.20 引入了新版的 CronJob 控制器,使用 informer 机制来代替原来的轮询,优化了性能。可以在 kube-controller -manager
指定 --feature-gates="CronJobControllerV2=true"
来开启。在以后的版本中,会默认使用新版的控制器。
Dockershim 已经正式被弃用。kubernetes 对 Docker 的支持已弃用,将在将来的版本中删除。Docker 生成的遵循 OCI 规范的镜像可以继续在兼容 CRI 的运行时中运行。
更多信息可以参考:Don't Panic: Kubernetes and Docker , Dockershim Deprecation FAQ
对日志消息和 k8s 对象引用的结构都进行了标准化,让日志解析,处理,存储,查询和分析变得更加简单。klog 增加了两个方法来支持结构化日志: InfoS
, ErrorS
。
所有组件增加 --logging-format
参数,默认值是 text
,保持之前的格式。设置为 json
支持结构化日志,此时这些参数不再起作用:--add_dir_header, --alsologtostderr, --log_backtrace_at, --log_dir, --log_file, --log_file_max_size, --logtostderr, --skip_headers, --skip_log_headers, --stderrthreshold, --vmodule, --log-flush-frequency
有关 Exec 探测超时的一个长期存在的 bug 已修复,该 bug 可能会影响现有 pod 定义。在此修复之前,timeoutSeconds 字段指定的超时并未被遵从,相反,探测器将无限期地运行,甚至超过其配置的截止时间,直到返回结果。在本次更改之后,如果未指定值,则探针仅默认应用 1 秒。如果执行探针耗费的时间超过 1 秒,那么现有的 Pod 定义就可能需要修改,显示指定 timeoutSeconds 字段。本次修复还添加了名为 ExecProbeTimeout
的开关,允许保留之前的行为(在后续发行版中,此功能将被锁定及删除)。要保留之前的行为,需要把 ExecProbeTimeout
设置为 false
。
更多信息,可以参考 Configure Liveness, Readiness and Startup Probes - Configure Probes
此功能提供了一种触发卷快照操作的标准方法,并允许用户以可移植的方式在任何 Kubernetes 环境和支持的存储 provider 上进行合并快照的操作。
此外,这些 Kubernetes 快照原语可以作为基础,解锁为 Kubernetes 开发高级企业级存储管理功能(包括应用程序或集群级备份解决方案)的能力。
请注意,快照支持需要 Kubernetes 集群部署快照控制器、快照 CRD 和验证 Webhook,以及支持快照功能的 CSI 驱动。
kubectl alpha debug
命令进入 beta 阶段,并被替换为 kubectl debug
。该功能支持直接从 kubectl 进行常见的调试工作,包括:
使用其他容器镜像或命令来创建 pod 的副本,对启动时崩溃的工作负载进行故障排除。
通过在 pod 新副本中或临时容器中,添加包含调试工具的新容器的方式,对 distroless 等不包含调试工具的容器进行故障排除。(临时容器 EphemeralContainers
是 Alpha 功能,默认未启用)
通过创建在主机命名空间中运行的容器并访问主机的文件系统,就可以在节点上排除故障。
请注意,作为新的内置命令,kubectl debug 优先于任何名为 "debug" 的 kubectl 插件,必须重命名受影响的插件。kubectl alpha debug
已弃用,并将在随后的版本中删除,需要替换为 kubectl debug
。更多信息,可以参考 Debug Running Pods
1.18 引入的 API Priority and Fairness 功能,将在 1.20 版本默认启用,允许 kube-apiserver
按优先级对传入的请求进行分类。
SupportNodePidsLimit
(节点到 pod 的 PID 隔离)和 SupportPodPidsLimit
( 限制每个 Pod 的 PID 的能力)都已经到了 GA 阶段。
用户和集群管理员都希望 pod 将遵循预期的 pod 生命周期,包括 pod 的终止。但是当节点关机时,pod 不遵循预期的 pod 终止生命周期,并且不会正常终止,这可能会导致工作负载的某些问题。1.20 增加了 alpha 的 GracefulNodeShutdown
功能,使得 kubelet 能 监听到节点的系统关机事件,从而在系统关闭期间优雅终止 pod。
CSIDrivers 可以使用 fsGroupPolicy
字段来控制是否支持在 mount 时修改属主和权限。(ReadWriteOnceWithFSType,File,None)
支持非递归设置 fsgroup - PodFSGroupChangePolicy
= OnRootMismatch
新增 cloud controller manager 组件。
达到 GA 的特性:
node.k8s.io/v1beta1
被废弃,请使用 node.k8s.io/v1
networking.k8s.io/v1beta1
(计划在 1.22 版本移除),由 networking.k8s.io/v1
代替。seccomp.security.alpha.kubernetes.io/pod
及 container.seccomp.security.alpha.kubernetes.io/...
被废弃(计划在 1.22 版本移除),可以直接在 pod 及 container spec 中指定如下字段:securityContext:
seccompProfile:
type: RuntimeDefault|Localhost|Unconfined ## choose one of the three
localhostProfile: my-profiles/profile-allow.json ## only necessary if type == Localhost
K8s 会自动转换注解和字段,不需要采取额外的操作来进行转换。
certificates.k8s.io/v1beta1
,为 CertificateSigningRequest 新增版本 certificates.k8s.io/v1
。在使用 certificates.k8s.io/v1
时,spec.signerName
,并且不可再使用 kubernetes.io/legacy-unknown
。spec.usages
,不能包含重复值,并且取值只能是已知 usage。status.conditions[*].status
。status.certificate
必须是 PEM 编码,并且只包含 CERTIFICATE
块。进入 Beta 的特性:
以下特性进入 Beta 阶段,并默认启用。
废弃版本 | 新版本 |
---|---|
apiextensions.k8s.io/v1beta1 | apiextensions.k8s.io/v1 |
apiregistration.k8s.io/v1beta1 | apiregistration.k8s.io/v1 |
authentication.k8s.io/v1beta1 | authentication.k8s.io/v1 |
authorization.k8s.io/v1beta1 | authorization.k8s.io/v1 |
autoscaling/v2beta1 | autoscaling/v2beta2 |
coordination.k8s.io/v1beta1 | oordination.k8s.io/v1 |
storage.k8s.io/v1beta1 | storage.k8s.io/v1 |
componentstatus
API 被废弃。这个 API 用来提供 etcd, kube-scheduler, 和 kube-controller-manager 的运行状态,但只在这些条件下才能工作:这些组件跟 apiserver 运行在一个节点,并且 kube-scheduler 和 kube-controller-manager 暴露了非安全的健康检查端口。--address
及 --insecure-bind-address
参数可以设置但无效果; --port
及 --insecure-port
参数只能设置为 0。这些参数将在 1.24 版本移除。TokenRequest
及 TokenRequestProjection
进入 GA,kube-apiserver 需要设置以下参数:--service-account-issuer
, 标识该集群 API Server 的固定的 URL。--service-account-key-file
, 一个或者多个验证 token 的公钥。--service-account-signing-key-file
, 签发 service account 的私钥,可以与 kube-controller-manager
的 --service-account-private-key-file
参数使用相同的文件。-seccomp-profile-root
--cloud-provider
, --cloud-config
,使用 config 来代替--really-crash-for-testing
, --chaos-chance
metrics/resource/v1alpha1
endpoint 被移除,请使用 metrics/resource
。failure-domain.beta.kubernetes.io/zone
及 failure-domain.beta.kubernetes.io/region
标签被废弃,请使用 topology.kubernetes.io/zone
及 topology.kubernetes.io/region
来代替。所有以 failure-domain.beta...
前缀的标签都需要使用对应的 topology...
开头的标签来代替。说明:1.18 升级 1.20 过程中无法保证对 CSI 临时卷 (csi inline) 的成功挂载,如您的业务使用了 CSI 临时卷,建议转换为持久卷存储后再做升级。
kubernetes 1.20 changelog
kubernetes 1.19 changelog
废弃标签及新标签如下表所示:
废弃标签 | 新标签 |
---|---|
beta.kubernetes.io/instance-type |
node.kubernetes.io/instance-type |
failure-domain.beta.kubernetes.io/region |
topology.kubernetes.io/region |
failure-domain.beta.kubernetes.io/zone |
topology.kubernetes.io/zone |
VolumeSnapshotDataSource 默认开启。详情请参阅 releasing CSI volume snapshots to beta。
CSIMigration 默认开启。详情请参阅 CSI migration going to beta。
拓扑管理器功能(TopologyManager)在1.18中进入 Beta,可以让 CPU 与其他设备(例如 SR-IOV-VF)实现 NUMA 对齐,使工作负载能够支持低延迟的工作场景。
在引入拓扑管理器之前,CPU 与设备管理器只能彼此独立地做出资源分配决策,可能导致在多插座 CPU 系统中无法获取理想的资源分配结果,影响延迟敏感应用的性能。
Server-side Apply 在 Kubernetes 1.16版本被提升到 Beta 版,1.18引入第二个 Beta 版本(ServerSideApply),此版本会记录和管理所有新 Kubernetes 对象字段的变化,确保用户了解资源动态。
IngressClass
资源描述在 Kubernetes 集群内的一种 Ingress 控制器类型。Ingress
资源新增 ingressClassName
字段,用于设置使用 IngressClass
的控制器名称,替代废弃的 kubernetes.io/ingress.class
标注。
kubectl debug
,Alpha 特性。Windows CSI support
,Alpha 特性。ImmutableEphemeralVolumes
,Alpha 特性(支持不可变 ConfigMap 和 Secret,不刷新对应的 volume)。ScheduleDaemonSetPods
TaintNodesByCondition
WatchBookmark
NodeLease
CSINodeInfo
VolumeSubpathEnvExpansion
AttachVolumeLimit
ResourceQuotaScopeSelectors
VolumePVCDataSource
TaintBasedEvictions
BlockVolume
、CSIBlockVolume
Windows RunAsUserName
EndpointSlices
:默认关闭CSIMigrationAWS
:默认关闭StartupProbe
EvenPodsSpread
以下特性被移除,默认开启且不可配置:
GCERegionalPersistentDisk
EnableAggregatedDiscoveryTimeout
PersistentLocalVolumes
CustomResourceValidation
CustomResourceSubresources
CustomResourceWebhookConversion
CustomResourcePublishOpenAPI
CustomResourceDefaulting
移除内置的 cluster role:
system:csi-external-provisioner
system:csi-external-attacher
10.0.0.0/24
),必须通过 kube-apiserver 的 --service-cluster-ip-range
参数进行设置。rbac.authorization.k8s.io/v1alpha1
和 rbac.authorization.k8s.io/v1beta1
,计划在1.20版本中移除。请迁移到 rbac.authorization.k8s.io/v1
。CSINodeInfo
特性,该特性已经达到 GA 并默认开启。--encryption-provider-config
:如果配置文件中指定 cacheSize: 0
,则1.18之前的版本会自动设置为缓存1000个 key,1.18版本会报告配置验证错误。可通过设置 cacheSize 为负值来关闭缓存。--feature-gates
:以下特性默认开启,并不再支持通过命令行设置。PodPriority
TaintNodesByCondition
ResourceQuotaScopeSelectors
ScheduleDaemonSetPods
apps/v1beta1
及 apps/v1beta2
,请使用 apps/v1
。extensions/v1beta1
下的:daemonsets
、deployments
及 replicasets
,请使用 apps/v1
。networkpolicies
请使用 networking.k8s.io/v1
。podsecuritypolicies
请使用 policy/v1beta1
。--enable-cadvisor-endpoints
:这个参数默认关闭。如果需要访问 cAdvisor v1 Json API,需要明确开启。--redirect-container-streaming
,并将在后续版本中移除。1.18只支持默认行为(通过 kubelet 代理 streaming 请求)。如果设置了 --redirect-container-streaming=true
则必须移除。/metrics/resource/v1alpha1
,请使用 /metrics/resource
。--healthz-port
,请使用 --healthz-bind-address
。--metrics-port
,请使用 --metrics-bind-address
。EndpointSliceProxying
(默认关闭)来控制是否在 kube-proxy 中启用 EndpointSlices。特性开关 EndpointSlice
不再影响 kube-proxy 的行为。--ipvs-tcp-timeout
--ipvs-tcpfin-timeout
--ipvs-udp-timeout
scheduling_duration_seconds
指标:scheduling_algorithm_predicate_evaluation_seconds
,替代为 framework_extension_point_duration_seconds[extension_point="Filter"]
scheduling_algorithm_priority_evaluation_seconds
,替代为 framework_extension_point_duration_seconds[extension_point="Score"]
AlwaysCheckAllPredicates
。为了对齐 kube-apiserver
、kube-controller-manager
和 kube-scheduler
,默认开启 profiling。如需关闭 profiling,需指定参数 --enable-profiling=false
。
--include-uninitialized
参数。kubectl
和 k8s.io/client-go
不再默认使用 http://localhost:8080 作为 apiserver 的地址。kubectl run
支持创建 pod,不再支持使用之前已废弃的 generator 创建其他类型的资源。kubectl rolling-update
命令,请使用 rollout
命令。–dry-run
支持3个参数值 client
、server
和 none
。–dry-run=server
支持命令:apply
、patch
、create
、run
、annotate
、label
、set
、autoscale
、 drain
、rollout undo
和 expose
。kubectl alpha debug
命令,可以 在 pod 中附临时的容器进行调试和排查问题(需要启用1.16引入的 EphemeralContainers
特性)。Hyperkube 从 Go 代码修改为 bash 脚本。
kubernetes 1.18 changelog
kubernetes 1.17 changelog
裸金属集群工具及 HA 等生产可用的特性都得到了改进和加强。
kubeadm 对 HA 的支持进入 beta 阶段,用户可以使用 kubeadm init
和 kubeadm join
命令部署高可用的控制面。证书管理更加稳定和健壮,kubeadm 可以在 update 集群时,在证书到期前无缝更新所有的证书。详情请参阅 pr357 和 pr970。
存储 SIG 继续致力于内建存储插件迁移到 CSI 接口,支持内建存储插件的大小调整,内联存储卷等特性,还引入了一些原本 Kuebernetes 存储子系统中不存在的 alpha 功能,例如存储卷克隆。
存储卷克隆允许用户在配置新存储卷时,指定另一 PVC 为 “DataSource”。如果底层存储系统支持此项功能并在其 CSI 驱动程序实现了 “CLONE_VOLUME” 功能,则新存储卷将成为源存储卷的克隆。详情请参见 pr625。
CRD
Admission Webhook
GCERegionalPersistentDisk
CustomResourcePublishOpenAPI
CustomResourceSubresources
CustomResourceValidation
CustomResourceWebhookConversion
在1.15版本使用 --log-file
参数存在日志会被多次写入同一个文件的问题。详情请参阅 pr78734。
beta.kubernetes.io/metadata-proxy-ready
、 beta.kubernetes.io/metadata-proxy-ready
及 beta.kubernetes.io/kube-proxy-ds-ready
。ip-mask-agent
使用 node.kubernetes.io/masq-agent-ds-ready
作为 node 选择器,不再使用 beta.kubernetes.io/masq-agent-ds-ready
。kube-proxy
使用 node.kubernetes.io/kube-proxy-ds-ready
作为 node 选择器,不再使用 beta.kubernetes.io/kube-proxy-ds-ready
。 metadata-proxy
使用 cloud.google.com/metadata-proxy-ready
作为 node 选择器,不再使用 beta.kubernetes.io/metadata-proxy-ready
。 hyperkube 短别名已从代码中移除,在编译 hyperkube docker 镜像时会创建这些别名,详情请参见 pr76953。
v1alpha3
配置被全部移除。Node.Status.Volumes.Attached.DevicePath
字段,需要更新此字段的外部控制器。StorageObjectInUseProtection
admission 插件。如果之前没有启用该插件,集群的行为可能会发生变化。csi.storage.k8s.io/ephemeral
,允许 driver 在实现 NodePublishVolume 时,逐个判断当前 volume 是短暂存储还是持久的,详情请参见 pr79983。--enable-logs-handler
,计划在 v1.19移除。--basic-auth-file
及相应的认证模式,未来计划移除。--service-cluster-ip-range
参数来制定 service 的 IP 段。v1beta1
Events API。消费 scheudler 事件的工具需要使用 v1beta1 Event API。--conntrack-max
(可使用--conntrack-min
和--conntrack-max-per-core
来代替)。--cleanup-iptables
。--resource-container
。--allow-privileged
、--host-ipc-sources
、--host-pid-sources
和 --host-network-sources
(可以使用 PodSecurityPolicy
的准入控制器来代替)。--containerized
。--node-labels
参数设置 kubernetes.io-
或 k8s.io-
为前缀的不被允许的标签 。kubectl scale job
。kubectl exec
命令的 --pod/-p
参数。kubectl convert
命令。--include-uninitialized
。kubectl cp
不再支持复制容器中的符号链接,可以使用如下命令代替:local to pod
:tar cf - /tmp/foo | kubectl exec -i -n <some-namespace> <some-pod> -- tar xf - -C /tmp/bar
pod to local
:kubectl exec -n <some-namespace> <some-pod> -- tar cf - /tmp/foo | tar xf - -C /tmp/bar
kubeadm upgrade node config
和 kubeadm upgrade node experimental-control-plane
,使用 kubeadm upgrade node
代替。--experimental-control-plane
,使用 --control-plane
代替。--experimental-upload-certs
,使用 --upload-certs
代替。kubeadm config upload
,使用 kubeadm init phase upload-confi
代替。proxy
插件,使用 forward
插件来代替。kubernetes
插件移除 resyncperiod
选项。upstream
选项,如果指定,将被忽略。kubernetes 1.16 changelog
kubernetes 1.15 changelog
etcd2
,默认 --storage-backend=etcd3
。--etcd-quorum-read
。--storage-versions
。--repair-malformed-updates
。--insecure-experimental-approve-all-kubelet-csrs-for-group
。--google-json-key
。--experimental-fail-swap-on
。componentconfig/v1alpha1
。run-container
。 node.alpha.kubernetes.io/notReady
和 node.alpha.kubernetes.io/unreachable
,改为 node.kubernetes.io/not-ready
和 node.kubernetes.io/unreachable
。kubernetes 1.14 changelog
kubernetes 1.13 changelog
/status
子资源更新除了 .status
字段(之前只允许对 .spec 和 .metadata 进行更新)。在启用 /status
子资源时,required
和 rescription
可用于 CRD OpenAPI 验证 schema。另外,用户可以创建多个版本的 CustomResourceDefinitions,不需进行自动转换。可以通过 CustomResourceDefinitions 的 spec.additionalPrinterColumns
字段让 kubectl get
的输出包含额外的列。dry run
功能,允许用户可以看到某些命令的执行结果,而不需要真正提交相关的更改。authorization.k8s.io/decision
(authorization 决定 allow 或 forbid),及 authorization.k8s.io/reason
(做出这个决定的原因)。podsecuritypolicy.admission.k8s.io/admit-policy
和 podsecuritypolicy.admission.k8s.io/validate-policy
,包含允许 Pod 准入相关的策略名称(PodSecurityPolicy 同时可以限制 hostPath 类型的挂载点为只读模式)。CLI 实现了新的插件机制,并提供了包含通用 CLI 工具的开发库方便插件开发者进行插件开发。
--storage-version
参数被移除,由 --storage-versions
代替。同时 --storage-versions
也被废弃。--endpoint-reconciler-type
默认值改为 lease
。--enable-admission-plugins
时,默认包含。使用 --admission-control
参数时,需要显示指定。--rotate-certificates
参数,由配置文件的 .RotateCertificates 字段代替。run-pod/v1
外,其他 kubectl run
的 generator 已废弃。kubectl logs
移除 --interactive
参数。--use-openapi-print-columns
已废弃,由 --server-print
代替。
本页内容是否解决了您的问题?