使用Ansible在kubernetes集群上安装服务时,如何修改清单文件?

tnkciper  于 2023-02-18  发布在  Kubernetes
关注(0)|答案(1)|浏览(106)

我正在尝试使用Ansible自动创建HA集群。
通常我有两个选项来安装负载平衡器(MetalLb),manifest或helm。
我真的很喜欢helm有一个--values选项。这很有用,因为我可以为MetalLB扬声器添加容差,这样我就可以在不想部署作业的节点上部署它们。
当使剧本,我想有一种方法来部署金属LB扬声器与宽容,使他们可以得到部署,但我不想安装在其中一个节点的 Helm 。
在运行剧本时,我可以下载清单文件https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml,但现在我希望能够添加容差。如果不下载yaml文件并自己编辑它,我如何才能完成此操作?helm中类似--values选项的选项会很好

tf7tbtn2

tf7tbtn21#

https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/给出了kustomize如何工作的总体思路:取一些基础,对它们应用一些转换。在大多数情况下,策略合并的行为就像人们期望的那样,这就是您提到的kubectl patch的行为1。但是,在合并中处理数组值是棘手的,所以我更幸运地使用了JSON Patch array add支持,这就是我们在这里使用的

# the contents of "kustomization.yaml" in the current directory
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml
patches:
  - target:
      version: v1
      group: apps
      kind: DaemonSet
      namespace: metallb-system
      name: speaker
    patch: |-
      - op: add
        path: /spec/template/spec/tolerations/-
        value: {"effect":"NoSchedule","key":"example.com/some-taint","operator":"Exists"}

然后,使用kubectl kustomize .,我们看到应用该补丁的结果:

tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
        operator: Exists
      - effect: NoSchedule
        key: node-role.kubernetes.io/control-plane
        operator: Exists
      - effect: NoSchedule
        key: example.com/some-taint
        operator: Exists

显然,如果您想大规模地替换容忍度,您可能会更好地选择战略合并,但考虑到您的问题没有具体说明,并且这种情况是两种情况中较难的一种,我从它开始
FN 1:我看到您提到了kubectl patch,但它是用于编辑现有kubernetes资源的,因此在您将metallb-native.yaml部署到集群中之后,kubectl patch才会为您做任何事情。使用kustomize是一种替代方法,因为它旨在让清单以正确的状态进入集群,而不是稍后再修复它

相关问题