Kubernetes 1.18:关键创新概述

昨天,3月25日,Kubernetes 下一个发行版-1.18。根据我们博客的传统,我们谈论新版本中最重要的变化。



用于制备这种材料的信息是从官方公布采取的Kubernetes增强跟踪表更新日志-1.18,从审查SUSESysdig,以及相关的问题,引入请求,Kubernetes增强提案(KEP)...

Kubernetes 1.18发行版获得了官方徽标,其实质被简化为与大型强子对撞机进行比较。就像LHC是来自世界各地成千上万的科学家工作的结果一样,Kubernetes聚集了来自数百个组织的成千上万的开发人员,他们全都致力于一个共同的事业:“全面改善云计算”。



同时,SUSE团队的狂热者根据发行说明为K8s 1.18进行的3412次提交准备了一个词云。结果是这样的:



现在-用用户更容易理解的形式来说明这些词的含义。

排程器


这里的主要创新-它概述了计划 (计划概要)。与以下事实有关:集群中的工作负载变得越异构,就越早需要采用不同的方法进行规划。

为了解决这个问题,作者建议调度程序使用分配给调度程序并称为配置文件的不同配置。首先,kube-scheduler扫描所有可用的配置文件并将其保存在注册表中。如果配置中没有配置文件,则选择默认选项(default-scheduler)。将Pod放入队列后,kube-scheduler会在考虑所选调度程序的情况下执行其计划。

基于谓词萨米策略规划(PodFitsResourcesPodMatchNodeSelectorPodToleratesNodeTaints等)和优先级(SelectorSpreadPriorityInterPodAffinityPriorityMostRequestedPriorityEvenPodsSpreadPriority等等)。该实现立即提供了一个插件系统,以便通过一个特殊的框架添加所有配置文件。

当前的配置结构(即将更改):

type KubeSchedulerConfiguration struct {
   ...
   SchedulerName string
   AlgorithmSource SchedulerAlgorithmSource
   HardPodAffinitySymmetricWeight
   Plugins *Plugins
   PluginConfig []PluginConfig
   ...
}

...以及示例设置:

profiles:
  - schedulerName: 'default-scheduler'
    pluginConfig:
      - name: 'InterPodAffinity'
      - args:
          hadPodAffinityWeight: <value>

到下一版K8s为止,该功能预计将转换为beta版本,并且还会再进行两次稳定化。有关调度程序配置文件的更多信息,请参见相应的KEP

alpha版本状态中出现的另一项创新是均匀分配吊舱默认规则(即使是吊舱摊开)。当前,规则已定义在Pod 并附加到Pod,现在可以在集群级别设置全局配置了。详细信息在KEP中 同时,Pod拓扑扩展功能本身(其功能门- )允许将Pod均匀地分布在多区域群集中,现已转换为Beta状态。 PodSpec

EvenPodsSpread

此外,还宣布了基于污染的逐出的稳定性,旨在在某些条件发生时向节点添加污点。该功能首次出现在已经遥远的K8s 1.8版本中,并在1.13版中获得Beta状态

HPA自定义缩放速度


一年多来,Kubernetes增强炉(即HPA)中一个有趣的功能称为可配置的HPA刻度速度已逐渐消失。可自定义的水平缩放速度。(顺便说一下,我们的同胞开始了它的开发。)在新版本中,它被带到了大规模使用的第一阶段-它在alpha版本中可用。

如您所知,Kubernetes中的水平Pod自动缩放器(HPA)可以缩放支持子资源的任何资源的Pod数量scale基于CPU消耗或其他指标。一项新功能使您可以双向控制缩放的速度。到目前为止,可以非常有限地对其进行调节(例如,参见集群的全局参数--horizontal-pod-autoscaler-downscale-stabilization-window)。

引入自定义扩展速度的主要动机是能够根据其对业务的重要性来分离集群工作负载的能力,从而允许一个应用程序(处理最关键的流量)在大小上具有最大的增长速度,而汇总速度则较低(因为可能发生新的负载爆发),对于其他人-根据其他条件进行缩放(以节省资金等)。

拟议的解决方案-为HPA配置添加对象behavior,可让您定义用于控制两个方向(scaleUpscaleDown缩放的规则例如,配置:

behavior:
  scaleUp:
    policies:
    - type: percent
      value: 900%

...将导致以下事实:当前运行的吊舱数量将增加900%。也就是说,如果应用程序以单个pod开头,那么如果有必要进行扩展,它将开始以1→10→100→1000的比例增长。有关

其他示例和实现的详细信息,请参阅KEP


支持大页面fiche的总KEP)的进展:Alpha版本在容器级别实现了对这些页面的支持以及请求不同大小页面的能力。

拓扑管理器节点 Node of Topology Manager旨在统一用于微调Kubernetes中不同组件的硬件资源分配的方法,该方法已转换为beta状态。

测试版的状态,可将其引入功能K8s 1.16 PodOverhead(拟议的间接费用计算机制)。

Kubectl


添加kubectl调试命令其KEP Alpha版本,该命令开发了“ 临时容器的概念。它们最初是在K8s 1.16中引入的,目的是简化Pod中的调试。为此,在正确的窗格中,启动一个临时(即,居住时间短)容器,其中包含调试所需的工具。正如我们已经写过的,此命令与到目前为止存在的kubectl-debug插件基本相同(其回顾)。

职位说明kubectl debug

% kubectl help debug
Execute a container in a pod.

Examples:
  # Start an interactive debugging session with a debian image
  kubectl debug mypod --image=debian

  # Run a debugging session in the same namespace as target container 'myapp'
  # (Useful for debugging other containers when shareProcessNamespace is false)
  kubectl debug mypod --target=myapp

Options:
  -a, --attach=true: Automatically attach to container once created
  -c, --container='': Container name.
  -i, --stdin=true: Pass stdin to the container
  --image='': Required. Container image to use for debug container.
  --target='': Target processes in this container name.
  -t, --tty=true: Stdin is a TTY

Usage:
  kubectl debug (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]

Use "kubectl options" for a list of global command-line options (applies to all commands).

另一个团队kubectl diff最初在K8s 1.9中出现,并在1.13中获得Beta身份,最终宣布稳定。顾名思义,它允许您比较群集配置。在出现稳定功能时,她出现了KEP,并已在所有相关文档Kubernetes网站上进行了更新

此外,标志kubectl --dry运行 添加的(不同的价值的支持clientservernone),它可以让你尽量只在客户端或服务器执行命令。对于其在服务器端的实施,实施了对主要团队的支持,包括createapplypatch和其他人。

网路


Ingress资源开始从当前的API(extensions.v1beta1networking.v1beta1转移到,然后在视图中进行了稳定处理v1为此计划了一系列更改(KEP)。目前-作为K8s 1.18 beta版的一部分,Ingress收到了两项重大创新

  • 一个新的领域pathType,允许您通过的路径进行比较什么原则来确定(ExactPrefixImplementationSpecific;最后行为在被确定IngressClass);
  • 新的资源IngressClass和一个新的(不可变)字段Class中的定义IngressSpec,其指示哪个控制器实现入口资源。这些更改将替换注释kubernetes.io/ingress.class,不赞成使用该注释

对于许多网络功能,可用性状态已提高:

  • NodeLocal DNS Cache插件已变得稳定,通过使用代理对群集节点上的DNS缓存提高了DNS性能;
  • 稳定并声明一个字段AppProtocol该字段定义每个服务端口(资源ServicePortEndpointPort的应用程序协议
  • IPv6支持被认为足够稳定,可以将其转换为Beta版本。
  • 默认情况下,现在激活了EndpointSlices API(作为Beta版的一部分),可以作为常规端点的更可扩展和可扩展的替代品。

储存设施


Alpha版本为创建带有预加载数据的卷提供了基础- 通用数据填充器KEP)。作为一种实现,建议削弱现场验证,DataSource以便任意类型的对象都可以是数据源。

在将卷绑定安装到容器之前,将根据value更改其所有文件的权限fsGroup。此操作可能会中断某些应用程序(例如,流行的DBMS)的工作,并且还会花费很多时间(对于大容量-超过1 TB)。新字段PermissionChangePolicyPersistentVolumeClaimVolumeSource 让您决定是否要更改卷的内容所有者。当前实现是Alpha版本,详细信息在KEP

对于对象SecretsConfigMaps 添加了一个 新字段immutable,使它们不可变。通常,这些对象在pod中用作文件。这些文件中的任何快速更改(大约一分钟后)都将应用于安装文件的所有Pod。因此,机密或ConfigMap的不成功更新会导致整个应用程序失败。

该功能的作者说,即使在采用推荐方法更新应用程序的情况下(通过滚动升级),也可能由于不成功更新现有机密/ ConfigMap而导致失败。此外,在性能和可伸缩性方面,更新正在运行的Pod中的这些对象的过程非常复杂(每个kubelet被迫不断监视每个唯一的秘密/ CM)。

在当前的实现中,这样做是为了在将资源标记为不可更改之后,不能回滚此更改。您不仅需要删除对象并再次创建它,还需要重新创建使用远程机密的容器。版本-alpha,详细信息-KEP

稳定声明:

  • 克隆 PVC;
  • 使用诸如持久卷之类的块原始设备(而非网络)的能力
  • 支持 CSI中的块原始设备;
  • 传输有关该卷正在请求的pod的信息。

其他变化


Kubernetes 1.18的其他创新(有关更完整的列表,请参阅CHANGELOG

  • JWT- Kubernetes service accounts (KSA) Kubernetes API. - . API- discovery-, OIDC (OpenID Connect) . OIDC (.. K8s-) KCA-, API-. — KEP.
  • - Priority and Fairness API (KEP) — API- ( max-in-flight). . ( FlowSchema) ( RequestPriority). kubectl:

    kind: RequestPriority
    meta:
      name: workload-high
    spec:
      assuredConcurrencyShares: 30
      queues: 128
      handSize: 6
      queueLengthLimit: 100
    
    kind: FlowSchema
    meta:
      name: workload-high
    spec:
      requestPriority:
        name: workload-high
      flowDistinguisher:
        source: namespace
        # no transformation in this case
      match:
      - and: # users using kubectl
        - notPatternMatch:
          field: user
          pattern: system:serviceaccount:.*
  • CertificateSigningRequest API, x509- Certificate Authority. K8s 1.4 - 1.6.
  • 使用Windows时,进行了许多重大改进:CRI-ContainerD支持(alpha版),RuntimeClass实现(alpha版),通过CSI代理支持的CSI驱动程序(alpha版),稳定的GMSA版本(组托管服务帐户)和RunAsUserName

依赖关系更改:

  • kubeadm中的CoreDNS版本-1.6.7;
  • cri-tools 1.17.0;
  • CNI(容器网络接口)0.8.5,Calico 3.8.4;
  • 使用的Go版本是1.13.8。

什么过时了?


  • API服务器不用服务过时的API:所有的资源apps/v1beta1extensions/v1beta1移动的需求apps/v1,并注意特定资源daemonsetsdeploymentsreplicasetsnetworkpoliciespodsecuritypolicies
  • 指标的端点/metrics/resource/v1alpha1 不提供服务 -现在改为/metrics/resource
  • 除负责生成Pod的生成外,所有团队生成器均已kubectl run 删除

聚苯乙烯


另请参阅我们的博客:


All Articles