如何以幂等方式创建 k8s 命名空间清单,或者如果命名空间已存在于 AWS CDK 中则忽略错误。
如果我使用清单创建 K8s 命名空间,我经常会收到命名空间已存在的错误:
from custom resource. Message returned: Error: b'Error from server (AlreadyExists): error when creating "/tmp/manifest.yaml": namespaces "dev-advanced" already exists\n
创建清单:
def create_namespace(self) -> KubernetesManifest:
m = self.cluster.add_manifest(
f"ns_{self.tenant.name}",
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": f"{self.tenant.name}",
"labels": {
"name": f"{self.tenant.name}"
}
}
}
)
return m
我遇到了同样的问题并找到了解决方案。 只需创建一个 KubernetesManifest,这就是
addManifest
返回的类型,它只需要选项 overwrite: true
。
我使用手动创建的命名空间执行了以下操作,它起作用了:
const namespace = `test-ns`;
new eks.KubernetesManifest(
this,
`${namespace}-namespace`,
{
cluster,
overwrite: true,
manifest: [
{
apiVersion: 'v1',
kind: 'Namespace',
metadata: {
name: namespace,
labels: {
name: 'test'
}
},
},
]
}
);
我有 pod 在该命名空间下运行,我担心命名空间会被重新创建,但一切正常。