0

我已经能够按照本指南使用 Calico 在 CoreOS 上创建 Kubernetes 集群。

如指南中所述,Calico 创建了一个默认子网 192.168.0.0/16。服务启动后,我可以通过运行以下命令重新定义子网:

$ export ETCD_AUTHORITY=127.0.0.1:6666
$ calicoctl pool remove 192.168.0.0/16
$ calicoctl pool add 10.244.0.0/16 --nat-outgoing

一切都很好。但是,我想使用 cloud-config 自动执行上述操作。我曾尝试使用 OneShot 服务来执行命令,但它只能部分工作。新子网 10.244.0.0/16 已添加,但 192.168.0.0/16 未删除。错误是:

calicoctl[1330]: 192.168.0.0/16 is not a configured pool.

pool remove我猜这是因为执行命令时尚未创建默认子网。

所以我的问题是:

  1. 有没有办法配置 Calico,使其使用我的自定义子网作为默认子网?
  2. 如果没有,那么有没有办法pool remove在默认子网上执行之前轮询 Calico 以完全初始化?
4

1 回答 1

0

在这里聚会有点晚了,但是...

使用 Calico 的最新版本,这更容易实现自动化。默认情况下,calico/node容器将尝试创建192.168.0.0/16池。如果您想使用不同的池,您可以执行以下操作:

  1. 在运行calico/node容器之前,创建您要使用的池。

  2. calico/node使用 NO_DEFAULT_POOLS=true 环境变量启动容器。这会阻止容器创建默认池。(https://github.com/projectcalico/calico-containers/blob/master/calico_node/filesystem/startup.py#L259

使用 cloud-init / systemd,我会做这样的事情:

[Service]
Environment=ETCD_AUTHORITY=$private_ipv4:2379
Environment=NO_DEFAULT_POOLS=true
ExecStartPre=/opt/bin/calicoctl pool add <your ipv4 pool> --nat-outgoing
ExecStartPre=/opt/bin/calicoctl pool add <your ipv6 pool>
ExecStart=/opt/bin/calicoctl node --ip=$private_ipv4 --detach=false
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
于 2016-04-22T16:22:13.237 回答