欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 常用知识点

常用知识点

2024/10/23 19:28:33 来源:https://blog.csdn.net/2401_83784772/article/details/140965885  浏览:    关键词:常用知识点

目录

K8S的架构

K8S创建Pod资源对象的工作流程

K8S的三种网络

K8S的三种接口

VLAN和VXLAN的区别

flannel的三种模式

flannel的UDP模式

flannel的VXLAN模式

calico的IPIP模式

calico的BGP模式(本质就是通过路由规则来实现Pod之间的通信)

flannel 与 calico 的区别

service资源的4种类型

service的端口


K8S的架构

K8S有 master 和 worker node 两类节点

master节点(负责K8S集群的管理和资源调度等运维工作)

  • apiserver:是所有服务请求的统一访问入口,负责接收、验证和转发请求
  • controller-manager:控制器管理器,负责管理K8S各种资源对象的控制器;并通过apiserver监控整个K8S集群的资源状态,并确保资源始终处于预期的工作状态
  • scheduler:资源调度器,负责Pod资源的调度,通过调度算法(预选/优选策略)为待部署的Pod选择最适合的node节点
  • etcd:K8S集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8S集群所有配置和状态信息,仅apiserver拥有访问和读写权限

worker node节点(负责运行工作负载,即容器应用)

  • kubelet:接收apiserver的指令,创建和管理Pod及其容器的生命周期;定期收集节点的资源使用情况,并上报给apiserver
  • kube-proxy:负责实现Pod网络代理,维护网络规则和四层负载均衡
  • 容器运行时/容器引擎:运行容器

K8S创建Pod资源对象的工作流程

  1. 用户通过客户端发送创建Pod的请求给apiserver
  2. apiserver接收到请求并进行认证后,将请求信息存储到etcd中
  3. controller-manager通过list-watch监听到apiserver的指令后,会根据请求信息中的资料配置模板创建Pod资源
  4. scheduler也通过list-watch监听到apiserver的指令后,开始调度新创建的Pod,会根据调度算法的预选策略和优选策略选择出最适合的node节点来部署Pod
  5. node节点上的kubelet通过list-watch监听到apiserver的指令后,会在指定的节点上创建Pod,并管理其容器的生命周期
  6. 用户还可以通过apiserver在kube-proxy上配置相应的网络规则,实现Pod网络代理和负载均衡

K8S的三种网络

  • 节点网络(nodeIP):物理网卡的IP实现节点间的通信
  • Pod网络 (podIP):Pod与Pod之间可通过Pod的IP相互通信
  • Service网络 (clusterIP):在K8S集群内部可通过service资源的clusterIP实现对Pod集群的代理转发

K8S的三种接口

  • CRI   容器运行时接口      docker   containerd   podman   cri-o
  • CSI   容器存储接口        nfs   ceph   oss   s3
  • CNI   容器网络接口        flannel   calico   cilium

VLAN和VXLAN的区别

  1. 使用场景不同:VLAN主要用于在交换机上逻辑划分广播域,还可以配合STP生成树协议阻塞路径接口,从而避免产生环路和广播风暴,VXLAN用作于叠加网络,可以将数据帧封装成UDP报文,再通过网络层传输到其它网络,从而实现虚拟大二层网络的通信
  2. VXLAN支持更多的二层网络:VXLAN最多可支持 2^24 个;VLAN最多支持 2^12 个(4096-2)
  3. VXLAN可以防止物理交换机MAC表耗尽:VLAN需要在交换机的MAC表中记录MAC地址;VXLAN采用隧道机制,MAC地址不记录在交换机的MAC表中

flannel的三种模式

UDP

出现最早的模式,但是性能最差,基于flanneld应用程序实现数据包的封装/解封装(ip in udp

VXLAN

lannel的默认模式,也是推荐使用的模式,性能比UDP模式更好,基于内核实现数据帧的封装/解封装(mac in udp),且配置简单使用方便

HOST-GW

性能最好的模式,但是配置复杂,还不能跨网段通信

flannel的UDP模式

  1. 原始数据包从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel0设备
  2. flanneld进程会监听flannel0设备收到的数据,并会将原始数据包封装到UDP报文里
  3. flanneld进程会根据在etcd中维护的路由表查到目标Pod所在的nodeIP,并对UDP报文封装nodeIP头部、MAC头部等,再通过节点网络发往目标node节点
  4. UDP报文通过8285端口送达到目标node节点的flanneld服务进程解封装获取原始数据包,数据包再根据本地路由通过flannel0发送到cni0网桥,再由cni0发送到目标Pod容器

flannel的VXLAN模式

  1. 原始数据包从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel.1设备
  2. flannel.1设备收到数据包后,在内核态给数据包添加以太网头部和VXLAN头部,再将此数据帧封装到UDP报文里
  3. flannel.1通过查询本机的 FDB 表获取目标节点的IP地址,再通过节点网络将UDP报文发往目标node节点
  4. UDP报文通过8472端口送达到目标node节点的flannel.1设备并在内核态解封装获取原始数据包,数据包再根据本地路由发送到cni0网桥,再由cni0发送到目标Pod容器

calico的IPIP模式

  1. 原始数据包从源主机的Pod容器发出,经过 veth pair 设备送达到tunl0设备
  2. tunl0设备收到数据包后,由内核将原始数据包封装到node节点网络的IP报文里,再根据Felix维护的路由规则通过节点网络发往目标node节点
  3. IP数据包到达目标节点的tunl0设备后,由内核解封装获取原始数据包,数据报文再根据本地路由经过 veth pair 设备发送到目标Pod容器

calico的BGP模式(本质就是通过路由规则来实现Pod之间的通信)

每个Pod都有一个 veth pair 设置,一端接入Pod,另一端接入宿主机网络空间,并设置了一条路由规则
这些路由规则都是 Felix 维护的,由 BIRD(BGP Client) 基于 BGP 动态路由协议分发给其它节点

1)原始数据包从源主机的Pod容器发出,经过 veth pair 设备送达到宿主机网络空间,再根据Felix维护的路由规则通过物理网卡发往目标node节点
2)目标node节点收到数据包后,会根据本地路由经过 veth pair 设备送达到目标 Pod 容器

flannel 与 calico 的区别

flannel: UDP  VXLAN  HOST-GW

  • 默认网段:10.244.0.0/16
  • 通常会采用VXLAN模式,由于用的是叠加网络、IP隧道方式传输数据,传输过程中需要额外的封包和解包,对性能有一点的影响。
  • flannel简单易用。但是不具备复杂的网络策略配置能力,性能方面表现一般。

calico:  IPIP  VXLAN  BGP  CrossSubnet(混合模式)

  • 默认网段:192.168.0.0/16
  • 使用IPIP或VXLAN模式可以实现跨网段通信,但是传输过程中需要额外的封包和解包,对性能有一点的影响。
  • 使用BGP模式会把每个节点看作成路由器,通过Felix、BIRD组件来维护和分发路由规则,可实现直接通过路由规则直接发送数据包到目标主机,传输中不需要额外的封包和解包,因此性能较好。但是不能跨网段通信。
  • calico性能较高,具有丰富的网络策略配置能力,还能固定IP,功能更全面。但是维护起来较为复杂。

总结:flannel适合规模较小,网络要求简单的K8S集群。calico适合规模较大,需要设置网络策略,固定 PodIP 的K8S集群。

service资源的4种类型

  • ClusterIP      默认的service资源类型,可提供clusterIP:port供K8S集群内部访问service关联的Pod端点
  • NodePort       会在每个node节点上都开启相同的端口,K8S集群外部/内部用户都可以通过nodeIP:nodePort来访问service关联的Pod端点
  • LoadBalancer   需要借助第三方的云负载均衡器,将请求分发到K8S集群的node节点上,再通过nodeIP:nodePort来访问service关联的Pod端点
  • ExternalName   相当于给一个外部服务地址(域名/IP)做映射,K8S集群内的Pod可以通过这个service访问相关的外部服务

service是通过 标签选择器 匹配Pod的标签,来自动发现Pod的端点(podIP:containerPort)

service的端口

  • port          service的clusterIP使用的端口,只能在K8S集群内部被访问到。K8S集群内部的客户端可以通过clusterIP:port来访问service
  • nodePort      NodePort类型的serivce使用的端口,会在每个node节点上都开启相同的端口,也就是nodeIP使用的端口(默认访问为 30000~32767)K8S集群外部/内部用户都可以通过nodeIP:nodePort来访问service
  • targetPort    映射Pod容器使用的端口,service会将发送给port或nodePort的请求转发给targetPort映射的Pod容器端口

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com