如何使用AWS CDK以幂等方式创建kubernetes命名空间

问题描述 投票:0回答:1

如何以幂等方式创建 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
aws-cloudformation amazon-eks aws-cdk
1个回答
0
投票

我遇到了同样的问题并找到了解决方案。 只需创建一个 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 在该命名空间下运行,我担心命名空间会被重新创建,但一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.