首页 > 其他分享 >Calico 安装配置

Calico 安装配置

时间:2024-07-09 13:52:51浏览次数:16  
标签:calicoctl 配置 calico BGP yaml 安装 Calico 路由

架构

简单说一下 Calico 架构,Calico 是一个基于三层的数据中心网络方案,可作为 CNI 插件为运行于 Kubernetes 中的容器提供基于 TCP/IP 三层的网络通信方案,也可与 OpenStack 这种 IaaS 云架构集成,利用 BGP,IPIP 等协议为工作负载提供网络联通功能,能够提供高效可控的 VM、容器、物理机之间的通信。

图片

Calico的核心组件包括:

  • Felix,Calico Agent,运行在每个容器宿主节点上,主要负责配置路由、ACL等信息来确保容器的联通状态;
  • Etcd ,分布式的 Key/Value 存储,负责网络元数据一致性,确保 Calico 网络状态的准确性;
  • BGP Client(Bird) ,主要把 Felix 写入 Kernel 的路由信息分发到 Calico 网络,保证容器间的通信有效性;
  • BGP Route Reflector (简称:RR ),路由反射器,默认 Calico 工作在 node-mesh 模式,所有节点互相连接, node-mesh 模式在小规模部署时工作是没有问题的,当大规模部署时,连接数会非常大,消耗过多资源,利用 BGP RR ,可以避免这种情况的发生,通过一个或者多个 BGP RR 来完成集中式的路由分发,减少对网络资源的消耗以及提高 Calico 工作效率、稳定性。

其中名词概念:

  • Endpoint :接入到Calico网络中的网卡称为Endpoint (这里即POD)
  • AS :网络自治系统,通过BGP协议与其它的AS交换路由信息 (自治网络拥有独立交换机、路由器等,可独立运转)
  • IBGP:AS内部的BGP_Speaker,与相同AS的ibgp、ebgp交换路由信息
  • EBGP:AS边界的BGP_Speaker,与相同AS的ibgp、以及不同AS的ebgp交换路由信息
  • BGP:端口 179,BIRD 建立TCP/179的连接

网络模式

vxlan

略,不走bgp

IPIP

也走 bgp

IPIP 需要内核模块 ipip.ko 使用命令查看内核是否加载IPIP模块lsmod | grep ipip ;使用命令modprobe ipip 加载

img

BGP

img

安装配置

选择与k8s 兼容的最新版本

1)下载 yaml 文件

curl https://docs.projectcalico.org/archive/v3.18/manifests/calico.yaml -O
 

2)修改 yaml 文件

  • 修改镜像地址为 内部仓库地址

    sed -i 's/docker.io/xxx.xxx.xxx/g' calico.yaml
    
     
  • CALICO_IPV4POOL_CIDR 参数 为 实际 POD 的CIDR

  • 在 value: "autodetect 后新增以下两行参数

    - name: IP_AUTODETECTION_METHOD
      value: "interface=bond4,eth0"
    
     

3)apply yaml 文件进行安装

kubectl apply -f calico.yaml
 

4)生产 yaml 文件

bgpconfig.yaml, 关闭 fullmesh,LOCAL_AS、service cidr 根据实际情况修改

apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  nodeToNodeMeshEnabled: false
  asNumber: {{ LOCAL_AS }}
  serviceClusterIPs:
  - cidr: xx.xx.xx.xx/xx
 

peer.yaml,建立全局 bgppeer,和交互机建联,tor模式,PEER_IP,AS_NUMBER 根据实际情况修改

apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: peer
spec:
  peerIP: {{ PEER_IP }}
  asNumber: {{ AS_NUMBER }}
 

calico-nat,指定 ippool,kube_pods_subnet 为 pod 的 CIDR

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
 name: default-ipv4-ippool
spec:
  cidr: {{ kube_pods_subnet }}
  natOutgoing: false
 

5) 下载 calicoctl 二进制文件

curl -L https://github.com/projectcalico/calicoctl/releases/download/v3.18.6/calicoctl -o /usr/bin/calicoctl
chmod +x /usr/bin/calicoctl
 

6) 生成 calicoclt 的配置文件

mkdir -p /etc/calico/
 

vim /etc/calico/calicoctl.cfg

apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "/root/.kube/config"
 

7)calicoctl apply 一些规则

calicoctl apply -f bgpconfig.yaml && calicoctl apply -f peer.yaml && calicoctl apply -f calico-nat.yaml
 

版本升级

升级官方文档:Upgrade Calico on k8sopen in new window

总共分三步,备份,下载新的yaml文件和calicoctl 二进制文件,按原来的安装方式进行修改,最后 apply 进行升级

tips:calico-node 可能会缺少权限,根据报错添加权限即可

监控

开启监控

calicoctl patch felixconfiguration default  --patch '{"spec":{"prometheusMetricsEnabled": true}}'
calicoctl get felixConfiguration default -o yaml
 

新增 service 和 servicemonitor 用于 监控发现 servicemonitor.yaml

apiVersion: v1
kind: Service
metadata:
  name: felix-metrics-svc
  namespace: kube-system
  labels:
    k8s-app: calico
spec:
  clusterIP: None
  selector:
    k8s-app: calico-node
  ports:
  - name: calico-metrics
    port: 9091
    targetPort: 9091
    protocol: TCP

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: calico-prometheus-servicemonitor
  namespace: kube-system
  labels:
    name: calico-prometheus-servicemonitor
    release: monitoring
spec:
  selector:
    matchLabels:
      k8s-app: calico
  namespaceSelector:
    matchNames:
    - kube-system
  endpoints:
  - port: calico-metrics
 

apply

kubectl apply -f servicemonitor.yaml
 

最后 grafana dashboard 进行导入即可

TOR 模式 改为 RR 路由反射模式

减少交换机压力

删除旧的 BGPPeer ,建立新的 bgppeer 即可,拿一台 node 节点 和所有其他 node 建联,然后 这台 node 再和交互机建联即可

Node 跨网段时,调整 IPIP 封装策略为 CrossSubnet, 设置后发现 跨网段的node 中pod 到master 不通,ipip又改为 Never了

⚠️ 同一组 rr 设置相同的 routeReflectorClusterID,要手动修改

tips: nat 和 ipip mode 的改变,最终生效 再 calicoctl get ippools 、可以kubectl edit ippools.crd.projectcalico.org

参考:https://rainwu.cn/archives/calico-rr-guide

注意事项

路由黑洞问题

要解决路由黑洞问题问题,首先,除了对整个Calico 的IP Pool总量进行监控外,还需要对可用的IP Block进行监控,确保不会出现IP Block不够分的情况,或者或者IP地址Block借用的情况;

ToDo 高级功能:带宽限制、固定IP、+ 插件固定IP组

 

标签:calicoctl,配置,calico,BGP,yaml,安装,Calico,路由
From: https://www.cnblogs.com/david-cloud/p/18291673

相关文章

  • Helm 安装配置
    安装下载二进制文件exporthelmversion=3.7.2wgethttps://get.helm.sh/helm-v${helmversion}-linux-amd64.tar.gztar-xvfhelm-v${helmversion}-linux-amd64.tar.gzmvlinux-amd64/helm/usr/bin/ 设置补全命令helmcompletionbash#将输出的文件拷贝到``/etc/......
  • 4.6 pipeline 生产配置实例
    pipeline配置java项目pipeline{agent{label'slave'}options{timestamps()disableConcurrentBuilds()buildDiscarder(logRotator(numToKeepStr:'20',daysToKee......
  • 2.2 war 包安装 jenkins
    war包安装jenkins参考:https://www.jenkins.io/doc/pipeline/tour/getting-started/要求:java8或java11下载jenkinswgethttp://mirrors.jenkins.io/war-stable/latest/jenkins.warwgethttps://mirrors.huaweicloud.com/jenkins/war/2.250/jenkins.war 运行jenkinsj......
  • 2.1 yum 安装 jenkins
    yum安装jenkins官方文档:https://pkg.jenkins.io/redhat-stable/http://mirrors.jenkins-ci.org/openinnewwindow可选择Jenkins长期支持版本或Jenkins每周版本进行安装。长期支持版本每12周从定期发布流中选择一个LTS(长期支持)openinnewwindow发布作为该时间段的稳定发......
  • legged gym(包含isaac gym)丝滑安装教程
    LeggedGym(包含IsaacGym)安装教程——Ubuntu22.04安装IsaacGym安装leggedgym2.1.安装pytorch和cuda:2.2.安装rsl_r2.3.安装legged_gym参考了官方包括网上一堆教程,结合自己遇到的坑,整理了一个比较顺畅的流程,基础环境(例如miniconda或者CUDA)配好的情况下按照本教程......
  • 实践1-使用 ansible 快速安装 k8s 机器
    推荐:kubeadm安装用:kubesprayopeninnewwindow二进制安装用:kubeaszopeninnewwindow此安装方式参考上面两个项目创建,如果刚开始搭建,直接使用上面的安装方式即可,可根据实际情况微调项目地址:https://github.com/clay-wangzhi/ansible-collection-k8s 相关支持支......
  • 2 Ansible Inventory配置详解
    在使用Ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单。AnsibleInventory是包含静态Inventory和动态Inventory两部分的,静态Inventory指的是在文件中指定的主机和组,动态Inventory......
  • 如何解决数据库配置问题
    识别配置问题收集错误信息:首先,收集数据库配置过程中出现的所有错误信息和日志。这些信息通常会在数据库服务器的日志文件、系统日志或应用程序日志中记录。分析问题性质:分析错误信息以确定问题的性质。这可能涉及检查数据库连接问题、性能瓶颈、配置参数不当等。检查配置文......
  • linux 上安装FTP : vsftpd (含常见问题:读取目录列表失败,的处理)
    服务器上有时候需要安装ftp以便调试或给不懂使用服务器命令的同学更新文件 1、安装vsftpdyumupdateyuminstallvsftpd2、编辑配置文件确保以下配置的值和下面一致anonymous_enable=NOlocal_enable=YESwrite_enable=YESchroot_local_user=YES这些配置......
  • 【yarn】安装与配置——(秒懂yarn安装用法)
    yarn安装与配置技术文档1.yarn的安装1.1使用npm安装Yarn1.2使用安装脚本1.3通过Homebrew安装(macOS)1.4通过Chocolatey安装(Windows)1.5通过安装包管理器(Linux)2.配置Yarn2.1配置镜像源2.2配置缓存目录2.3查看配置3.初始化项目4.常用命令4.......