我有一个使用地形头盔提供程序创建的状态集。我需要更新属性(serviceName)的值在状态集,但我一直得到以下错误
Error: failed to replace object: StatefulSet.apps "value" is invalid: spec: Forbidden:
updates to statefulset spec for fields other than 'replicas', 'template', and
'updateStrategy' are forbidden
错误是非常描述性的,我知道serviceName
属性不能改变,但我如何更新这个属性?我完全可以有一个停机时间,也可以让helm删除所有旧的豆荚并创建新的豆荚。
我试过在我的舵图中将force_update
和recreate_pods
属性设置为true
,没有运气。手动删除旧的舵图对我来说不是一个选择。
我维护定制提供程序,与Terraform的helm集成不同,它跟踪Terraform状态下的每个Kubernetes资源。因此,它将显示计划中实际Kubernetes资源的更改。而且,这里最重要的是,当您必须更改不可变字段时,它还将生成销毁并重新创建计划。
这是一项迁移工作,但是您可以通过使用helm template
命令将YAML写入磁盘,然后将Kustomize提供程序指向YAML,从而使其更容易。
作为Kubestack(我维护的用于AKS、EKS和GKE的Terraform框架)的一部分,我还提供了一个便利模块。
你可以这样使用它,让它应用helm template
的输出:
module "example_stateful_set" {
source = "kbst.xyz/catalog/custom-manifests/kustomization"
version = "0.1.0"
configuration_base_key = "default"
configuration = {
default = {
resources = [
"${path.root}/path/to/helm/template/output.yaml"
]
}
}
}
最后,你必须将现有的Kubernetes资源导入到Terraform状态,这样提供商才能开始管理现有的资源。