我正在按照此博客文章在现有 AWS 基础设施中创建 Kubernetes: https://insights.ubuntu.com/2017/02/08/automate-the-deployment-of-kubernetes-in-existing-aws-infrastructure/
$ juju --version
2.2.6-xenial-amd64
我的不同之处:
- 我没有使用 cloudformation,因为 VPC 已经存在(VPC 中有 3x priv + 3x pub 子网)
- 我创建了一个新模型,因为我想使用模型构建多个集群(每个环境一个)。
我正在尝试定义 AWS 中存在的公共子网和私有子网(大约在页面的中间位置),但是收到的错误消息却没有什么帮助。
$ juju add-model dev-k8s
$ juju add-space public
$ juju add-space private
$ juju add-subnet subnet-12345678 private
ERROR cannot add subnet: no subnets defined
这个错误信息看起来非常像先有鸡还是先有蛋。如果没有子网,我就无法添加子网?
我已经查看过文档: https://jujucharms.com/docs/2.2/commands#add-subnet
Usage: juju add-subnet [options] <CIDR>|<provider-id> <space> [<zone1> <zone2> ...]
所以我尝试了各种方法,但结果都差不多
$ juju add-subnet 1.2.3.4/20 private us-east-1a
ERROR cannot add subnet: no subnets defined
$ juju add-subnet 1.2.3.4/20 private subnet-12345678
ERROR cannot add subnet: no subnets defined
$ juju add-subnet subnet-12345678 private us-east-1a
ERROR cannot add subnet: no subnets defined
... + many more that stretch the usage definition above
奇怪的是,在新的 dev-k8s 模型中没有填充子网
$ juju switch dev-k8s && juju list-subnets
pre-ops-k8s:admin/default -> pre-ops-k8s:admin/dev-k8s
No subnets to display.
但默认模型包含所有子网
$ juju switch default && juju list-subnets
pre-ops-k8s:admin/dev-k8s -> pre-ops-k8s:admin/default
subnets:
1.2.3.4/20:
type: ipv4
provider-id: subnet-12345678
provider-network-id: vpc-12345678
status: in-use
space: ""
zones:
- us-east-1a
... cropped output
答案1
事实证明,整个问题都围绕着这样一个事实:该模型没有连接到任何 VPC,并且在创建时没有继承任何没有任何参数的东西。
运行以下命令自动填充子网:
juju add-model <common-model-name> aws/us-east-1 --config vpc-id=vpc-12345678 --config vpc-id-force=true
由于一个错误,空格的使用仍然存在复杂性:
这使得空间无法通过添加子网进行编辑。由于空间无法删除,这进一步复杂化了这一点。因此,空间实际上是一次性写入的,但如果您使用旧空间中存在的子网创建新空间,则新空间可能会从一个空间中窃取子网。是的,这可能会破坏旧空间,而不会为您提供重建损坏空间的任何选项。
要创建具有多个子网的空间,您必须在原始创建空间调用中指定所有子网
juju add-space <space name> 1.2.3.4/32 2.3.4.5/32 3.4.5.6/32
如果您在创建空间时搞砸了,您要么需要重建模型来清除空间,要么采用新名称。