Kubernetes1.3新特性

本次分析的kubernetes版本号:v1.3.0。

scheduler模块

新增了kube-api-content-type参数,表示scheduler模块发送给api-server的请求类型,默认值是“application/vnd.kubernetes.protobuf”。

新增了hard-pod-affinity-symmetric-weight参数,表示POD调度规则亲和力的权重,取值范围从0到100。

新增了failure-domains参数,这是一个字符串参数,表示POD调度时亲和力参数。在调度POD的时候,如果两个POD有相同的亲和力参数,那么这两个POD会被调度在相同的节点上,如果两个POD有不同的亲和力参数,那么这两个POD不会在相同的节点上。

在结构体Affinity中增加了两个参数PodAffinity和PodAntiAffinity,这两个参数会使用到failure-domains参数输入值。

type Affinity struct {

       NodeAffinity*NodeAffinity `json:"nodeAffinity,omitempty"protobuf:"bytes,1,opt,name=nodeAffinity"`

       PodAffinity*PodAffinity `json:"podAffinity,omitempty"protobuf:"bytes,2,opt,name=podAffinity"`

       PodAntiAffinity*PodAntiAffinity `json:"podAntiAffinity,omitempty"protobuf:"bytes,3,opt,name=podAntiAffinity"`

}


在结构体Resource中增加了对Nvidia GPU的支持,也就是说在调度的时候,也将Nvidia GPU作为资源进行调度。

type Resource struct {

       MilliCPU  int64

       Memory    int64

       NvidiaGPUint64

}


api-server模块

新增了storage-media-type参数,用来表示存储上存放对象的类型,默认是application/json。

新增了enable-swagger-ui参数,可以通过访问apiServer上面的“/swagger-ui”来查看所有api。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger的目标是对REST API定义一个标准的和语言无关的接口,可让人和计算机无需访问源码、文档或网络流量监测就可以发现和理解服务的能力。

新增了storage-backend参数,用来表示后台存储类型,包括“etcd2”和“etcd3”,默认是“etcd2”。

新增了deserialization-cache-size参数,用来表示内存中缓存的jason对象个数。

新增了webhook相关参数authorization-webhook-cache-authorized-ttl和authorization-webhook-cache-unauthorized-ttl,用来表示进行webhook认证信息超时时长。

新增了authorization-rbac-super-user参数,如果设置了这个参数,那么当authorization-mode参数设置为RBAC时,authorization-rbac-super-user参数的用户就会作为超级用户使用系统,不会通过RBAC进行权限和授权校验。

新增了enable-garbage-collector参数,用来表示是否启用垃圾回收功能,这是一个alpha特性,这个参数的值必须同controller-manager模块对应参数设置成一样。

controller-manager模块

新增了node-cidr-mask-size参数,用来表示kubernetes管理集群中节点的cidr掩码长度,默认是24位。

新增了configure-cloud-routes参数,用来表示是否使用kubernetes管理的IP来设置公有云提供商的路由IP,默认是true。

新增了enable-dynamic-provisioning参数,如果这个参数设置成true,那么如果kubernetes使用的存储环境支持动态预配置,那么就启用这个存储环境的动态预配置功能。动态预配置是指存储环境可以根据kubernetes自身所预期的未来需求合理分配虚拟磁盘存储,而无需预先分配专用的物理磁盘存储。通过这种方法,可以有效的利用存储环境中的存储容量,达到按需使用存储空间的目的。

新增了controller-start-interval参数,用来表示下面各个控制管理程序的启动间隔,默认间隔是0秒。

新增了enable-garbage-collector参数,用来表示是否启用垃圾回收功能,这是一个alpha特性,这个参数的值必须同api-server模块对应参数设置成一样。

新增了service-cluster-ip-range参数,用来定义kubernetes集群中service使用的IP范围。

EndpointController

新增了全局变量PodStoreSyncedPollPeriod,默认100毫秒,用来等待POD缓存同步,之后在进行service同步。

新增了全局变量TolerateUnreadyEndpointsAnnotation,如果用于PetSet的POD还没有准备好的时候,先创建了endpoints,那么这个时候POD其实是不可用的,所以需要通过这个变量进行标识。

在结构体EndpointController中新增了变量internalPodInformer和podStoreSynced,其中internalPodInformer表示使用自定义的内存缓存来存放消息,而podStoreSynced返回true的时候表示POD缓存至少已经同步一次了。

type EndpointController struct {

       client*clientset.Clientset

       serviceStorecache.StoreToServiceLister

       podStore     cache.StoreToPodLister

       internalPodInformerframework.SharedIndexInformer

       queue*workqueue.Type

       serviceController*framework.Controller

       podController     framework.ControllerInterface

       podStoreSyncedfunc() bool

}


ReplicationManager

全局变量FullControllerResyncPeriod的默认值从30秒调整到了10分钟,由于kubernetes已经越来越健壮了,所以为了保证系统稳定而设置的同步周期越来越没有存在的价值了。

结构体ReplicationManager中新增了变量internalPodInformer,表示使用自定义的内存缓存来存放消息。

GCController

在v1.3中没有什么变化。

NodeController

新增了全局变量podCIDRUpdateRetry,用来设置更新Node.Spec.PodCIDR的重试次数,默认为5次。

新增了全局变量cidrUpdateWorkers和cidrUpdateQueueSize,分别表示NodeController更新NodeSpec的线程数和队列容量,默认值分别是10和5000。

结构体NodeController中,新增了变量cidrAllocator,用来记录分配给NODE的cidr;还新增了变量networkSegmentationMode,在1.3中这个变量起到一个临时作用,当这个启用这个变量的时候,NodeController不对出于unhealthy状态的NODE进行POD逃离操作,当NodeController发现所有的NODE状态都是NotReady的时候,会自动启用这个变量,当NodeController发现所有NODE状态都是healthy的时候,会置这个变量为无效。

ServiceController

在v1.3中没有什么变化。

RouteController

新增了三个全局变量,maxConcurrentRouteCreations、maxRetries、updateNodeStatusMaxRetries,分别用来表示CreateRoute API的最大调用并发数、创建路由最大重试次数、NODE状态更新最大重试次数。

ResourceQuotaController

在v1.3中没有什么变化。

HorizontalController

在v1.3中没有什么变化。

DaemonSetsController

结构体DaemonSetsController中增加了变量eventRecorder,用于记录DaemonSetsController的日志事件。

JobController

结构体JobController中增加了internalPodInformer变量,表示使用自定义的内存缓存来存放消息。结构体中还删除了podController变量。

DeploymentController

在v1.3中没有什么变化。

ReplicaSetController

在v1.3中没有什么变化。

PersistentVolumeController

新增了enable-dynamic-provisioning参数,作用同controller-manager模块的enable-dynamic-provisioning参数,上面已经介绍过了。

在v1.3中将PersistentVolumeProvisionerController、PersistentVolumeClaimBinder、PersistentVolumeRecycler删除掉,更新成了PersistentVolumeController。

在结构体VolumeConfigFlags中新增了EnableDynamicProvisioning变量,根据enable-dynamic-provisioning参数取值。在初始化NewPersistentVolumeControllerOptions方法中,EnableDynamicProvisioning变量被设置成true。PVClaimBinderSyncPeriod变量在初始化的时候从10分钟调整到了15秒钟。

在1.2的时候使用的Builder和Cleaner,在1.3的时候都修改成了Mounter和Unmounter。   

NamespaceController

在v1.3中没有什么变化。

PetSetController

在v1.3中新增加了PetSetController。这个新的Controller满足了下面这些需求:重启POD永久保存host名称;提供每个容器的持久化存储,即使POD被删除,数据也不会丢失;提供一个稳定的、唯一标识的存储实例;提供一致性的网络标识,即使POD被删除,其他成员也可以发现以前的实例;通过DNS实现从节点到节点的迁移。

Kubelet模块

在v1.3中新增了runtime-request-timeout参数,表示在执行pull, logs, exec and attach等请求的超时时间,默认值是2分钟,如果超过2分钟,那么将取消请求,然后进行重试。

增加了exit-on-lock-contention参数,表示在lock-file发生冲突时,kubelet是否退出。

增加了rkt-api-endpoint参数,表示如果使用的容器不是Docker,而是CoreOS的RKT时,RKT入口API。

增加了experimental-nvidia-gpus参数,表示节点上面的NVIDIA GPU数量,目前只支持0和1两个参数,默认是0,表示没有NVIDIA GPU。

增加了kube-api-content-type参数,表示kubelet发送给api-server的请求类型。

增加了eviction-hard参数,表示一个上限值,当达到这个上限值时,就会触发POD回收。

增加了eviction-soft参数,表示一个上限值,当达到这个上限值时,就会触发POD回收的宽限期,如果超过宽限期,那么触发POD回收。

增加了eviction-soft-grace-period参数,表示宽限期,当到达eviction-soft参数设置的上限值,并且超过eviction-soft-grace-period参数设置的宽限期,那么触发POD回收。

增加了eviction-pressure-transition-period参数,kubenete在回收的时候需要获取这个参数设置指定时长内的处理条件。

增加了eviction-max-pod-grace-period参数,表示最大宽限期,参数eviction-soft-grace-period不能够超过这个参数设置的最大值。

增加了pods-per-core参数,运行在kubelet节点上每核CPU上最大的POD数量,如果配置了这个参数,那么这个kubelet节点上运行的POD数量不能超过这个参数值,这个参数可以设置成0,表示取消最大的POD数量限制。

 

Kube-proxy模块

新增了cluster-cidr参数,用来通过linux bridge模式设置kubernetes集群中POD的IP地址范围。

新增了kube-api-content-type参数,表示scheduler模块发送给api-server的请求类型,默认值是“application/vnd.kubernetes.protobuf”。

Kubemark模块

增加了对pods-per-core参数的仿真测试功能。

第三方卷管理插件

在v1.3中增加了vsphere_volume卷管理。通过结构体VSphereConfig可以看出来,kubernetes的vsphere卷管理插件可以直接连接到VMware vCenter上。

type VSphereConfig struct {

       Globalstruct {

              User         string `gcfg:"user"`

              Password     string `gcfg:"password"`

              VCenterIP    string `gcfg:"server"`

              VCenterPort  string `gcfg:"port"`

              InsecureFlagbool   `gcfg:"insecure-flag"`

              Datacenter   string `gcfg:"datacenter"`

              Datastore    string `gcfg:"datastore"`

              WorkingDir   string `gcfg:"working-dir"`

       }

       Networkstruct {

              PublicNetworkstring `gcfg:"public-network"`

       }

       Diskstruct {

              SCSIControllerTypestring `dcfg:"scsicontrollertype"`

       }

}


如果kubernetes是部署在vsphere上面的虚拟机里面,那么可以通过给虚拟机挂载硬盘的方式来给kubernetes添加卷。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
kafka学习之路(二)——提高 消息发送流程 因为Kafka 内在就是 分布式的 ,一个Kafka 集群通常包括多个代理。 为了均衡负载,将话题分成多个分区 , 每个代理存储一或多个分区 。 多个生产者和消费者能够同时生产和获取消息 。     过程: 1.Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面 2.kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关
(上图 2016微软全球合作伙伴大会吸引了144个国家的云解决方案商参会 ) ​2016年7月14日,历时三天的微软全球合作伙伴大会WPC 2016在加拿大多伦多落下帷幕,来自全球144个国家的16,000名软件开发商(ISV)、系统集成商(SI)、增值分销商(VAR)以及新一代云服务商(CSP)等汇聚一堂,他们也是全球最活跃、最顶尖的云计算生态代表。 在本次合作伙伴大会上,微软发布了合作伙伴“红宝书”——《当代微软合作伙伴系列:解决方案商如何在云世纪成功》。这本与IDC合作的书,历时4年完成,每年耗资上

Hadoop使用学习笔记(1) - 2016-07-19 18:07:38

Hadoop使用学习笔记 1.Hadoop安装与基本概念 Hadoop发行版本地址 1.1环境配置需求 本文是用的Hadoop版本是最新的2.7.2发行版。 本文分两个机器环境,分别是研发环境和测试环境: 本地环境配置(配置较好,用于压测): 操作系统: LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0
本文主要描述了朴素贝叶斯分类方法,包括模型导出和学习描述。实例部分总结了《machine learning in action》一书中展示的一个该方法用于句子感情色彩分类的程序。 1 方法概述 学习(参数估计) 实现:朴素贝叶斯下的文本分类 模型概述 朴素贝叶斯方法,是指 朴素:特征条件独立 贝叶斯:基于贝叶斯定理 根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是 p ( y | x ) = p ( x | y ) p ( y ) p ( x ) 。 。 。 。 。 。 ( 1 )
更新记录 2017-07-18 初稿 MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的。数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问题,并提供了很多配置项及扩展点。一个MapReduce的大致数据流如下图: 更详细的MapReduce介绍参考 Hadoop MapReduce原理与实例 。 Mapper的输出排序、然后传送到Reducer的过程,称为shuffle。本文详细地解析shuffle过程,深

Spark的广播和累加器的使用 - 2016-07-18 14:07:48

一、广播变量和累加器 1.1 广播变量: 广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可被用于有效地给每个节点一个大输入数据集的副本。Spark还尝试使用高效地广播算法来分发变量,进而减少通信的开销。 Spark的动作通过一系列的步骤执行,这些步骤由分布式的洗牌操作分开。Spark自动地广播每个步骤每个任务需要的通用数据。这些广播数据被序列化地缓存,在运行任务之前被反序列化出来。这意味着当我们需要在多个阶段的任务之间使用相同的数据,或者以反序列化形式缓存数据是十分
引言: 对于刚接触ES的童鞋,经常搞不明白ES的各个概念的含义。尤其对“索引”二字更是与关系型数据库混淆的不行。本文通过对比关系型数据库,将ES中常见的增、删、改、查操作进行图文呈现。能加深你对ES的理解。同时,也列举了kibana下的图形化展示。 ES Restful API GET、POST、PUT、DELETE、HEAD含义: 1)GET:获取请求对象的当前状态。 2)POST:改变对象的当前状态。 3)PUT:创建一个对象。 4)DELETE:销毁对象。 5)HEAD:请求获取对象的基础信息。 M
设计原理 kafka的 设计 初衷是希望作为一个 统一的信息收集平台 , 能够实时的收集反馈信息 ,并需要 能够支撑较大的数据量 , 且具备良好的容错能力. 持久性 kafka 使用文件存储消息 ,这就直接决定kafka在性能上严重依赖文件系统的本身特性.且无论任何OS下,对文件系统本身的优化几乎没有可能.文件缓存/直接内存映射等是常用的手段.因为kafka是对日志文件进行append操作,因此磁盘检索的开支是较小的;同时 为了减少磁盘写入的次数,broker 会将消息暂时buffer起来,当消息的个数(
前言 人们对人脸识别的研究已经有很长一段时间,起初局限于获取基础的人脸信息,随着机器学习领域的发展,人脸识别的应用更加广泛,已经可以被用于人脸搜索、人脸鉴权等相关应用。本文将针对微软认知服务中提供的人脸识别API的调用方法进行一些初步的讲解。 Face API Face API中提供了3方面功能: 人脸检测 人脸分组 人脸识别(搜索) 首先是人脸检测,主要是指传统概念上的人脸识别功能,识别图片中的人的面孔,给出人脸出现的坐标区域,并根据识别出来的人脸分析出一些基本的信息(例如年龄)。 其次是人脸分组,可以

Hadoop MapReduce原理及实例 - 2016-07-17 17:07:30

MapReduce是用于数据处理的一种编程模型,简单但足够强大,专门为并行处理大数据而设计。 1. 通俗理解MapReduce MapReduce的处理过程分为两个步骤:map和reduce。每个阶段的输入输出都是key-value的形式,key和value的类型可以自行指定。map阶段对切分好的数据进行并行处理,处理结果传输给reduce,由reduce函数完成最后的汇总。 例如从大量历史数据中找出往年最高气温,NCDC公开了过去每一年的所有气温等天气数据的检测,每一行记录一条观测记录,格式如下: 为了