parent
77a43166a5
commit
2474e348cc
|
@ -1,5 +1,7 @@
|
|||
# 使用自定义资源扩展API
|
||||
|
||||
> **注意:**TPR已经停止维护,kubernetes 1.7及以上版本请使用CRD。
|
||||
|
||||
自定义资源是对Kubernetes API的扩展,kubernetes中的每个资源都是一个API对象的集合,例如我们在YAML文件里定义的那些spec都是对kubernetes中的资源对象的定义,所有的自定义资源可以跟kubernetes中内建的资源一样使用kubectl操作。
|
||||
|
||||
## 自定义资源
|
||||
|
@ -12,7 +14,7 @@ Kubernetes1.6版本中包含一个内建的资源叫做TPR(ThirdPartyResource
|
|||
|
||||
- 修改kubenetes的源码,显然难度比较高,也不太合适
|
||||
- 创建自定义API server并聚合到API中
|
||||
- 1.7以下版本编写CRD,kubernetes1.7及以上版本用CRD
|
||||
- 1.7以下版本编写TPR,kubernetes1.7及以上版本用CRD
|
||||
|
||||
编写自定义资源是扩展kubernetes API的最简单的方式,是否编写自定义资源来扩展API请参考[Should I add a custom resource to my Kubernetes Cluster?](https://kubernetes.io/docs/concepts/api-extension/custom-resources/),行动前请先考虑以下几点:
|
||||
|
||||
|
@ -25,6 +27,37 @@ Kubernetes1.6版本中包含一个内建的资源叫做TPR(ThirdPartyResource
|
|||
|
||||
如果这些都不是你想要的,那么你可以开发一个独立的API。
|
||||
|
||||
## TPR
|
||||
|
||||
**注意:**TPR已经停止维护,kubernetes 1.7及以上版本请使用CRD。
|
||||
|
||||
假如我们要创建一个名为`cron-tab.stable.example.com`的CRD,yaml文件定义如下:
|
||||
|
||||
```yaml
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: ThirdPartyResource
|
||||
metadata:
|
||||
name: cron-tab.stable.example.com
|
||||
description: "A specification of a Pod to run on a cron style schedule"
|
||||
versions:
|
||||
- name: v1
|
||||
```
|
||||
|
||||
然后使用`kubectl create`命令创建该资源,这样就可以创建出一个API端点`/apis/stable.example.com/v1/namespaces/<namespace>/crontabs/...`。
|
||||
|
||||
下面是在[Linkerd](https://linkerd.io)中的一个实际应用,Linkerd中的一个名为namerd的组件使用了TPR,定义如下:
|
||||
|
||||
```yaml
|
||||
---
|
||||
kind: ThirdPartyResource
|
||||
apiVersion: extensions/v1beta1
|
||||
metadata:
|
||||
name: d-tab.l5d.io
|
||||
description: stores dtabs used by namerd
|
||||
versions:
|
||||
- name: v1alpha1
|
||||
```
|
||||
|
||||
### CRD
|
||||
|
||||
参考下面的CRD,resourcedefinition.yaml:
|
||||
|
|
Loading…
Reference in New Issue