APIService

APIService是用来表示一个特定的GroupVersion的中的server,它的结构定义位于代码staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go中。

下面是一个APIService的示例配置:

  1. apiVersion: apiregistration.k8s.io/v1beta1
  2. kind: APIService
  3. metadata:
  4. name: v1alpha1.custom-metrics.metrics.k8s.io
  5. spec:
  6. insecureSkipTLSVerify: true
  7. group: custom-metrics.metrics.k8s.io
  8. groupPriorityMinimum: 1000
  9. versionPriority: 5
  10. service:
  11. name: api
  12. namespace: custom-metrics
  13. version: v1alpha1

APIService详解

使用apiregistration.k8s.io/v1beta1 版本的APIService,在metadata.name中定义该API的名字。

使用上面的yaml的创建v1alpha1.custom-metrics.metrics.k8s.io APIService。

  • insecureSkipTLSVerify:当与该服务通信时,禁用TLS证书认证。强加建议不要设置这个参数,默认为 false。应该使用CABundle代替。
  • service:与该APIService通信时引用的service,其中要注明service的名字和所属的namespace,如果为空的话,则所有的服务都会该API groupversion将在本地443端口处理所有通信。
  • groupPriorityMinimum:该组API的处理优先级,主要排序是基于groupPriorityMinimum,该数字越大表明优先级越高,客户端就会与其通信处理请求。次要排序是基于字母表顺序,例如v1.bar比v1.foo的优先级更高。
  • versionPriority:VersionPriority控制其组内的API版本的顺序。必须大于零。主要排序基于VersionPriority,从最高到最低(20大于10)排序。次要排序是基于对象名称的字母比较。 (v1.foo在v1.bar之前)由于它们都是在一个组内,因此数字可能很小,一般都小于10。

查看我们使用上面的yaml文件创建的APIService。

  1. kubectl get apiservice v1alpha1.custom-metrics.metrics.k8s.io -o yaml
  1. apiVersion: apiregistration.k8s.io/v1beta1
  2. kind: APIService
  3. metadata:
  4. creationTimestamp: 2017-12-14T08:27:35Z
  5. name: v1alpha1.custom-metrics.metrics.k8s.io
  6. resourceVersion: "35194598"
  7. selfLink: /apis/apiregistration.k8s.io/v1beta1/apiservices/v1alpha1.custom-metrics.metrics.k8s.io
  8. uid: a31a3412-e0a8-11e7-9fa4-f4e9d49f8ed0
  9. spec:
  10. caBundle: null
  11. group: custom-metrics.metrics.k8s.io
  12. groupPriorityMinimum: 1000
  13. insecureSkipTLSVerify: true
  14. service:
  15. name: api
  16. namespace: custom-metrics
  17. version: v1alpha1
  18. versionPriority: 5
  19. status:
  20. conditions:
  21. - lastTransitionTime: 2017-12-14T08:27:38Z
  22. message: all checks passed
  23. reason: Passed
  24. status: "True"
  25. type: Available

查看集群支持的APISerivce

作为Kubernetes中的一种资源对象,可以使用kubectl get apiservice来查看。

例如查看集群中所有的APIService:

  1. $ kubectl get apiservice
  2. NAME AGE
  3. v1. 2d
  4. v1.authentication.k8s.io 2d
  5. v1.authorization.k8s.io 2d
  6. v1.autoscaling 2d
  7. v1.batch 2d
  8. v1.monitoring.coreos.com 1d
  9. v1.networking.k8s.io 2d
  10. v1.rbac.authorization.k8s.io 2d
  11. v1.storage.k8s.io 2d
  12. v1alpha1.custom-metrics.metrics.k8s.io 2h
  13. v1beta1.apiextensions.k8s.io 2d
  14. v1beta1.apps 2d
  15. v1beta1.authentication.k8s.io 2d
  16. v1beta1.authorization.k8s.io 2d
  17. v1beta1.batch 2d
  18. v1beta1.certificates.k8s.io 2d
  19. v1beta1.extensions 2d
  20. v1beta1.policy 2d
  21. v1beta1.rbac.authorization.k8s.io 2d
  22. v1beta1.storage.k8s.io 2d
  23. v1beta2.apps 2d
  24. v2beta1.autoscaling 2d

另外查看当前kubernetes集群支持的API版本还可以使用kubectl api-versions

  1. $ kubectl api-versions
  2. apiextensions.k8s.io/v1beta1
  3. apiregistration.k8s.io/v1beta1
  4. apps/v1beta1
  5. apps/v1beta2
  6. authentication.k8s.io/v1
  7. authentication.k8s.io/v1beta1
  8. authorization.k8s.io/v1
  9. authorization.k8s.io/v1beta1
  10. autoscaling/v1
  11. autoscaling/v2beta1
  12. batch/v1
  13. batch/v1beta1
  14. certificates.k8s.io/v1beta1
  15. custom-metrics.metrics.k8s.io/v1alpha1
  16. extensions/v1beta1
  17. monitoring.coreos.com/v1
  18. networking.k8s.io/v1
  19. policy/v1beta1
  20. rbac.authorization.k8s.io/v1
  21. rbac.authorization.k8s.io/v1beta1
  22. storage.k8s.io/v1
  23. storage.k8s.io/v1beta1
  24. v1