Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >APIServer dry-run和kubectl diff

APIServer dry-run和kubectl diff

作者头像
CNCF
发布于 2019-12-05 06:01:35
发布于 2019-12-05 06:01:35
2.3K0
举报
文章被收录于专栏:CNCFCNCF

作者:Antoine Pelisse(Google Cloud,@apelisse)

声明式(Declarative)配置管理,也称为配置即代码(configuration-as-code),是Kubernetes的关键优势之一。它允许用户提交所需的集群状态,并跟踪不同的版本,通过CI/CD管道改进审计和自动化。Apply工作组正在努力修复一些差距,而很高兴地宣布Kubernetes 1.13将服务器端干运行(server-side dry-run)和kubectl diff升级到beta。这两个特性是Kubernetes声明模型的重大改进。

挑战

为了在Kubernetes保持无缝的声明体验,仍然缺少一些部分,我们试图解决其中的一些问题:

  • 虽然编译器(compiler)和质量器(linter)可以很好地检测代码拉取请求中的错误,但Kubernetes配置文件缺少良好的验证。现有的解决方案是运行kubectl apply --dry-run,但这会运行本地(local)干运行而不与服务器通信:它没有服务器验证,也没有通过验证许可控制器(validating admission controller)。例如,自定义资源名称仅在服务器上验证,因此本地干运行无济于事。
  • 由于多种原因,很难知道服务器将如何应用你的对象:
    • 默认会将某些字段设置为潜在的意外值,
    • 变异(mutating)webhook可能会设置字段或更改某些值,
    • 修补(patch)和合并(merge)可能会在对象产生令人惊讶的效果和导致意外。例如,一旦合并,很难知道列表将如何排序。

工作组试图解决这些问题。

APIServer dry-run

实施APIServer dry-run来解决这两个问题:

  • 它允许对apiserver的个别请求标记为“dry-run”,
  • apiserver保证干运行请求不会被持久存储,
  • 请求仍然作为典型请求处理:字段是默认的,对象是经过验证的,它通过验证准入链(validation admission chain),并通过变异准入链(mutating admission chain),然后最终的对象像往常一样返回给用户,没有被持久存储。

虽然动态准入控制器(dynamic admission controller)不应对每个请求产生副作用,但只有当所有准入控制器(admission controller)明确宣布它们没有任何干运行副作用时,才会处理干运行请求。

如何启用它

通过功能门(feature-gate)启用服务器端干运行。现在该功能在1.13中是Beta,默认情况下应该启用,但仍然可以使用kube-apiserver --feature-gates DryRun=true启用/禁用功能。

如果你有动态准入控制器,则可能必须将它们修复为:

  • 当webhook请求中指定dry-run参数时,删除任何副作用,
  • 在admissionregistration.k8s.io/v1beta1.Webhook对象的sideEffects字段中指定,指示该对象在干运行上没有副作用。

如何使用它

你可以使用kubectl apply --server-dry-run在kubectl触发该功能,它将使用dryRun标志装饰请求,并返回应用的对象,如果失败则返回错误。

Kubectl diff

APIServer dry-run很方便,因为它可以让你看到如何处理对象,但如果对象很大,很难准确识别出改变了什么。kubectl diff可以满足这方面的需要,通过显示当前“实时”对象与新“干运行”对象之间的差异。只关注对对象所做的更改,服务器如何合并这些更改,以及变异webhook如何影响输出,这非常方便。

如何使用它

kubectl diff希望与kubectl apply尽可能相似:kubectl diff -f some-resources.yaml将显示yaml文件中资源的差异。甚至可以使用KUBECTL_EXTERNAL_DIFF环境变量来使用他们选择的diff程序,例如:

KUBECTL_EXTERNAL_DIFF=meld kubectl diff -f some-resources.yaml

接下来是什么

工作组仍在忙着改进其中一些事情:

  • 服务器端应用试图通过向字段添加所有者语义来改进应用(apply)方案!它还将改善对CRD和工会的支持!
  • diff中缺少某些kubectl apply可能很有用的功能,例如按标签过滤或显示已修剪资源的功能。
  • 最终,kubectl diff将使用服务器端应用!
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
(译)针对 Kubernetes 工作负载的策略工具
本文所讲的策略,指的是在 Kubernetes 中,阻止特定工作负载进行部署的方法。
崔秀龙
2020/07/20
5570
一文读懂 SuperEdge 分布式健康检查(云端)
杜杨浩,腾讯云高级工程师,热衷于开源、容器和Kubernetes。目前主要从事镜像仓库、Kubernetes集群高可用&备份还原,以及边缘计算相关研发工作。 前言 SuperEdge 介绍 SuperEdge 是基于原生 Kubernetes 的边缘容器管理系统。该系统把云原生能力扩展到边缘侧,很好的实现了云端对边缘端的管理和控制,极大简化了应用从云端部署到边缘端的过程。同时 SuperEdge 设计了分布式健康检查机制规避了云边网络不稳定造成的大量pod迁移和重建,保证了服务的稳定。 SuperEdge
腾讯云原生
2021/03/23
1.1K0
Kubernetes 中的策略管理正在改变
在前面的一篇文章中我们介绍了如何实现 Kubernetes 的策略管理。下面,让我们了解一下 Kubernetes 开发中的内置策略管理工具。译自 Policy Management in Kubernetes is Changing。
云云众生s
2024/03/28
1090
Kubernetes 中的策略管理正在改变
kubernetes-policy-controller项目搬家啦
kubernetes-policy-controller项目之前是在github.com/Azure托管。这里也简单介绍项目背景。
CNCF
2019/12/05
5310
kubernetes-policy-controller项目搬家啦
kubernetes高级之动态准入控制
动态准入控制器文档介绍了如何使用标准的,插件式的准入控制器.但是,但是由于以下原因,插件式的准入控制器在一些场景下并不灵活:
kubernetes中文社区
2019/07/08
1.2K0
Kubernetes 准入控制器详解!
Kubernetes 准入控制器是什么?为什么要使用准入控制器?如何使用?本文对 Kubernetes 准入控制器进行了详细解释。
CNCF
2021/02/23
7510
Kubernetes 准入控制器详解!
玩转K8S AdmissionWebhook
ice yao 喜欢看动漫的IT男,还是火影迷、海贼迷、死神迷、妖尾迷、全职猎人迷、龙珠迷、网球王子迷 环境准备 OS: CentOS 7.5 Kubernetes v1.11.6 Etcd 3.3.10 Docker 1.13.1 什么是AdmissionWebhook 什么是AdmissionWebhook,就要先了解K8S中的admission controller, 按照官方的解释是: admission controller是拦截(经过身份验证)API Server请求的网关,并且可以
腾讯云TStack
2019/06/14
18.7K2
玩转K8S AdmissionWebhook
关于 Kubernetes中Admission Controllers(准入控制器) 的一些认知
人活着就是为了忍受摧残,一直到死,想明了这一点,一切事情都能泰然处之 —— 王小波《黄金时代》
山河已无恙
2023/12/13
3780
关于 Kubernetes中Admission Controllers(准入控制器) 的一些认知
使用 Kyverno 进行 Kubernetes 策略管理
OPA 的 Gatekeeper 以及 Kyverno 是 CNCF 的两个头部策略管理项目,两个产品各有千秋,前面我们已经学习了 Gatekeeper,接下来我们就来了解下如何使用 Kyverno。
我是阳明
2022/04/06
5880
使用 Kyverno 进行 Kubernetes 策略管理
​Kubernetes 两步验证 - 使用 Serverless 实现动态准入控制
Admission 是在用户执行 kubectl 通过认证之后,在将资源持久化到 ETCD 之前的步骤,Kubernetes 为了将这部分逻辑解耦,通过调用 Webhook 的方式来实现用户自定义业务逻辑的补充。而以上过程,都是在用户执行 kuberctl 并等待 API Server 同步返回结果的生命周期内。
腾讯云 CODING
2020/07/01
1.2K0
​Kubernetes 两步验证 - 使用 Serverless 实现动态准入控制
为什么需要 Kubernetes 准入控制器
Kubernetes 准入控制器是集群管理必要功能。这些控制器主要在后台工作,并且许多可以作为编译插件使用,它可以极大地提高部署的安全性。
用户5166556
2023/03/18
6570
为什么需要 Kubernetes 准入控制器
深入理解AdmissionWebhook part - 1
Admission webhooks 是接收准入请求http回调并且进行处理,分为两种类型:
有点技术
2020/07/14
1.2K0
理清 Kubernetes 中的准入控制(Admission Controller)
在我之前发布的文章 《云原生时代下的容器镜像安全》(系列)中,我提到过 Kubernetes 集群的核心组件 -- kube-apiserver,它允许来自终端用户或集群的各组件与之进行通信(例如,查询、创建、修改或删除 Kubernetes 资源)。
Jintao Zhang
2021/12/01
9070
理清 Kubernetes 中的准入控制(Admission Controller)
K8s Pod 创建埋点处理(Mutating Admission Webhook)
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
山河已无恙
2023/11/27
6350
K8s Pod 创建埋点处理(Mutating  Admission Webhook)
mac 上学习k8s系列(28)webhook
类似于http框架的middleware,我们希望在k8s的每个用户操作之前,之后在切面上做一些权限校验或者数据的修改,webhook是一个不错的选择。它挂在apiserver的准入链上,分为两种:验证性质的准入 Webhook (Validating Admission Webhook) 和 修改性质的准入 Webhook (Mutating Admission Webhook)。实现一个webhook,分为两步:1,起一个webhook server,2把webhook资源挂载到apiserver的链路上。
golangLeetcode
2022/08/02
9100
[云原生]深入了解K8S准入控制
本篇我们将聚焦于 kube-apiserver 请求处理过程中一个很重要的部分 -- 准入控制器(Admission Controller)
宇宙无敌暴龙战士之心悦大王
2023/03/22
9790
使用Aggregated APIServer的方式构建API服务
工作中需要以kubernetes原生的方式构建API接口服务,并将构建出的API接口直接聚合到kubernetes的apiserver服务上。本周花了不少时间研究这个,这里记录一下。
jeremyxu
2019/07/24
3.8K0
成为K8S专家必修之路
当2021年容器化 云原生炙手可热时代, 但凡想在云市场分一杯羹的云厂商,K8S已经成为所有云厂商重要的ALL in 项目之一。如果在2016年的时候 你是否还对Kubernetes 这么重要 是否swarm更加优秀,当时我研发老板对我说的,这个东西没有什么用,你好好做DBA 做好运维就可以的时候。我已经敏锐感知到运维时代在变化 。
怀朔
2022/05/29
1.3K0
成为K8S专家必修之路
Kubernetes 策略管理引擎 - Kyverno
Kyverno 是来自 Nirmata 的开源项目,后来捐赠给了 CNCF。Kyverno 是一个具有验证和变异能力的 Kubernetes 策略引擎,但是它还有生成资源的功能,还加入了 API 对象查询的能力。Kyverno 原本就是为 Kubernetes 编写的,除了对象生成功能之外,无需专用语言即可编写策略。
我是阳明
2024/04/19
3900
Kubernetes 策略管理引擎 - Kyverno
容器运行时安全是什么?
Kubernetes API 服务器是 Kubernetes 控制平面的核心组件之一。该组件暴露 Kubernetes API,并充当控制平面的前端。当用户或进程与 Kubernetes 交互时,API 服务器处理这些请求,并验证和配置 Kubernetes API 对象,如部署或命名空间。当然,这是在 Kubernetes Admission Controllers 的帮助下进行的。那么,什么是 Admission Controller?
灵雀云
2023/10/28
2760
容器运行时安全是什么?
推荐阅读
相关推荐
(译)针对 Kubernetes 工作负载的策略工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文