Calico搭建配置


Calico 是一個純三層的協議,為 OpenStack 虛機和 Docker 容器提供多主機間通信。Calico 不使用重疊網絡比如 flannel 和 libnetwork 重疊網絡驅動,

Calico 依賴 etcd 在不同主機間共享和交換信息,存儲 Calico 網絡狀態。Calico 網絡中每個主機都要運行 Calico 組件,提供容器 interface 管理,動態路由,動態 ACL,報告狀態等功能。

Calico 目前只支持 TCP、UDP、ICMP、ICMPv6 協議。

Calico 包括如下重要組件:Felix,etcd,BGP Client,BGP Route Reflector。

    • Felix:主要負責路由配置以及 ACLS 規則的配置以及下發,它存在在每個 node 節點上。
    • etcd:分布式鍵值存儲,主要負責網絡元數據一致性,確保 Calico 網絡狀態的准確性,可以與 kubernetes 共用。
    • BGPClient(BIRD):主要負責把 Felix 寫入 kernel 的路由信息分發到當前 Calico 網絡,確保 workload 間的通信的有效性。
    • BGPRoute Reflector(BIRD):大規模部署時使用,摒棄所有節點互聯的 mesh 模式,通過一個或者多個 BGPRoute Reflector 來完成集中式的路由分發。

 

首先需要配置NetworkManager

在嘗試使用Calico網絡之前配置NetworkManager

NetworkManager操縱默認網絡命名空間中接口的路由表,其中Calico veth對錨定用於連接到容器。這可能會干擾Calico代理正確路由的能力。

創建以下配置文件 /etc/NetworkManager/conf.d/calico.conf 以防止NetworkManager干擾接口:

[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*

 

修改從官網下載的yaml文件,並根據實際情況進行修改

vim calico.yaml

# 注意修改如下選項:
# etcd 地址

  etcd_endpoints: "https://172.16.1.64:2379,https://172.16.1.65:2379,https://172.16.1.66:2379"
  
 
# etcd 證書路徑
  # If you're using TLS enabled etcd uncomment the following.
  # You must also populate the Secret below with these files. 
    etcd_ca: "/calico-secrets/etcd-ca"  
    etcd_cert: "/calico-secrets/etcd-cert"
    etcd_key: "/calico-secrets/etcd-key"  


# etcd 證書 base64 地址 (執行里面的命令生成的證書 base64 碼,填入里面),填入后記得把括號去除

data:
  etcd-key: (cat /etc/kubernetes/ssl/etcd-key.pem | base64 | tr -d '\n')
  etcd-cert: (cat /etc/kubernetes/ssl/etcd.pem | base64 | tr -d '\n')
  etcd-ca: (cat /etc/kubernetes/ssl/ca.pem | base64 | tr -d '\n')
  
  
# 修改 pods 分配的 IP 段

            - name: CALICO_IPV4POOL_CIDR
              value: "10.254.60.0/18"

 

修改kubelet相應的設置,增加 cni 插件 --network-plugin=cni

Calico安裝為CNI插件。必須通過傳遞--network-plugin=cni參數將kubelet配置為使用CNI網絡(在kubeadm上,這是默認設置。) 

# vim  /etc/systemd/system/kubelet.service

中間配置增加

--network-plugin=cni \

# 重新加載配置

systemctl daemon-reload
systemctl restart kubelet.service
systemctl status kubelet.service

 

二進制安裝calicoctl,部署到一台主master節點即可

# curl -O -L https://github.com/projectcalico/calicoctl/releases/download/v3.3.1/calicoctl
# mv calicoctl /usr/local/bin/
# chmod +x /usr/local/bin/calicoctl

創建 calicoctl.cfg 配置文件

# mkdir /etc/calico
# vim /etc/calico/calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "/root/.kube/config"   #此處配置的calicoctl選擇連接的是Kubernetes API datastore,而不是etcd數據庫,因為是在主節點上進行的安裝,免去了配置TLS的過程 

  

使用calicoctl查看calico狀態

[root@es-60 ~]# calicoctl node status
Calico process is running.

IPv4 BGP status
+---------------+-------------------+-------+----------+-------------+
| PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+---------------+-------------------+-------+----------+-------------+
| 172.17.213.61 | node-to-node mesh | up    | 03:46:37 | Established |
+---------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

[root@es-60 ~]# calicoctl get node #查看已注冊的節點列表
NAME    
es-60   
es-61 

 [root@es-60 ~]# calicoctl get workloadendpoints #查看工作中的負載節點
 WORKLOAD                   NODE   NETWORKS         INTERFACE
 nginx-dm-76d4ccdd7b-f2c2z  es-60  10.254.83.67/32  calidf627dba5ad
 nginx-dm-76d4ccdd7b-w9c9q  es-61  10.254.95.67/32  cali937a51d3ab8

 

收集診斷信息

如果遇到問題可以使用calicoctl命令行工具收集診斷信息。這應該以超級用戶權限運行,例如:
# calicoctl node diags

 

參考鏈接: https://docs.projectcalico.org/v3.3/usage/troubleshooting/#configure-networkmanager

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM