2016年Kubernetes(k8s)大事记

34次发布 , 18,557次commits,175家企业参与,705个贡献者,2,552,778行Go代码

2016年是Kubernetes快速发展的一年,在社区中,从对它疑虑到逐渐认可再到追捧,转变过程用了不到一年的时间。

Kubernetes被越来越多的公司作为生产系统容器集群的编排引擎,以Kubernetes为核心构建企业内部的容器生态越来越成为业界的共识。

2017已经开始,为了让我们在新的一年更加出色,我们一起来回顾一下2016年Kubernetes发生的大事件。

2017020404

2016 Kubernetes 大事记

2016年,Kubernetes经历了34次稳定版发布,发布次数相比2015年增加了112.5%,平均发布间隔为11天。

V1.5.0

2016年12月23日

Kubernetes 1.5版本意义重大,它完善对Federation的支持、新增的CRI、特别是增加对Windows容器的支持,能够让K8在未来走向更加广阔的天地。

主要更新

  • — StatefulSets:修复了一些BUG,让它更加稳定
  • — 增强对Federation支持:新增kubefed命令,支持联邦的DaemonSets、Deployments、ConfigMaps
  • — 简化集群部署:增强kubeadm、为Master节点设置HA
  • — 增强节点健壮性和可扩展性
  • — 增强Windows容器支持
  • — 发布了插件化、可插拔的容器运行时接口(CRI)
  • — 增强对API支持:授权和认证

新特性

  • — API机制:对OpenAPI的支持、基于此的第一个非Go客户端 [beta]
  • — ReplicaSet创建Pod失败后,可以通过API获取底层错误的原因 [stable]
  • — kubectl apply通过—prune参数删除不再需要的资源 [stable]
  • — StatefulSets支持对需要持久化应用的创建和管理 [beta]
  • — 出于安全方面考虑,不再支持删除未响应的节点上的Pod,如果通过CLI强制删除会收到警告 [beta]
  • — 继续打磨RBAC,提供了一组默认的集群角色 [alpha]
  • — 提升了kubeadm的易用性和交互体验 [alpha]
  • — 在GCE上,可以通过kubeup/kubedown脚本提供对于高可用master节点的创建和删除 [alpha]
  • — 支持联邦的DaemonSets [alpha]
  • — 支持联邦的ConfigMaps [alpha]
  • — 支持联邦的Deployments [alpha]
  • — 添加对联邦资源的删除选项:DeleteOptions.OrphanDependents [alpha]
  • — 引入一个简化创建联邦集群的CLI工具:kubefed [alpha]
  • — 服务之间可以通过DNS进行调用,而不是之前Pod里host文件的方式 [stable]
  • — 服务类型为NodePort和LoadBalancer里提供了基于源IP的策略选项 [beta]
  • — 通过beta版的ConfigMaps的参数支持DNS的水平扩展 [stable]
  • — 如果容器运行时开启userns重映射时,保留对宿主userns的访问能力 [alpha]
  • — 支持可插拔的CRI,并提供一个Docker-CRI用于测试和反馈 [alpha]
  • — 基于QoS层级,提供对每个Pod的Cgroup配置 [stable]
  • — 基于Pod级别的(而不是Container级别的)资源控制模型,提供针对Pod级别的Cgroup配置 [alpha]
  • — Kubelet通过集成的memcg通知、检测Pod是否超出了内存的硬限制 [beta]
  • — 引入了对于容器化的节点一致性检查工具:使用镜像gcr.io/google_containers/node-test:0.2 [beta]
  • — 添加对于不透明整数资源(Opaque Integer Resource)的统计 [alpha]
  • — 在遵守应用SLO的情况下,PodDisruptionBudget可以用来删除(drain)节点 [beta]
  • — Dashboard UI现在可以显示所有用户可见对象及其资源的使用情况 [stable]
  • — 支持对Windows Server 2016的节点支持和调度 [alpha]

V1.4.0

2016年9月27日

Kubernetes 1.4版本大大降低了K8S集群的部署难度,对有状态应用有了更好的支持,集群的Web管理工具——Dashboard能够替代90%的命令行操作,同时,K8S在安全方面也正在不断完善。

主要更新

  • — 简化用户体验:更易搭建集群、更易理解集群
  • — 支持有状态应用:增强持久能力,新的调度和资源特性
  • — 集群联邦:多集群的Ingress,联邦混合云上的资源支持
  • — 安全:增加Pod级和集群级粒度的安全方案

新特性

  • — 增加了每次对安全服务端点访问的审计日志 [alpha]
  • — kube-apiserver支持Swagger 2.0 [beta]
  • — 默认启用服务端的垃圾回收 [beta]
  • — 引入基于时间的、可命名的ScheduledJobs [alpha]
  • — 根据容器镜像策略来决定它是否可以被调度 [alpha]
  • — Access Review为外部需求提供授权机制 [alpha]
  • — 保证关键的基础Pod在必要的情况以停止常规Pod下为代价进行调度 [alpha]
  • — 简化了Apiserver和Kubelet间安全通信的启动过程 [alpha]
  • — kubeadm简化了Kubernetes集群的启动 [alpha]
  • — 通过向Federation API提交Ingress的创建请求就可以创建联邦Ingress。联邦控制系统通过虚拟IP来完成对所有集群的负载均衡。GCE L7 Load Balancer首次实现此特性。 [alpha]
  • — 联邦ReplicaSet可以根据不同的权重在多个集群上保证Pod的数量 [beta]
  • — 联邦Secrets保证跨集群一致性 [beta]
  • — 联邦APIserver增加了对Events的支持 [beta]
  • — 创建联邦Namespace会让所有注册在联邦里的每个集群都维持同样的Namespace [alpha]
  • — Ingress支持单Master多Zones的集群 [alpha]
  • — service LB支持保留客户端源IP地址的策略 [alpha]
  • — Dashboard开放了节点性能展示 [alpha]
  • — Pods现支持对sysctl的白名单。不安全的sysctl将被Kubelete的白名单记录 [alpha]
  • — AppArmor的功能特性将被应用到Pod容器上 [beta]
  • — 集群增加了对安全相关特性的访问控制 [beta]
  • — 面临磁盘压力时Kubelet可以驱除节点上的Pod [stable]
  • — 自动化的Docker校验结果 [beta]
  • — 持久卷提供对StorageClass配置多个卷的支持 [beta]
  • — 支持新的卷插件:Quobyte Distributed File System [stable]
  • — 支持新的卷插件:Azure Data Disk [stable]
  • — 新的Dashboard,支持90%的命令行功能 [stable]

V1.3.0

2016年7月2日

Kubernetes 1.3版本第一次引入了对有状态应用的支持(PetSet)和对NVDIA GPU的支持

主要更新

  • — alpha版的基于角色的认证(RBAC Auth)添加到API组中
  • — beta版联邦的API组发布
  • — Service可以注册到联邦中所有集群的CloudDNS中(AWS和GCP)
  • — alpha版的PetSet用于有状态应用的场景
  • — alpha版本的init pod为有状态的容器提供一次性安装的特性
  • — 在kubectl rolling-update过程中重试Pod/RC的更新
  • — 为kubectl rollouts添加status子命令
  • — 七层的负载均衡控制器和磁盘控制器在master端实现,计算节点不再需要拥有与之操作相关的权限
  • — 设置TSL1.2最小化
  • — 添加Kubectl create secret tls命令
  • — webhook令牌认证器
  • — 为安全敏感的pod引入beta版的PodSecurityPolicy对象
  • — kubectl在json错误时会显示出错的行号
  • — kubectl中使用-t来简化—tty选项
  • — 提高Node的稳定性:根据内存的压力,适当剔除一些pods
  • — 增加了对NVDIA的GPU支持,当前为alpha版
  • — 将Loadbalancer和Nodeport的服务添加到配额体系中

V1.2.0

2016年3月17日

Kubernetes 1.2版本具有划时代的意义,在这个版本中,K8S的集群规模得到质的提升,”声明式”的Deployment、支持动态配置管理的ConfigMap、适用于多个计算节点同时部署一个的场景DaemonSet,这些全新的理念和丰富的使用场景让K8S在社区中异常火爆,开始了”Kubernetes rules the world”的征程。

主要更新

  • — 集群规模提升4倍:每个集群支持1000个节点,支撑30000个Pod,减少4倍系统负载
  • — 动态的配置管理ConfigMap被加入到核心API组中,配置信息可以存储在Kubernetes集群中,在容器启动时动态的拉取相应的配置
  • — Deployments实现了声明式的应用的自动发布和升级,它支持版本化,支持同时多个rollout操作,聚合该deployment下的所有pod的状态,保证应用的高可用性和快速回滚
  • — 云上集群可以进行区域划分,服务对应的Pod分布在各个可用区域中,应用在可用区域间容错
  • — DaemonSets简化了在每个节点上容器的运行,对应的服务在每个节点上有且只有一个Pod
  • — Ingress支持TLS和L7基于http的流量转发
  • — kubectl drain可以在比如在节点维护或升级内核的时候先驱逐Pod,然后优雅地删除节点
  • — 支持自定义度量的应用水平扩展
  • — 容易上手的新颖Dashboard,可以和命令行一样跟系统交互

新特性

  • — Job提升:apiVersion: batch/v1现已可用,并且不再需要指定spec.selector.field。兼容老版本的extensions/v1beta1,仍可以通过它进行访问 [GA]
  • — HPA提升:apiVersion autoscaling/v1现已可用,用整型TargetCPUUtilizationPercentage 换了原来嵌套的结构CPUTargetUtilization,默认值为80%,使用ScaleTargetRef直接指向待扩展的资源 [GA]
  • — Kube-proxy默认启用iptables代理,可用参数—proxy-mode指定是userspace还是iptables。如果没指定参数将会参照node的annotaion里proxy-mode进行设置,都没有采用将默认值。如果iptables模式启动失败将退回到userspace模式启动。iptables比userspace性能更好,占用资源更少 [GA]
  • — 通过为系统保留资源提升了节点稳定性 [GA]
  • — 为健康检查和可读性检查添加了三个参数:periodSecond,successThreshold, failureThreshold [GA]
  • — 引入跟ReplicaController很相似但更通用的ReplicaSet [beta]
  • — 可以对ReplicaSet、ReplicaController、以及Deployment进行扩展 [beta]
  • — kubectl run命令默认产生Deployment和Job
  • — 用户可指定Pods的安全上下文
  • — 支持SELinux的卷可以自动使用SELinux上下文作标签
  • — 稳定的go client库发布了1.2版 [stable]
  • — 通过Kubelet新的度量API可以访问日志、文件系统、磁盘和卷的使用情况
  • — 动态提供持久卷(Persistent Volume)
  • — 支持并行运行多个调度器(scheduler)
  • — 更具表现力的节点亲和性标识,支持节点的“软”亲和。
  • — Pod可以通过annotation指定主机名和子域名。如果匹配到同一命名空间的一个服务,那么会为这个Pod创建FQDN的A记录
  • — SchedulerExtender允许用户实现自定义的调度策略
  • — 新的 Flex Volume Plugin 允许用户可以执行安装在每个节点/usr/libexec/kubernetes/kubelet-plugins/volume/exec/目录的卷插件
  • — Kubelet提供了新的度量API,提供用户友好的方式显示系统信息: 日志、容器的文件系统使用情况、每个Pod挂载的卷的使用情况,和宿主机的磁盘使用情况

V1.1.1

2015年11月19日

为了更好的理解2016年Kubernetes的变化,这里列举一下V1.1.1版本的主要更新和新特性。V1.1.1首次引入了HPA和Job概念,支持HTTP的负载均衡策略也是一大亮点。

主要更新

  • — 支持Pod水平自动扩容(HPA)
  • — 为批处理和仅运行一次的任务提供Job资源
  • — 支持HTTP负载均衡
  • — 提升kubectl对容器的交互和对滚动升级的支持

新特性

  • — 为SC添加非root指令和kubelet检查
  • — 为kube-proxy添加启动事件
  • — 实现了基于iptables的Proxy
  • — 添加了HPA的实验性API
  • — 支持Openstack Keystone认证插件
  • — Kubelet启用优雅删除
  • — Kubectl默认不显示Terminated的Pod
  • — 支持外部IP
  • — 支持OpenID认证
  • — 将-t参数的含义由—template变为–tty
  • — 默认开启—validate,并提示如何关闭它
  • — 为Controller-Manager添加HPA参数
  • — 支持对Pod的优雅删除
  • — 添加Ceph FS卷插件
  • — 废弃参数create-external-load-balancer
  • — MESOS:添加初始化执行的CPU和内存参数
  • — 阻止apiServer启用证书
  • — 允许用户提供的IP来为K8s创建LoadBalancer
  • — kubectl describe Pod/Node时显示更多信息
  • — 随着K8s二进制包一同分发kubectl 补全
  • — 引入新资源Job
  • — 升级 utils/iptables以支持firewalld
  • — 升级flunted-gcp,使得与K8s关联的日志可导出
  • — 从OpenShift上获取kubectl edit
  • — 修复对于私有仓库的docker 配置格式问题
  • — 支持pod日志的扩展选项
  • — 为kubelet增加参数控制的RLIMIT_NOFILE
  • — 支持特权pod
  • — 从默认的admission controller里去除DenyEscalatingExec
  • — 支持docker 1.8.3
20161219151628

鸣谢:容器时代 大伟