接下来,我们再来了解一下相关的知识背景:
- 对于Kubernetes,其抽象了很多种的Resource,比如:Pod, ReplicaSet, ConfigMap, Volumes, Namespace, Roles …. 种类非常繁多,这些东西构成为了Kubernetes的数据模型(点击 Kubernetes Resources 地图 查看其有多复杂)
kubectl
是Kubernetes中的一个客户端命令,操作人员用这个命令来操作Kubernetes。kubectl
会联系到 Kubernetes 的API Server,API Server会联系每个节点上的kubelet
,从而达到控制每个结点。kubectl
主要的工作是处理用户提交的东西(包括,命令行参数,yaml文件等),然后其会把用户提交的这些东西组织成一个数据结构体,然后把其发送给 API Server。- 相关的源代码在
src/k8s.io/cli-runtime/pkg/resource/visitor.go
中(源码链接)
kubectl
的代码比较复杂,不过,其本原理简单来说,它从命令行和yaml文件中获取信息,通过Builder模式并把其转成一系列的资源,最后用 Visitor 模式模式来迭代处理这些Reources。