Kubernetes1.7两大新特性 | 直接通过containerd管理容器、自动伸缩条件

 ■ 文/ 天云软件 产品总监 马俊 

支持绕过docker,直接通过containerd管理容器

背景情况

从Docker1.11版本开始,Docker依赖于containerd和runC来管理容器,containerd是控制runC的后台程序,runC是Docker公司按照OCI标准规范编写的一个操作容器的命令行工具,containerd这个后台程序还可以操作满足OCI标准规范的其他容器工具,也就意味着以后只要是按照OCI标准规范开发的容器工具,都可以被containerd使用起来。使用containerd的好处是,当docker daemon或者containerd两个进程crash后,应用容器不会“死掉”,未来要是实现的功能是,当containerd daemon重新启动后可以同应用容器重新建立连接。

从Docker1.11版本开始,daemon模块调用关系图如下:

d1

美国时间2016年12月14日,Docker公司宣布将containerd从Docker Engine中分离,并捐赠到一个新的开源社区独立发展和运营,阿里云,AWS, Google,IBM和Microsoft作为初始成员,会为项目提供贡献和维护人员。

具体介绍

在Kubernetes1.7中,增加了直接通过调用containerd来管理容器的α新特性。

d2

从上图中可以明显的看出来绕过docker,直接通过containerd管理容器,可以节省一个操作步骤,那么这样会带来很多好处:

1、由于减少了一个操作步骤,提高了系统效率,并且系统更易于维护。

2、取消了DockerDaemon,整个系统占用的资源更少了,可以给业务使用的资源变多了。

3、不依赖DockerDaemon,整个系统更加开放。

4、由于kubelet并没有变化,那么不影响以前用户使用。

要让Kubernetes直接通过containerd管理容器,需要下面几个步骤:

1、安装:containerd: v0.2.3-1098-g8ed1e24

2、安装runc: v1.0.0-rc3

3、安装cni: v0.4.0

4、按照Kubernetes: v1.7.0以及以上版本

5、在Kubernetes集群中配置CONTAINER_RUNTIME=remote CONTAINER_RUNTIME_ENDPOINT=’/var/run/cri-containerd.sock’ ./hack/local-up-cluster.sh,其中“CONTAINER_RUNTIME=remote”就表示使用containerd直接管理容器。

 

目前支持如下基本功能:

1、  POD级别Sandbox和container生命周期管理

2、  镜像管理

3、  Sandbox网络管理

4、  容器日志管理

5、  在容器中执行命令

Kubernetes1.7新特性:自动伸缩条件

核心概念

Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现POD水平自动伸缩的功能。云计算具有水平弹性的特性,这个是云计算区别于传统IT技术架构的主要特性。对于Kubernetes中的POD集群来说,HPA可以实现很多自动化功能,比如当POD中业务负载上升的时候,可以创建新的POD来保证业务系统稳定运行,当POD中业务负载下降的时候,可以销毁POD来提高资源利用率。

z1

HPA控制器默认每隔30秒就会运行一次,如果要修改间隔时间,可以设置horizontal-pod-autoscaler-sync-period参数。

具体介绍

1、HPA触发条件新特性(α特性)

在Kubernetes1.7中,对HorizontalPodAutoscalerStatus结构体,新增加了Conditions属性。

z2

Conditions属性是一个HorizontalPodAutoscalerCondition结构体,在这个结构体中包括Type、Status、LastTransitionTime、Reason和Message五个属性,每个属性的含义如下:

• Type属性:包含三个可选类型,ScalingActive、AbleToScale和ScalingLimited。

• Status属性:表示Type属性是true还是false。取值为true和false,只有当HPA控制器检查的目标指标运行正常的时候才会设置ScalingActive为true。在其他情况下会将ScalingActive设置成false。如果Type是AbleToScale类型,那么取值为true的时候有三种情况,第一种是当HPA控制器可以获取当前目标自动伸缩,第二种是HPA控制器可以扩展或者收缩目标到指定的副本数,第三种是HPA控制器发现已经到了可以启动一次新的自动伸缩时间了,在其他情况下会设置成false。如果Type是ScalingLimited,那么只有当副本数在配置范围内的时候才被设置成false,否则都是true。

• LastTransitionTime:记录上一次事务运行时间。

• Reason:记录上一次事务产生的原因。

• Message:记录上一次事务产生的详细信息。

通过kubectl describe hpa命令可以看到HorizontalPodAutoscalerStatus结构体新增的Conditions属性。

$ kubectl describe hpa cm-test

Name:                           cm-test

Namespace:                      prom

Labels:                         <none>

Annotations:                    <none>

CreationTimestamp:              Fri, 16 Jun 2017 18:09:22 +0000

Reference:                      ReplicationController/cm-test

Metrics:                        ( current / target )

  “http_requests” on pods:      66m / 500m

Min replicas:                   1

Max replicas:                   4

ReplicationController pods:     1 current / 1 desired

Conditions:

  Type                  Status  Reason                  Message

  —-                  ——  ——                  ——-

  AbleToScale           True    ReadyForNewScale        the last scale time was sufficiently old as to warrant a new scale

  ScalingActive         True    ValidMetricFound        the HPA was able to successfully calculate a replica count from pods metric http_requests

  ScalingLimited        False   DesiredWithinRange      the desired replica count is within the acceptible range

Events:

2、增加了两个HPA参数(α特性)

在Kubernetes1.7中,对HPA控制器,在原先horizontal-pod-autoscaler-sync-period参数基础上,新增加了horizontal-pod-autoscaler-upscale-delay和horizontal-pod-autoscaler-downscale-delay两个参数,默认值分别是3分钟和5分钟,分别代表自动伸展后的延迟时间和自动收缩后的延迟时间。

HPA控制器通过这两个新增参数来加以辅助控制是否进行自动伸缩,同时也会根据这两个参数来设置HorizontalPodAutoscalerCondition结构体的Conditions属性。

 —END—