如何将Calico配置为使用自定义子网作为默认子网?

时间:2016-02-10 05:50:06

标签: docker kubernetes project-calico

我已经能够使用Calico在此guide之后在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. 如果没有,那么有没有办法投票给Calico 在默认情况下执行pool remove之前完全初始化 子网?

1 个答案:

答案 0 :(得分:0)

这里的派对有点晚了,但是......

随着最近发布的Calico,这更容易实现自动化。 calico/node容器将默认尝试创建192.168.0.0/16池。如果您想使用其他游泳池,可以执行以下操作:

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

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

  3. 使用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