开局一张图

image.png

Group

定义:

  1. type APIGroup struct {
  2. TypeMeta `json:",inline"`
  3. Name string `json:"name" protobuf:"bytes,1,opt,name=name"`
  4. Versions []GroupVersionForDiscovery `json:"versions" protobuf:"bytes,2,rep,name=versions"`
  5. PreferredVersion GroupVersionForDiscovery `json:"preferredVersion,omitempty" protobuf:"bytes,3,opt,name=preferredVersion"`
  6. ServerAddressByClientCIDRs []ServerAddressByClientCIDR `json:"serverAddressByClientCIDRs,omitempty" protobuf:"bytes,4,rep,name=serverAddressByClientCIDRs"`
  7. }

两种资源组:有组名资源组和无组名资源组(也叫核心资源组Core Groups) Pod属于无组名资源组

image.png

Version

定义:

  1. type APIVersions struct {
  2. TypeMeta `json:",inline"`
  3. Versions []string `json:"versions" protobuf:"bytes,1,rep,name=versions"`
  4. ServerAddressByClientCIDRs []ServerAddressByClientCIDR `json:"serverAddressByClientCIDRs" protobuf:"bytes,2,rep,name=serverAddressByClientCIDRs"`
  5. }

kubernetes的版本分为三种

Alpha:内部测试版本,如v1alpha1 Beta:经历了官方和社区测试的相对稳定版,如v1beta1 Stable:正式发布版,如v1、v2

Resource

定义:

  1. type APIResource struct {
  2. Name string `json:"name" protobuf:"bytes,1,opt,name=name"`
  3. SingularName string `json:"singularName" protobuf:"bytes,6,opt,name=singularName"`
  4. Namespaced bool `json:"namespaced" protobuf:"varint,2,opt,name=namespaced"`
  5. Group string `json:"group,omitempty" protobuf:"bytes,8,opt,name=group"`
  6. Version string `json:"version,omitempty" protobuf:"bytes,9,opt,name=version"`
  7. Kind string `json:"kind" protobuf:"bytes,3,opt,name=kind"`
  8. Verbs Verbs `json:"verbs" protobuf:"bytes,4,opt,name=verbs"`
  9. ShortNames []string `json:"shortNames,omitempty" protobuf:"bytes,5,rep,name=shortNames"`
  10. Categories []string `json:"categories,omitempty" protobuf:"bytes,7,rep,name=categories"`
  11. StorageVersionHash string `json:"storageVersionHash,omitempty" protobuf:"bytes,10,opt,name=storageVersionHash"`
  12. }

Resource资源在kubernetes中很重要。常见的有Pod、Service、Deployment

  • 在kubernetes环境被实例化的资源既资源对象(ResourceObject)
  • 资源被分为持久性与非持久性。持久性如Deployment,创建后会在etcd中保存,非持久性如Pod
  • kubernetes为资源准备了8种操作:create、delete、deletecollection、get、list、patch、update、watch,每一种资源都支持其中的一部分
  • 资源支持以命名空间(namespace)进行隔离
  • 资源对象描述文件在日常操作中频繁用到,一共由五部分组成:apiVersion、kind、metadata、spec、status(该部分是用来反应当前资源对象状态的) ``` 开启 status 子资源,添加这个注释之后就可以对 status进行更新操作了 //+kubebuilder:subresource:status

为 kubectl get xxx 添加一列,这个挺有用的 //+kubebuilder:printcolumn

  1. <a name="ZKia6"></a>
  2. ### 资源有关的操作
  3. ```shell
  4. # 查看所有资源
  5. kubectl api-resources -o wide
  6. # 只看apps这个group下面的资源
  7. kubectl api-resources --api-group apps -o wide
  8. # 查看所有Group和Version
  9. kubectl api-versions