k8s源码分析6-kubectl功能和对象总结
kubectl的职责
- 主要的工作是处理用户提交的东西(包括,命令行参数,yaml文件等)
- 然后其会把用户提交的这些东西组织成一个数据结构体
- 然后把其发送给 API Server
kubectl 的代码原理
- cobra从命令行和yaml文件中获取信息
- 通过Builder模式并把其转成一系列的资源
- 最后用 Visitor 模式来迭代处理这些Reources,实现各类资源对象的解析和校验
- 用RESTClient将Object发送到kube-apiserver
kubectl架构图
- cmd_group
- create流程
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对象
- 文档地址 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/
- D:\go_path\src\github.com\kubernetes\kubernetes\staging\src\k8s.io\apimachinery\pkg\runtime\interfaces.go
// 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
如对您有帮助,支持下呗!
微信
支付宝