YurtAppOverrider

背景介绍

多地域多节点池背景下我们已有 YurtAppDaemon 和 YurtAppSet,但它们在配置的个性化能力上有所不足。为了降低耦合度和向后兼容,我们引入了 YurtAppOverrider 来进行个性化渲染,为了简化配置,我们将它的能力区分为基础渲染(镜像和副本数量)和高级渲染(任意字段)。

用户使用

1)部署 OpenYurt

YurtAppOverrider 控制器和 Webhook 集成于 Yurt-Manager 组件,使用前需要安装部署Yurt-Manager,相关操作可以参照部署OpenYurt组件

2) 使用样例

  • 创建一个与现有资源绑定的 YurtAppOverrider
  1. apiVersion: apps.openyurt.io/v1alpha1
  2. kind: YurtAppOverrider
  3. metadata:
  4. namespace: default
  5. name: demo1
  6. subject:
  7. kind: YurtAppSet
  8. name: yurtappset-demo
  9. entries:

以上配置我们先暂时搁置 entries 聚焦于 subject。Subject 字段表明创建出来的 YurtAppOverrider 会与他所在命名空间下指定的 kind 和 name的资源做绑定。

  • 个性化副本数量和镜像(基础渲染)
  1. apiVersion: apps.openyurt.io/v1alpha1
  2. kind: YurtAppOverrider
  3. metadata:
  4. namespace: default
  5. name: demo1
  6. subject:
  7. kind: YurtAppSet
  8. name: yurtappset-demo
  9. entries:
  10. - pools:
  11. beijing
  12. hangzhou
  13. items:
  14. - image:
  15. containerName: nginx
  16. imageClaim: nginx:1.14.2
  17. - replicas: 3
  18. - pools:
  19. shanghai
  20. items:
  21. - image:
  22. containerName: nginx
  23. imageClaim: nginx:1.13.2
  24. - replicas: 5

通过上述配置,我们可以将北京杭州节点池的副本数量配置为3,镜像版本为1.14.2,可以将上海节点池的副本数量配置为5,镜像版本为1.13.2。

  • 实现hostPath的更改(高级渲染)
  1. apiVersion: apps.openyurt.io/v1alpha1
  2. kind: YurtAppOverrider
  3. metadata:
  4. namespace: default
  5. name: demo1
  6. subject:
  7. kind: YurtAppSet
  8. name: yurtappset-demo
  9. entries:
  10. - pools:
  11. hangzhou
  12. patches:
  13. - operation: add
  14. path: /spec/template/spec/volumes/-
  15. value:
  16. name: test-volume
  17. hostPath:
  18. path: /var/lib/docker
  19. type: Directory
  20. - operation: replace
  21. path: /spec/template/spec/containers/0/volumeMounts/-
  22. value:
  23. name: shared-dir
  24. mountPath: /var/lib/docker
  25. - pools:
  26. beijing
  27. patches:
  28. - operation: add
  29. path: /spec/template/spec/volumes/-
  30. value:
  31. name: test-volume
  32. hostPath:
  33. path: /data/logs
  34. type: Directory
  35. - operation: replace
  36. path: /spec/template/spec/containers/0/volumeMounts/-
  37. value:
  38. name: shared-dir
  39. mountPath: /data/logs

通过上述 patches 字段,我们可以实现不同节点池个性化配置 hostpath 的能力。对于每一个 patch 由 operation、path、value 组成,可以对任意字段进行 add、remove、replace 的操作,其语法规则符合 json-patch 的语法。

  • 其他特性
  1. apiVersion: apps.openyurt.io/v1alpha1
  2. kind: YurtAppOverrider
  3. metadata:
  4. namespace: default
  5. name: demo1
  6. subject:
  7. kind: YurtAppSet
  8. name: yurtappset-demo
  9. entries:
  10. - pools:
  11. '*'
  12. '-beijing'
  13. patches:
  14. - operation: add
  15. path: /spec/template/spec/volumes/-
  16. value:
  17. name: foo
  18. configMap:
  19. name: configmap-{{nodepool}}

通过上述配置,我们可以在每一个节点池(除北京节点池)都引入与节点池对应的 configmap。为了简化配置,我们可以使用 '*' 表示所有节点池,可以在节点池名字前加 - 来表示去除该节点池。此外,可以通过{{nodepool}}匹配节点池来做到批量配置。(注:如果使用批量配置,那与之对应的configmap需要遵守一定的命名规则即将上述的{{nodepool}}替换为真正的节点池名)