kubectl apply 之后客户端做了什么?

kubectl apply 之后客户端做了什么?

前言

在学习 kubernetes 源码过程中,看到 kubectl apply 源码里面有个很有意思的现象。起初我以为当我们执行 kubectl apply -f deployment.yaml 之后,客户端会把 deployment.yaml 完整地发送给 api-server,然后让 api-server 重新渲染这个 deployment 资源并更替旧的资源。

实际上却并非这样,当我们执行 kubectl apply 的时候,默认是采用的是 client-side apply 模式。客户端会先会生成一个增量的 patch 对象,然后在发送给 api-server 进行 patch 操作。而生成这个增量信息生成的算法,是通过三路数据合并得到的。

本文源码选取

kubectl 的源码本身应该在 git@github.com:kubernetes/kubectl.git 仓库。但是在 kubernetes 大仓里面也有一个用于发布到公共类库的镜像源码。所以我直接下载 kubernetes 大仓 git@github.com:kubernetes/kubernetes.git ,查看源码更加方便一些。我的 kubectl 客户端版本是 v1.21.3,所以就切换到对应标签 v1.21.3

kubectl apply 执行流程

下面用伪代码大概描述下 kubectl apply 的执行流程

# 入口文件 ./staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go
applyOptions.Run() ->
    info = read("deployment.yaml")
    applyOptions.applyOneObject(info) ->  
        # modified 保存为用户传入的资源对象,并且更新 annotation["lac"] 为自己
        modified = info.Object
        modified.annotation["lac"] = info.Object
        # 从 api-server 获取当前资源对象
        info.Get() -
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值