我有多堆栈CDK设置,核心堆栈包含VPC和EKS。部署一些 s3 存储桶和 k8s 命名空间以及一些其他租户相关部署的“租户”堆栈。
cdk ls
正在按预期显示所有现有堆栈。
- eks-stack
- tenant-a
- tenant-b
如果我只想部署一个租户堆栈,我会运行
cdk deploy tenant-a
。令我惊讶的是,我看到在我的 k8s 集群中部署了 tenant-1
和 tenant-b
的清单,而不仅仅是我预期的 tenant-a
。
CLI 上的 CDK 输出正确输出
tenant-a
已部署。 CLI 输出没有提及u2063tenant-b
。我还看到大多数更改确实发生在 eks 堆栈内部,而不是租户堆栈中,因为我正在使用参考资料。
# app.py
# ...
# EKS
efs_stack = EksStack(
app,
"eks-stack",
stack_log_level="INFO",
)
# Tenant Specific stacks
tenants = ['tenant-a', 'tenant-b']
for tenant in tenants:
tenant_stack = TenantStack(
app,
f"tenant-stack-{tenant}",
stack_log_level="INFO",
cluster=eks_cluster_stack.eks_cluster,
tenant=tenant,
)
--
#
# Inside TenantStack.py a manifest is applied to k8s
self.cluster.add_manifest(f'db-job-{self.tenant}', {
"apiVersion": 'v1',
"kind": 'Pod',
"metadata": {"name": 'mypod'},
"spec": {
"serviceAccountName": "bootstrap-db-job-access-ssm",
"containers": [
{
"name": 'hello',
"image": 'amazon/aws-cli',
"command": 'magic stuff ....'
}
]
}
})
我发现当我通过属性和引用导入集群时 例如。
self.cluster = Cluster.from_cluster_attributes(
self, 'cluster', cluster_name=cluster,
open_id_connect_provider=eks_open_id_connect_provider,
kubectl_role_arn=kubectl_role
我可以分别部署租户堆栈
a
和 b
,并且我的核心 eks
堆栈保持不变。现在我已经阅读了建议使用引用,因为 CDK 可以自动创建依赖项并检测循环依赖项。
有一个选项可以排除依赖项。使用
cdk deploy tenant-a --exclusively
不部署依赖项。