官网:https://docs.projectcalico.org/about/about-calico

安装 Calicoctl

下载二进制文件

  1. curl -O -L https://github.com/projectcalico/calicoctl/releases/download/v3.7.2/calicoctl

拷贝到环境变量

  1. chmod +x calicoctl
  2. cp calicoctl /usr/bin/

查看节点状态

  1. calicoctl node status

配置 Calicoctl

  1. mkdir -p /etc/calico
  2. vim /etc/calico/calicoctl.cfg
  1. apiVersion: projectcalico.org/v3
  2. kind: CalicoAPIConfig
  3. metadata:
  4. spec:
  5. etcdEndpoints: https://172.17.230.35:2379
  6. etcdKeyFile: /etc/kubernetes/pki/etcd/peer.key
  7. etcdCertFile: /etc/kubernetes/pki/etcd/peer.crt
  8. etcdCACertFile: /etc/kubernetes/pki/etcd/ca.crt

查看节点详细信息

  1. calicoctl get nodes -o wide

处理报错

  • 节点状态报错

    1. calicoctl node status
    2. ...
    3. Calico process is running.
    4. IPv4 BGP status
    5. +---------------+-------------------+-------+----------+--------------------------------+
    6. | PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
    7. +---------------+-------------------+-------+----------+--------------------------------+
    8. | 172.17.230.33 | node-to-node mesh | start | 04:04:33 | Connect Socket: Connection |
    9. | | | | | reset by peer |
    10. | 172.17.230.36 | node-to-node mesh | start | 04:04:33 | OpenSent Socket: Connection |
    11. | | | | | reset by peer |
    12. +---------------+-------------------+-------+----------+--------------------------------+
    13. IPv6 BGP status
    14. No IPv6 peers found.
  • 节点详情

    1. calicoctl get nodes -o wide
    2. ...
    3. NAME ASN IPV4 IPV6
    4. k8s-master (unknown) 172.20.0.1/16
    5. k8s-node1-ct (unknown) 172.17.230.33/20
    6. k8s-node2-ub (unknown) 172.17.230.36/20
  • 日志

    1. kubectl -n kube-system logs calico-node-qhk44
    2. ...
    3. bird: BGP: Unexpected connect from unknown address 172.17.230.35
  • 总结
    出现这个问题的原因是系统里存在多个 br 网桥, 导致 Calico 无法智能识别主机物理网卡

  • 解决方案
    增加指定的自动探测网卡 vim calico-etcd.yaml ```
  • name: IP_AUTODETECTION_METHOD value: “interface=eth0” ```

  • 使用 kubectl delete -f calico-etcd.yaml 命令删除之前的节点, 重新创建 kubectl apply -f calico-etcd.yaml