k8s源码分析——kubectl主要框架

K8S-APIServer源码分析组件构成、原理、程序流程 文章目录一、组件构成二、组件实现原理三、程序流程源码分析 一、组件构成 apiserver 由 3 个组件构成(AggregatorServer、APIServer、APIExtensionServer) AggregatorServer:实现请求的代理转发,将来自用户的请求拦截转发给其他服务器,并且负责整个 APIServer 的服务发现功能 APIServer:负责对内建资源对象请求的一些处理... 阅读详情

代码版本:1.13
先整体的流程走一遍,不需要太过于关系细节,先整体把握整体的流程概念,后续在一步一步分析。


1. main

先从main函数开始,代码在k8s.io\kubernetes\cmd\kubectl\kubectl.go

main函数中调用了NewDefaultKubectlCommand函数,该函数的实现在:
/pkg/kubectl/cmd/cmd.go中:

该函数调用了同在cmd.NewDefaultKubectlCommandWithArgs方法,
这个方法调用了NewKubectlCommand()方法,在这个方法内,构建了一个kubectl子命令集合(通过cobra脚手架的方式),截取部分如下:

上面的这些子命令集合共同构成了kubernetes命令行接口,kubernetes提供的命令行接口如下(可用kubectl -h)查看。
这里以kubectl create -f name举例,调用了NewCmdCreate方法。去掉绑定参数部分的代码,我们可以看到该方法的核心内容是方法o.RunCreate:

RunCreate函数就是create的主要实现。

该段代码所做的事情就是将命令行接收到的参数转化为一个资源的列。它也负责创建一个可以用来迭代访问所有资源的Visitor结构。
这个命令比较复杂,因为它使用了Builder模式的变种,使用独立的函数做各自的数据初始化工作。函数Schema、ContinueOnError、NamespaceParam、DefaultNamespace、FilenameParam、SelectorParam和Flatten都引入了一个指向Builder结构的指针,执行一些对它的修改,并且将这个结构体返回给调用链中的下一个方法来执行这些修改。这些函数都在此文件中:/pkg/kubectl/genericclioptions/resource/builder.go一旦所有的初始化都完成,resource.NewBuilder函数会调用Do函数。这个Do函数很关键,它会返回一个Result对象,并且将执行对资源的创建。Do函数还会创建一个Visitor对象,可以用来遍历所有关联到resource.NewBuilder执行过程的资源。
继续看后续的代码:

调用了r.Visit函数,该函数的实现就是visitor.go中的Visit函数(这里的先不介绍Visit方法,后续在介绍),然后调用了createAndRefresh函数:

这里的代码返回了一个新的Helper对象(这里的先不介绍Helper对象,后续在介绍)。回到createAndRefresh函数中,调用完NewHelper函数,调用了Create函数,在/pkg/kubectl/genericclioptions/resource/helper.go中


可以看到Create函数调用了一个createResource函数。以及实际向API Server发送的用来创建yaml文件描述的资源的REST调用。

整体总结:

  1. 利用第三方库github.com/spf13/cobra构建多级command
  2. 对参数识别,并做一些处理,跳转到响应的处理函数
  3. 利用builder进行构建visitors
  4. 对builder构建的visitors,进行处理

整体上来看,流程还是很清晰的。用一句话来说,就是解析命令行参数,构造RESTful请求向API Server发送请求。

2. visitor

既然说builder是一个visitor模型,那么就先从visitor入手。代码在k8s.io\kubernetes\pkg\kubectl\resource\visitor.go:

查看对应的继承关系,可以看到对应的visitor类型如下:

选择几个常见的来看一下:

2.1 URLVisitor

从上图代码来看很简单,利用http get获取信息,然后构建info,然后继续command中的回调

2.2 FileVisitor

3. Helper

代码在k8s.io\kubernetes\pkg\kubectl\resource\helper.go

对应的接口:

我们已简单的Get为例:

其实就是调用了RESTClient的操作。

参考:
https://blog.youkuaiyun.com/kwame211/article/details/79005726
https://blog.youkuaiyun.com/hahachenchen789/article/details/80607564

深入k8s:kubernetes的StatefulSet控制器及源码分析 然后我们可以启动一个一次性的pod用 nslookup 命令,解析一下 Pod 对应的 Headless Service:$ kubectl run -i --tty --image busybox:1.28.4 dns-test --restart=Never --rm /bin/sh$ nslookup web-0.nginxServer: 10.68.0.2Address 1: 10.68.0.2 kube-dns.kube-system.svc.cluster.localName: 阅读详情

相关推荐

k8s 认证机制源码分析

k8s认证机制源码分析

fengcai_ke的博客 1218

简单易学的Kubernetes(k8s):架构和源码解读

1▲点击上方"DevOps和k8s全栈技术"关注公众号Kubernetes(K8s)为云原生应用提供了强大的管理和编排能力。本文将深入探讨Kubernetes的架构,解剖其核心组件,以帮助读者更好地理解这个复杂而强大的系统。第一部分:K8S基本概念和架构介绍1. Kubernetes基本概念Pods: 是Kubernetes的最小调度单元,可以包含一个或多个容器。Nodes: 是物理或虚拟机器,...

weixin_38320674的博客 3275

K8s源码分析

前言 · 《k8s-1.13版本源码分析》

SHELLCODE_8BIT的博客 1279

Kubernetes源码分析(一)

Kubernetes源码分析,目前还在学习中,全部学习完会重新发布一次

weixin_46253576的博客 2333

【客户案例】母婴行业头部品牌是如何做私域的

各品牌争相跑马圈地,想方设法圈住流量,建立品牌资产;私域运营是一项“重人力”的工作,在传统的品牌运营过程中,私域操盘手经常会由于一对多导致无法兼顾,只能通过提高触达次数的方式加大漏斗,这样难以让每个社群都发挥出应有的价值,甚至还会导致一定程度的用户流失。除了宝妈身份外激发的用户认同感、亲密度外,KOC们作为产品的使用者,自由选择的推品和自由创作的推广文案都更具有真实性、代表性,能够极大程度激发群友们的信任感,从而愿意为产品买单,转化复购水到渠成。不同阶段的宝妈,母婴知识的储存量和经验是不同的,K品牌还会。.

圈量SCRM系统-企微营销工具-私域流量运营软件 948

洛谷P5707 【深基2.例12】上学迟到(c语言)

第一篇题解 题目描述 yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 s(s\le 10000)s(s≤10000) 米,而 yyy 可以以 v(v<10000)v(v<10000) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。 输入格式 两个正整数 s,v,意思已经在题目中给定

cc_love_program的博客 1万+

【原创】k8s源码分析-----kubectl(3)主要框架

本文QQ空间的链接:http://user.qzone.qq.com/29185807/blog/1461123088 本文csdn博文的链接:http://blog.youkuaiyun.com/screscent/article/details/51199351   源码为k8s v1.1.1   1、整体流程 我们先整体的流程走一遍,不用太过于关心看不看的懂,先有个整体的流程概念,后续再一步...

月牙寂 9596

FM1288回声消除芯片调试方案 - 综述

专栏文章概览

优快云mianfeixiazai001的博客 1714

Kubernetes CLI 插件 - kubectl 源码分析与入门教程

Kubernetes CLI 插件 - kubectl 源码分析与入门教程 项目概述 kubectl 是一个基于 Kubernetes 的 CLI 工具插件,它扩展了 kubectl 命令的功能,尽管原链接指向的是一个特定用户的仓库,真实的 kubectl 官方仓库位于 kubernetes/kubectl,但为了符合您的要求,我们将假设您想要了解一个类似自定义扩展或第三方插件的结构与配置说明。...

gitblog_00058的博客 416

simulink的Sine Wave 模块详解

模块是 Simulink 中的一个信号源模块,用于生成正弦波信号。该模块可以根据设定的幅值、频率、相位和偏移量,在仿真过程中产生周期性的正弦波形。模块都能提供强有力的支持。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常实用的工具,适用于需要生成正弦波信号的各种场景。模块的参数,可以进一步增强学习体验。模块参数的影响,下面我们将详细探讨每个参数如何影响仿真结果。

xiaoheshang_123的博客 1052

【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入注意力机制ChannelAttention

本文介绍了在nnunet中加入ChannelAttention的方法,按照本文教的教程,可以快速完成ChannelAttention的加入和自定义模型的跑通。

AI爱好者的博客,分享计算机领域相关知识 5802

Kubernetes 源码分析之 Kubectl

1. 概述 本文以Kubernetes 1.9 进行分析。 Kubernetes 是采用微服务以集群的方式运行,并为用户提供服务。而与外界交互则是通过Apiserver模块向外提供接口支持。 kubectl用户与Kubernetes交互的命令行工具。用户使用kubectl工具调用Apiserver的接口来与Kubernetes服务进行交互。 2. 结构分析 Kubectl 依赖于cobra包构建命令行支持,该包是支持通用的命令行构建库。 如下所示 mds是kubectl中的命令集合,所有命令都会整理在里面

小太阳啊凯的博客 659

SQL面试题——最大连续登陆问题

最大连续登陆是我们计算比较常用的指标,我们可以将其当成一个经典的SQL模型,后面我们也会陆续总结出其他的模型,你还知道其他的比较经典的SQL 吗?欢迎分享,或者你还知道其他的关于计算连续的指标?最大连续登陆重要的是计算思想,最大连续才是关键,登陆只是一个场景,要学会举一反三。

9012

【原创】k8s源码分析-----kubectl(2)Factory

本文QQ空间的链接:http://user.qzone.qq.com/29185807/blog/1461036130 本文csdn博文的链接:http://blog.youkuaiyun.com/screscent/article/details/51188790   源码为k8s v1.1.1   1、原因 首先讲讲为啥,我们要讲解Factory 代码在k8s.io\kubernetes\c...

月牙寂 7993

迅投miniQMT量化交易实战指南:从入门到自动化交易系统构建

迅投miniQMT量化交易实战指南摘要 本文全面介绍迅投miniQMT量化交易系统的开发流程,重点包括: 环境配置:详细说明miniQMT极简模式的安装步骤,包括xtquant库获取、Python版本要求及验证方法 行情数据模块:解析xtdata模块的核心功能,包括: 获取板块分类与股票列表 查询合约基础信息 下载历史K线数据(支持tick、分钟、日线等周期) 交易执行模块:介绍xttrader模块的交易API,涵盖: 账户连接与初始化 订单管理(下单、撤单、查询) 持仓与资产查询 实战开发:提供可直接运行

huanghm88的专栏 667

RK AVS双目融合记录

NOTE] 调试平台双目avs融合调试,需要先保证两个摄像头能正常出图同时出流。使用默认工具测试vi->avs->venc通路是否正常,-a可指定isp效果文件需要开启CONFIG_VIDEO_ROCKCHIP_AVSP和CONFIG_VIDEO_ROCKCHIP_FEC,dts中使能。

mangofu的博客 104

【原创】k8s源码分析-----kubectl(1)api.RESTMapper

  本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460961715 本文csdn博文链接:http://blog.youkuaiyun.com/screscent/article/details/51179485 源码为k8s v1.1.1稳定版本   api. RESTMapper是kube-apiserver和kubectl的基础,在讲解ku...

月牙寂 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Kubernetes源码之kubectl剖析

1.kubectl作用 2.源码模板 3.关键源码剖析

枫 2883

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

视频教程-k8s实战之kubectl-其他

k8s实战之kubectl 毕业于武汉理工大学计算机系,12年开发架构经验,...

weixin_28787479的博客 325

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【技术】从POD创建看Kubernetes源码实现(一)- kubectl

kubernetes的模块比较多,架构复杂,代码量更是庞大,看代码比较麻烦,我们从现实场景出发,从创建POD分析在Kubernetes内部的代码流程,本系列文章从POD创建,整体梳理Kubernetes源码实现,其中本节主要分析**kubectl** 侧的流程实现。

一名运维开发工程师的日常记录 949

kubectl源码分析之create clusterrole

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967 课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。 腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518 第二个视频发布https://edu.youkuaiyun.com/c..

mark's technic world 531

kubectl源码分析之cluster-info

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967 课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。 腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518 第二个视频发布https://edu.youkuaiyun.com/c..

mark's technic world 1098

k8s-kubectl功能源码分析

kubernetes里的命令行接口叫做kubectl,用来控制kubernetes集群,我们要追踪的命令是kubectl create -f-会从指定文件创建k8s资源,我们要创建的资源是使用了nginx基础镜像的单副本pod。首先是kubectl命令的创建,在/cmd/kubectl/kubectl.go文件中,实现了kubectl命令的创建:func main() { rand.Seed(t...

hahachenchen789的博客 1928

Kubernetes 源码分析之 “kubectl get“

操作系统环境 macosKubernetes 版本 1.29go 版本 1.21.4。

博客 49

kubernetes apiserver源码分析二之路由

apiserver的man函数在 k8s.io/kubernetes/cmd/kube-apiserver 目录。 但是大部分源码却在 k8s.io/apiserver cmd 目录下的kube-apiserver只是提供了一些启动参数。 所以路由代码我们要从 k8s.io/apiserver/server目录开始看 pkg目录下 admission 提供了一些权限管理的控制器 apis 是由...

qq_21559191的专栏 631
上一篇: 访问者模式-Visitor Pattern
下一篇: k8s源码分析——kubelet启动分析
cbmljs
博客等级 码龄10年 329粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值