Kubernetes v1.8: 主要变更点
本篇文章概括了Kubernetes v1.8版本的主要更改,其余内容请参考下方链接。
-
- Kubernetes v1.8: 主な変更点 (Major Themes)
-
- Kubernetes v1.8: Before Upgrading
-
- Kubernetes v1.8: 既知の問題 (Known Issues)
- Kubernetes v1.8: Deprecations
Kubernetes是由社区成员组成的专业兴趣小组(SIGs)进行开发的,每个版本的变更日志都将根据SIG逐个列出在v1.8版本中所处理的问题。
SIG API Machinery(API 机械)
对于列表获取,进行小块的分解,或者改进支持自定义API服务器和自定义资源定义(CRD),以及在客户端过滤事件垃圾邮件等。
kube-apiserver: [alpha] 实现列表分页功能
目前为止,只能获取整个列表,获取大型列表会消耗大量的 CPU 和内存。然而,自从 etcd3 开始,可以指定列表获取的限制。因此,通过这个功能,apiserver 可以将列表获取分成多个块来获取。
为了启用此功能,需要在apiserver –feature-gates中指定APIListChunking。预计在1.9版本中,此功能将成为默认选项。
-
- Alpha list paging implementation by smarterclayton · Pull Request #48921 · kubernetes/kubernetes
- Design for consistent API chunking in Kubernetes by smarterclayton · Pull Request #896 · kubernetes/community
自定义资源定义(CRD):支持通过[alpha] JSON方案对对象进行验证。
CRD(自定义资源定义)API通过基于JSON方案的CRD规范支持自定义对象的验证。在此之前,没有提供CRD对象的规范,任何结构的对象都可以成功写入。
要启用此功能,需要在 apiserver –feature-gates 中指定 CustomResourceValidation。
-
- apiextensions: validation for customresources by nikhita · Pull Request #47263 · kubernetes/kubernetes
- Proposal: Validation for CustomResources. by nikhita · Pull Request #708 · kubernetes/community
客户端:支持事件垃圾信息过滤。
在集群内的组件中添加了客户端端事件垃圾邮件过滤器,以抑制对apiserver的过多流量。
- Add client side event spam filtering by derekwaynecarr · Pull Request #47367 · kubernetes/kubernetes
SIG应用程序
工作负载 API 升级到 apps/v1beta2,并且此改变会影响到 DaemonSet、Deployment、ReplicaSet、StatefulSet 对象。
Workload API(DaemonSet、Deployment、ReplicaSet、StatefulSet)升级到apps/v1beta2版本。
工作负载 API 已升级到 apps/v1beta2。此更改将影响 DaemonSet、Deployment、ReplicaSet、StatefulSet 对象。迁移到 apps/v1beta2 的主要更改如下所示。
-
- 全ての Workload API の spec.revisionHistoryLimit のデフォルト値が 10 に変更
-
- 全ての Workload API で spec.selector のデフォルティングの廃止
-
- StatefulSet、DaemonSet で spec.updateStrategy のデフォルトが OnDelete から RollingUpdate に変更
- CronJob で spec.successfulJobsHistoryLimit のデフォルトが 3、spec.failedJobsHistoryLimit が 1 に変更
Workload API 在1.9版本中计划晋升至稳定版。
-
- Move workload API objects to group version apps/v1beta2 · Issue #49135 · kubernetes/kubernetes
-
- Workload Controllers v1Beta2 · Issue #353 · kubernetes/features
-
- Workloads GA · Issue #484 · kubernetes/features
- remove apps/v1beta2 defaulting codes for obj.Spec.Selector and obj.Labels by crimsonfaith91 · Pull Request #50164 · kubernetes/kubernetes
SIG认证
RBAC昇级至stable,高级审计升级至beta,与外部密钥管理系统协作以加密资源等。虽然资源加密原本计划在1.8版本升级至beta,但仍保持在alpha状态。
RBAC: 从[v1beta1]稳定版升级到v1。
RBAC API组升级为v1,从v1beta1版本。API没有发生任何更改。
- Role-based access control (RBAC) · Issue #2 · kubernetes/features
先进审计:[beta] alpha 升级至 beta
高级审计已从alpha版本升级至beta版本。由于alpha版本中引入了不兼容的更改,可能需要进行修正,请注意。
-
- Advanced Auditing Beta Changes · Issue #48561 · kubernetes/kubernetes
- Audit Logging for k8s · Issue #22 · kubernetes/features
数据加密:对于像alpha、Secret之类的资源的加密,支持将加密密钥存储在外部密钥管理系统(KMS)中的机制。
1.7版本中增加了将诸如加密密钥等资源加密,并将加密密钥存储在外部密钥管理系统(KMS)中的机制。这一机制补充了原有的基于文件的存储,并可以与多个KMS进行协作。新增了Google Cloud KMS插件,一旦与Google方面的协作完成,即可开始使用。
- Add Google cloud KMS service for envelope encryption transformer by sakshamsharma · Pull Request #48574 · kubernetes/kubernetes
自动调整规模的SIG
横向Pod自动缩放器(HPA)对自定义指标的支持,集群自动缩放器(Cluster Autoscaler)的性能改进和错误报告等。
水平 Pod 自动扩缩容:[beta] 支持基于自定义指标的扩缩容。
水平 Pod 自动缩放器(Horizontal Pod Autoscaler)已升级到 v1beta1,支持自定义指标。同时,相关的指标 API(包括自定义指标和资源/主节点指标的提供)也升级到 v1beta1。
-
- Proposal: Horizontal Pod Autoscaler Version 2 by DirectXMan12 · Pull Request #120 · kubernetes/community
- Switch references in HPA docs from alpha to beta by DirectXMan12 · Pull Request #5671 · kubernetes/kubernetes.github.io
集群自动扩缩容器:[稳定] GA 升级
使用集群自动缩放器进行了以下改进,并升级为GA。请参考发布页面获取详细信息。
- Release Cluster Autoscaler 1.0.0 · kubernetes/autoscaler
SIG集群生命周期
支持 kubeadm 集群更新命令的功能,同时支持以 alpha 版本的方式创建自托管控制平面。
kubeadm: [alpha] 支持创建 self-hosted 集群的 kubeadm init。
kubeadm init 已支持创建自托管集群。自托管集群是指将 Kubernetes 集群的内部组件由该集群自身管理的方式。更多关于自托管集群的详细信息,请参阅 kubernetes/community#206。
迄今为止,使用 kubeadm 构建的集群使用静态 Pod,但在 self-hosted 中,集群内通过 DaemonSet 进行部署。此外,在1.8版本中,仅支持将控制平面组件 (apiserver、controller manager、scheduler) 进行 self-hosted 化。
要启用这个功能,需要在kubeadm init命令中设置–feature-gates=SelfHosting=true并执行。控制平面的自托管化计划在下一个版本1.9中将变为默认设置。
-
- Self-hosting support in kubeadm · Issue #415 · kubernetes/features
- Update docs/admin/kubeadm.md to cover self-hosting in 1.8. by mattmoyer · Pull Request #5497 · kubernetes/kubernetes.github.io
kubeadm:[beta] 添加了升级子命令来完成集群升级。
新增了一个 upgrade 子命令。通过这个命令,可以对 Static Pod 和 self-hosted 两种集群进行升级。
-
- Easy, automated upgrades with the `kubeadm upgrade` command · Issue #296 · kubernetes/features
-
- kubeadm upgrades design proposal – Google ドキュメント
-
- Add `kubeadm upgrade` docs by mhausenblas · Pull Request #4770 · kubernetes/kubernetes.github.io
-
- kubeadm: Add ‘kubeadm upgrade plan’ and ‘kubeadm upgrade apply’ CLI commands by luxas · Pull Request #50872 · kubernetes/kubernetes
- Implement the `kubeadm upgrade` command by luxas · Pull Request #48899 · kubernetes/kubernetes
SIG 测量仪器
提供 metrics-server 替代 Heapster 等功能。
建议将metrics-server用作提供资源指标API的方法。
metrics-server 现在被推荐作为提供资源度量 API 的方法。与过去部署 Heapster 一样, metrics-server 也需要作为插件来部署。过去,诸如 kubectl top 和 Horizontal Pod Autoscaler (HPA) 等控制器使用 Heapster 提供的度量数据。
度量服务器作为扩展 API 服务器实现,并在路径 /apis/metrics.k8s.io 上进行注册。
-
- kubernetes-incubator/metrics-server
-
- Metrics Server (for resource metrics API) · Issue #271 · kubernetes/features
- Added documentation for Metrics Server by piosz · Pull Request #5560 · kubernetes/kubernetes.github.io
SIG 多集群(以前称为 SIG 联邦)
为了Federation的稳定发布(GA)做准备等。
SIG节点
提供设备插件等功能,使得可以在不向 Kubelet 添加供应商特定的代码的情况下使用硬件。
[alpha] 支持扩展 Kubelet 的设备插件
支持设备插件的引入,使得在不添加供应商特定代码到Kubelet的情况下可以使用特定的硬件。这种功能可以适用于需要供应商特定初始化或设置的GPU、高性能网络接口卡(NIC)、FPGA、InfiniBand、存储设备以及类似的计算资源等。通过设备插件,可以实现这些设备的检测、从容器中使用以及健康检查等功能。
在版本1.8中仅对Nvidia GPUs进行了测试。此外,要启用此功能,需要在kubelet –feature-gates中指定DevicePlugins,并将Device Plugin实现部署到集群中。
-
- Extension to support new compute resources · Issue #368 · kubernetes/features
-
- Deviceplugin jiayingz by jiayingz · Pull Request #51209 · kubernetes/kubernetes
-
- Device Plugins – Kubernetes
- container-engine-accelerators/cmd/nvidia_gpu at master · GoogleCloudPlatform/container-engine-accelerators
SIG 网络
在 Kubernetes 中,已经添加了 kube-proxy 的 IPVS 模式,以支持 NetworkPolicy API 中出站流量策略的应用和基于 CIDR 的策略。这一模式是在当前的 iptables 和用户空间模式之外作为 alpha 功能增加的。
网络策略:[beta] 支持出口规则。
除了传统的Ingress流量(入站),NetworkPolicy API现在还支持Egress流量(出站)。
egress:
- to:
- podSelector:
matchLabels:
role: backend
ports:
- protocol: TCP
port: 5978
要使用 NetworkPolicy API,需要使用支持它的像 Weave Net 或 Calico 这样的 Pod 网络插件。
- Add EgressRule to NetworkPolicy by cmluciano · Pull Request #51351 · kubernetes/kubernetes
网络策略:[beta] 支持基于CIDR的策略应用
除了传统的namespaceSelector、podSelector,现在还支持基于CIDR的策略应用于ipBlock。ipBlock将排除指定CIDR范围之外的流量。
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
-
- Add IPBlock to Network Policy by cmluciano · Pull Request #50033 · kubernetes/kubernetes
- update network-policy by adding egress and ipBlock usage by Lion-Wei · Pull Request #5473 · kubernetes/kubernetes.github.io
kube-proxy: [alpha] 支持 ipvs 模式
除了传统的用户空间和iptables之外,还支持使用IPVS的ipvs模式。目前使用iptables的方法在华为公司使用超过50000个服务时存在性能问题,因此提出了使用IPVS的方法。iptables本来是为防火墙设计的,所以在负载均衡方面,IPVS具有更高级的功能和更优越的性能。
要启用此功能,您需要在kube-proxy –feature-gates中指定SupportIPVSProxyMode=true,并将–proxy-mode设为ipvs。
-
- Implement IPVS-based in-cluster service load balancing · Issue #265 · kubernetes/features
-
- Implement IPVS-based in-cluster service load balancing by dujun1990 · Pull Request #46580 · kubernetes/kubernetes
- add proxy-mode:ipvs in service.md by Lion-Wei · Pull Request #5571 · kubernetes/kubernetes.github.io
SIG可扩展性
根据持续集成环境自动化进行持续可扩展性测试,创建关于当前可扩展性极限的文档,制定SLIs(服务水平指标)和SLOs(服务水平目标)等。
- scalability validation report
SIG日程安排
支持混合使用各种工作负载,并实现更高级别的资源利用率和可用性的 Pod 优先级和 Pod 抢占。
[中文]
支持PriorityClasses和Pod优先级的功能。
新增了一种通过数字定义优先级的非命名空间资源PriorityClasses。该资源由名称和优先级数值组成。
apiVersion: v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for XYZ service pods only."
Pod Priority 已被支持。可以通过在 Pod .spec.priorityClassName 中设置 PriorityClass 对象的名称来为 Pod 设置优先级。如果不存在将 globalDefault 设置为 true 的 PriorityClass 对象,并且 Pod 没有设置 priorityClassName,则将其视为优先级为 0。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority
要启用这个功能,需要使用kube-apiserver –feature-gates=PodPriority=true命令,并将 –runtime-config=scheduling.k8s.io/v1alpha1=true进行相应的设置。
-
- Add Priority to Kubernetes API by bsalamat · Pull Request #45610 · kubernetes/kubernetes
-
- Add Priority admission controller by bsalamat · Pull Request #49322 · kubernetes/kubernetes
- Add user docs for pod priority and preemption by bsalamat · Pull Request #5328 · kubernetes/kubernetes.github.io
根据 [alpha] Pod 优先级实现 Preemption 支持。
基于Pod Priority的Preemption(抢占、替换)已经在调度器中得到支持。创建Pod P后,将对节点进行分配调度。如果找不到可以调度Pod P的节点,则会启动Preemption逻辑,删除一个或多个优先级低于Pod P的Pods以寻找可以调度Pod P的节点。如果找到这样的节点,则删除优先级较低的Pods,将Pod P调度到该节点上。这个功能被广泛介绍为Borg资源高效调度功能的一部分,似乎也被应用在Kubernetes的实施中。
要启用此功能,需要启用PodPriority。
-
- Add pod preemption to the scheduler by bsalamat · Pull Request #50949 · kubernetes/kubernetes
- Add user docs for pod priority and preemption by bsalamat · Pull Request #5328 · kubernetes/kubernetes.github.io
SIG存储
调整卷大小、快照、挂载选项设置以及扩展度量等。
持久卷:[alpha] 支持卷的调整大小功能
PersistentVolume 的卷大小调整得到支持。在alpha版本中,只支持不需要调整文件系统的卷类型(目前只支持GlusterFS)。可以通过编辑由支持卷大小调整的StorageClass创建的PersistentVolumeClaim的卷大小来进行卷大小调整。调整卷大小不会创建新的PersistentVolume。
要启用此功能,需要设置 kube-apiserver –feature-gates=ExpandPersistentVolumes=true,并同时启用 PersistentVolumeClaimResize Admission 插件。
计划在1.9版本进行beta测试,然后在1.10版本稳定发布。
-
- Add support for resizing PVs · Issue #284 · kubernetes/features
-
- Proposal for growing persistent volumes by gnufied · Pull Request #657 · kubernetes/community
-
- Implement Controller for growing persistent volumes by gnufied · Pull Request #49727 · kubernetes/kubernetes
-
- Add docs for implementing resize by gnufied · Pull Request #5528 · kubernetes/kubernetes.github.io
- Using Admission Controllers – Kubernetes
持久卷:[alpha] 支持快照
支持创建、列出、删除和恢复快照。由于目前仍处于原型阶段,因此需要注意,在版本更改时不能保证先前快照的恢复。
计划在1.9版本中进行测试,然后在1.10版本中升级为稳定版。
-
- Storage Volume Snapshots · Issue #177 · kubernetes/features
- Add volume snapshots feature by tsmetana · Pull Request #331 · kubernetes-incubator/external-storage
持久卷:[稳定] 挂载选项从 beta 升级到稳定。
`mountOptions`字段已从beta版本升级为stable版本。同时,在`PersistentVolume`中添加了该字段,用于替代通过注释指定。同样,`StorageClass`中也添加了`mountOptions`字段。
-
- Proposal for taking mount option to GA by gnufied · Pull Request #771 · kubernetes/community
-
- Take mount options to GA by adding PV.spec.mountOptions by wongma7 · Pull Request #50919 · kubernetes/kubernetes
- Support Volume Mount Options · Issue #168 · kubernetes/features
[稳定] 支持使用度量衡来衡量音量的支持
支持了与各种音量操作相关的高级度量标准。这些指标在 PersistentVolume 控制器(kube-controller-manager)中以与个别音量类型无关的形式实现。以 Prometheus Metrics Format 输出,并具体提供以下指标。
storage_operation_duration_seconds
Storage operation duration
Histogramvolume_plugin
, operation_name
storage_operation_errors_total
Storage operation errors
Histogramvolume_plugin
, operation_name
-
- Add support for high level volume operation metrics · Issue #349 · kubernetes/features
-
- Add a proposal for high level volume metrics by gnufied · Pull Request #809 · kubernetes/community
- Add volume operation metrics to operation executor and PV controller by wongma7 · Pull Request #50036 · kubernetes/kubernetes