首页 > 编程语言 >k8s源码分析6-kubectl功能和对象总结

k8s源码分析6-kubectl功能和对象总结

时间:2022-11-26 20:35:05浏览次数:71  
标签:kubectl Kubernetes 对象 Object rest 源码 k8s

kubectl的职责

  • 主要的工作是处理用户提交的东西(包括,命令行参数,yaml文件等)
  • 然后其会把用户提交的这些东西组织成一个数据结构体
  • 然后把其发送给 API Server

kubectl 的代码原理

  • cobra从命令行和yaml文件中获取信息
  • 通过Builder模式并把其转成一系列的资源
  • 最后用 Visitor 模式来迭代处理这些Reources,实现各类资源对象的解析和校验
  • 用RESTClient将Object发送到kube-apiserver

kubectl架构图

  • cmd_groupkubectl_cmd_group.png
  • create流程kubectl_create.png

kubectl中的核心对象

RESTClient 和k8s-api通信的restful-client

  • 位置 k8s.io\cli-runtime\pkg\resource\interfaces.go
type RESTClient interface {
	Get() *rest.Request
	Post() *rest.Request
	Patch(types.PatchType) *rest.Request
	Delete() *rest.Request
	Put() *rest.Request
}

Object k8s对象

// Object interface must be supported by all API types registered with Scheme. Since objects in a scheme are
// expected to be serialized to the wire, the interface an Object must provide to the Scheme allows
// serializers to set the kind, version, and group the object is represented as. An Object may choose
// to return a no-op ObjectKindAccessor in cases where it is not expected to be serialized.
type Object interface {
	GetObjectKind() schema.ObjectKind
	DeepCopyObject() Object
}

作用

  • Kubernetes 对象 是持久化的实体
  • Kubernetes 使用这些实体去表示整个集群的状态。特别地,它们描述了如下信息:
    • 哪些容器化应用在运行(以及在哪些节点上)
    • 可以被应用使用的资源
    • 关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略
  • 操作 Kubernetes 对象,无论是创建、修改,或者删除, 需要使用 Kubernetes API

期望状态

  • Kubernetes 对象是 “目标性记录” 一旦创建对象,Kubernetes 系统将持续工作以确保对象存在
  • 通过创建对象,本质上是在告知 Kubernetes 系统,所需要的集群工作负载看起来是什么样子的, 这就是 Kubernetes 集群的 期望状态(Desired State)

对象规约(Spec)与状态(Status)

  • 几乎每个 Kubernetes 对象包含两个嵌套的对象字段,它们负责管理对象的配置: 对象 spec(规约) 和 对象 status(状态)
  • 对于具有 spec 的对象,你必须在创建对象时设置其内容,描述你希望对象所具有的特征: 期望状态(Desired State) 。
  • status 描述了对象的 当前状态(Current State),它是由 Kubernetes 系统和组件 设置并更新的。在任何时刻,Kubernetes 控制平面 都一直积极地管理着对象的实际状态,以使之与期望状态相匹配。

yaml中的必须字段

  • 在想要创建的 Kubernetes 对象对应的 .yaml 文件中,需要配置如下的字段:
    • apiVersion - 创建该对象所使用的 Kubernetes API 的版本
    • kind - 想要创建的对象的类别
    • metadata - 帮助唯一性标识对象的一些数据,包括一个 name 字符串、UID 和可选的 namespace

标签:kubectl,Kubernetes,对象,Object,rest,源码,k8s
From: https://www.cnblogs.com/Dev0ps/p/16928240.html

相关文章

  • 实验三·bdev原理和源码分析
    任务配置bdev运行环境运行hello_bdev程序并分析源码通过bdev接口写入数据并读取Bdev是在物理设备上的进一步抽象,物理层有NVM、NVMeOF、CEPHRBD等,通过bdev向......
  • 实验四·blobstore原理和源码分析
    实验任务学习Blob基本原理完成hello_blob程序运行修改底层bdev为nvmeBlob构建在bdev之上,是对数据存储的进一步抽象,类似于文件,但是不具备文件POSIX接口,可近似按文件形......
  • easylogging++的那些事(四)源码分析(二)日志记录宏(一)CLOG宏(四)日志信息保存
    目录writer类的输出运算符writer类的流操控符el::base::MessageBuilder类CLOG宏接口调用流程图在上一篇中我们分析完了CLOG宏日志输出的流程,在结尾的时候我们提......
  • 在CentOS编译Git源码
    Git是一个免费的开源分布式版本控制系统,旨在处理从小到小到的所有内容具有速度和效率的超大型项目。Git易于学习,占用空间很小,性能快如闪电。它超越了Subversion,CVS,Per......
  • CentOS7源码安装Nginx1.22
    CentOS7源码安装Nginx1.22一、安装下载源码包:wgethttp://nginx.org/download/nginx-1.22.1.tar.gz安装依赖:yum-yinstallgccmakepcrepcre-developensslope......
  • K8s——简介
    Kubernetes是一个自动化的容器编排平台,它负责应用的部署、应用的弹性以及应用的管理,这些都是基于容器的。容器部署时代容器类似于VM,但是具有被放宽的隔离属性,可以在应......
  • K8s系列---【什么是Service?】
    什么是Service?1.作用Service为一组pod提供服务发现与负载均衡,当有pod可用时,Service的服务发现能感知到,当外部请求进来时,Service的负载均衡功能能够轮流分发流量。并且能......
  • 【云原生】K8S master节点更换IP以及master高可用故障模拟测试
    目录一、前言二、配置多个master节点1)节点信息1)安装docker或containerd2)安装kubeadm,kubelet和kubectl1、配置k8syum源2、修改sandbox_image镜像源3、配置containerdcg......
  • 搭建K8S kubernetes
    一、安装要求1.CPU内核>=22.内存>=2G3.Docker与kubernetes版本匹配二、安装前配置1.分别设置计算机名Hostnamectlset-hostname–staticmasterHostnamectlset-h......
  • K8S静态PV,PVC持久化
    1.安装NFS客户端yuminstallnfs-utilsshowmount-e192.168.137.31#测试2.创建PV,PVCkubectlcreate-fpv.yamlkubectlcreate-fpvc.yaml3.查看结果kubec......