首页 > 其他分享 >k8s之Calico

k8s之Calico

时间:2022-10-14 15:44:18浏览次数:65  
标签:Kubernetes Calico calico Pod k8s 节点 路由

   之前接触过calico,但是kubernetes中的calico为什么是calico-kube-controllers、calico-node、calico-typha,为什么和想象的组件不一样。查资料后,知道了为什么,特总结下。

 

一、calico基本实现图

 

 

 

calico的基本组件有etcd、felix、BGP Client、BIDR(bgp route reflector).

Etcd:分布式键值存储,主要负责网络元数据一致性。

Felix:跑在每个节点上,主要负责配置路由及 ACLs(包过滤技术)等信息来确保 endpoint 的连通状态。

BIDR(bgp route reflector)主要负责把 Felix 写入 kernel 的路由信息分发到当前 Calico 网络

 

二、Calico的工作流程

对于控制平面,Felix会监听ECTD中心的存储,从中获取事件,比如说用户在这台机器上一个pod。接着会在这台机器上创建出一个pod,并将其网卡、IP、MAC都设置好,然后在内核的路由表里面写一条,注明这个IP应该到这张网卡。绿色部分是一个标准的路由程序,它会从内核里面获取哪一些IP的路由发生了变化,然后通过标准BGP的路由协议扩散到整个其他的宿主机上,让外界都知道这个IP在这里,你们路由的时候得到这里来。

 

Pod的ip是由cni分配

Kube-controller-manager为每个节点分配一个podCIDR。从podCIDR中的子网值中为节点上的Pod分配IP地址。由于所有节点上的podCIDR是不相交的子网,因此它允许为每个pod分配唯一的IP地址。Kubernetes集群管理员可配置和安装kubelet,容器运行时,网络提供商代理,并在每个节点上分发CNI插件。网络提供商代理启动时,将生成CNI配置。在节点上调度Pod后,kubelet会调用CRI插件来创建Pod。如果是Containerd,则Containered CRI插件会调用CNI配置中指定的CNI插件来配置Pod网络。这些都会使Pod获得IP地址。

 

当容器通过calico进行跨主机通信时,其网络通信模型如下图所示:

 

 

 

 

三、Calico在kubernetes中的工作

 

 

 

calico包括如下重要组件:calico/node,Typha,Felix,etcd,BGP Client,BGP Route Reflector。

calico/node:把Felix,calico client,confd,Bird封装成统一的组件作为统一入口,同时负责给其他的组件做环境的初始化和条件准备。

Felix:主要负责路由配置以及ACLS规则的配置以及下发,它存在在每个node节点上。

etcd:存储各个节点分配的子网信息,可以与kubernetes共用;

BGPClient(BGPD), 主要负责把 Felix写入 kernel的路由信息分发到当前 Calico网络,确保 workload间的通信的有效性;

BGPRoute Reflector(BIRD), 大规模部署时使用,在各个节点之间不是mesh模式,通过一个或者多个 BGPRoute Reflector 来完成集中式的路由分发;当etcd中有新的规则加入时,Route Reflector 就会将新的记录同步。

Typha:在节点数比较多的情况下,Felix可通过Typha直接和Etcd进行数据交互,不

kube-apiserver,既降低其压力。生产环境中实例数建议在3~20之间,随着节点数的增加,按照每个Typha对应200节点计算。

 

calico-kube-controllers的Deployment,部署一个Calico Kubernetes控制器。quay.io/calico/kube-controllers容器包含以下控制器:

l policy controller:监视网络策略和编程Calico策略,它会把Kubernetes的network policies同步到Calico datastore中,该控制器需要有访问Kubernetes API的只读权限,以监听NetworkPolicy事件。 用户在k8s集群中设置了Pod的Network Policy之后,calico-kube-controllers就会自动通知各个Node上的calico-node服务,在宿主机上设置相应的iptables规则,完成Pod间网络访问策略的设置。

l namespace controller:监视命名空间和编程Calico配置文件,它会把Kubernetes的namespace label变化同步到Calico datastore中,该控制器需要有访问Kubernetes API的只读权限,以监听Namespace事件。

l serviceaccount controller:监视服务帐户和编程Calico配置文件,它会把Kubernetes的service account变化同步到Calico datastore中,该控制器需要有访问Kubernetes API的只读权限,以监听ServiceAccount事件。

l workloadendpoint controller:监视pod标签的更改并更新Calico工作负载中的endpoints配置,它会把Kubernetes的pod label变化同步到Calico datastore中,该控制器需要有访问Kubernetes API的只读权限,以监听Pod事件。

l node controller:监视删除Kubernetes nodes节点的操作并从Calico中也删除相应的数据,该控制器需要有访问Kubernetes API的只读权限,以监听Node事件。

 

参考:https://www.jianshu.com/p/54ad345c5516

          https://www.kubernetes.org.cn/4960.html

   https://blog.csdn.net/ccy19910925/article/details/82423452

---当才华撑不起你的野心的时候,请努力!---跑起来。

标签:Kubernetes,Calico,calico,Pod,k8s,节点,路由
From: https://www.cnblogs.com/gaoyuechen/p/16791775.html

相关文章

  • 通过kubeadm搭建k8s集群
    ======通过kubeadm搭建k8s集群======1、版本统一Docker18.09.0---kubeadm-1.14.0-0kubelet-1.14.0-0kubectl-1.14.0-0---k8s.gcr.io/kube-......
  • K8S and Rancher安装
    ========节点1===============================安装dockersudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2sudoyum-config-manager--add-repohttp:/......
  • k8s指令
    k8s指令部署各个常用功能k8s之所以这么火,主要是提供了许多功能,比如服务的快速部署、服务的滚动升级、自动扩缩容、service下的服务负载均衡等功能。下面来动手实操下几个......
  • 【云原生】Elasticsearch + kibana on k8s 讲解与实战操作
    目录一、概述二、Elasticsearch编排部署1)添加源并下载编排部署包2)构建镜像3)修改yaml编排4)开始部署5)测试验证6)elasticsearch-head7)卸载三、Kibana编排部署1)添加源并下载编......
  • k8s中部署三节点zookeeper集群
    目录k8s中部署三节点zookeeper集群一、部署三节点zookeeper集群注意事项二、yaml文件目录k8s中部署三节点zookeeper集群一、部署三节点zookeeper集群注意事项1、使用S......
  • k8s笔记2(Harbor)
    1、安装官方文档通过Helm部署Harbor(​​Harbordocs|DeployingHarborwithHighAvailabilityviaHelm(goharbor.io)​​)----->nodePort方式暴露服务;----->按提示填写c......
  • k8s添加节点报[WARNING SystemVerification]: missing optional cgroups: blkio
    环境信息:   ubuntu-master01 192.1681.195.128   ubuntu-work01  192.168.195.129 k8s版本1.25.2      背景描述:初始环境是一个master......
  • Ceph使用---对接K8s集群使用案例
    一、环境准备让k8s中的pod可以访问ceph中rbd提供的镜像作为存储设备,需要在ceph创建rbd、并且让k8snode节点能够通过ceph的认证。k8s在使用ceph作为......
  • Rancher 快速构建k8s容器管理平台解决方案(图片见原文链接)
    转载自Rancher快速构建k8s容器管理平台解决方案_IT干货的博客-CSDN博客_k8s容器管理平台一、Rancher概述Rancher是企业级多集群Kubernetes管理平台,一个为DevOps团队提......
  • DCOS之K8S的volumes
    docker本身设计之初是用来执行一个app,抑或是一个应用程序,在其运行结束后,将销毁一切数据,但是这明显不是我们想要的,docker也想到了这个,因此其本身提供一个-v的参数,用来将外部......