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

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
posted @ 2022-11-26 20:28  西门运维  阅读(97)  评论(0编辑  收藏  举报