k8s组件


K8S

组件

img

K8S组件,主要会包含两大最核心的组件:控制平面(Control Plane)、工作节点(Worker Nodes)。

控制平面(Control Plane)/ Master :负责管理整个集群的状态,调度任务,监控集群正常运行;

工作节点(Worker Nodes)/ Node:运行实际的应用容器,负责容器的运行和管理。

控制平面组件

控制平面:负责管理 Kubernetes 集群中的所有节点、和 Pod。

它由以下组件组成,重点关注下图的“黄色框”:

图片

API Server:集群的入口,提供接口,资源增删改查入口。并提供认证、授权、访问控制、API注册和发现等机制。

Controller Manager:所有资源对象的自动化控制中心;负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。

图片

常见的控制器包括:

  • Deployment Controller:管理无状态应用的部署,包括“处理副本的创建、更新和滚动升级;
  • StatefulSet Controller:管理有状态应用的部署,适合需要持久化存储、和有序部署的应用(如:数据库);
  • ReplicaSet Controller:确保指定数量的 Pod 副本始终运行,用于确保 Pod 副本数目符合期望;
  • Job Controller:Job 可以创建多个 Pod,并在成功完成任务后终止 Pod;
  • CronJob Controller:类似于 Linux 的 Cron 任务,它会在指定的时间间隔内创建 Job 实例;
  • DaemonSet Controller:确保每个节点上都有一个 Pod 实例,适合需要在每个节点上运行的服务,如:日志收集器、监控代理…等;
  • Namespace Controller:管理命名空间的生命周期,包括:创建/和删除命名空间,以及相关资源的清理。

总之,控制器的设计使得 K8S,能够在大规模环境中自动化管理容器、和服务。

Scheduler:负责资源调度,按照预定的调度策略将Pod调度到相应的机器上。

Etcd:分布式键值存储系统,用于保存集群的所有配置信息、和状态数据。重点保证数据的一致性、和持久性,提供集群状态的快速读取、和修改能力。

工作节点的组件

工作节点组件:运行实际的应用容器,负责:容器的执行、和管理。

每个工作节点,包含以下“绿色框”所示组件:

图片

工作节点是运行实际应用程序的地方,它接收 API Server 的调度指令并运行 Pod。

工作节点上的核心组件包括:

Kubelet:Pod容器创建、启停、集群管理等任务;同时也负责Volume(CVI)和网络(CNI)的管理。

Kube-proxy:实现service的通信与负载均衡组件。比如:使用 iptables 、或 ipvs 维护网络规则,将流量转发到相应的 Pods。

Docker:docker引擎,负责本机容器的创建和管理工作。

其他组件

除了核心组件,还有一些推荐的Add-ons:

  • kube-dns:负责为整个集群提供DNS服务
  • Ingress Controller:为服务提供外网入口
  • Heapster/metrics-server:提供资源监控
  • Dashboard:提供GUI
  • Federation:提供跨可用区的集群
  • Fluentd-elasticsearch:提供集群日志采集、存储与查询

Pod

Pod是 K8S中可以创建(部署)和管理的最小单元, pod内包含一个或多个容器

Pod 是 Kubernetes 中的基本构建块,提供了容器的封装、和管理功能:

创建pod时pause是第一个启动的容器,作用:初始化网络栈,挂载需要的存储卷,回收僵尸进程;

pod内的容器共享名称空间、网络、存储资源、PID、IPC,并在同一个环境中运行。

当创建一个 Pod 时,K8S调度器,会将 Pod 调度到合适的工作节点上。

调度器根据资源需求、节点的负载、和调度策略来选择节点。

一旦 Pod 被调度到节点上,kubelet 在节点上启动并运行 Pod 中的容器。

网络

在Kubernetes中,网络插件也称为容器网络接口(Container Network Interface,CNI)插件,用于实现容器之间的通信和网络连接。以下是一些常见的Kubernetes网络插件:

Flannel:Flannel是一个流行的CNI插件,它使用虚拟网络覆盖技术(overlay network)来连接不同节点上的容器。Flannel支持多种后端驱动,如VXLAN、UDP、Host-GW等。

Calico(主流):Calico是一个开源的网络和安全解决方案,它使用BGP协议来实现容器之间的路由。Calico支持灵活的网络策略和安全规则,可用于大规模部署。

Weave Net:Weave Net是一个轻量级的CNI插件,通过创建虚拟网络设备和网络代理来连接不同节点上的容器。Weave Net支持overlay模式和直连模式,具有灵活性。

Cilium(未来趋势):Cilium是面向Kubernetes的高性能网络和安全解决方案,利用eBPF(Extended Berkeley Packet Filter)技术来提供快速的容器间通信和网络策略实施。

Canal:Canal是一个综合性的CNI插件,结合了Calico和Flannel的功能。它可以使用Flannel提供overlay网络,同时使用Calico的网络策略和安全性功能。

Antrea:Antrea是一个基于Open vSwitch的CNI插件,专为Kubernetes网络和安全性而设计。它提供了高性能的网络连接和网络策略功能。

kube-router:kube-router是一个开源的CNI插件,它结合了网络和服务代理功能。它支持BGP和IPIP协议,并具有负载均衡的特性。

Calico

Calico是一个强大的开源容器网络和网络安全解决方案,广泛应用于Kubernetes集群和其他容器编排平台。

它通过利用BGP(Border Gateway Protocol)协议和Linux网络命名空间来实现高性能的容器间通信和网络策略控制。

img

实现功能

  1. 容器网络通信:Calico通过在每个节点上创建一个专用的Linux网络命名空间来实现容器网络通信。容器内的数据包首先被发送到节点的Calico网络命名空间,然后根据网络路由规则转发到目标容器所在的网络命名空间。这种直接的网络转发方式保证了容器之间的高性能通信。
  2. BGP路由协议:Calico使用BGP协议来实现容器间的路由。每个节点上的Calico代理将容器网络信息注册到BGP路由表中,然后通过BGP协议将这些路由信息传播给其他节点。这样,每个节点都知道如何到达其他节点上的容器。
  3. 网络策略:Calico提供了强大的网络策略功能,允许你定义细粒度的访问控制规则。你可以基于标签选择器来定义哪些容器可以与哪些容器通信,以及允许或拒绝的数据包流动。这为你提供了对容器间通信的全面控制能力。
  4. 网络隔离:通过使用Linux内核中的网络隔离技术(例如namespace和iptables),Calico可以实现容器级别的网络隔离。
  5. 安全性:Calico支持基于网络策略的安全组功能,它可以实现容器间的隔离和安全通信。通过设置网络策略规则,你可以确保只有经过授权的容器之间才能相互通信,从而保护你的应用和数据。
  6. IPv6支持:Calico完全支持IPv6,允许你在Kubernetes集群中使用IPv6地址。
  7. 高可用性:Calico的设计支持高可用性和容错性。每个节点上的Calico代理和BGP路由守护进程具有自我修复能力,能够自动检测并恢复故障。
  8. 跨云和跨数据中心:Calico支持在不同云平台和数据中心之间扩展和跨区域使用,为你提供跨云的容器网络解决方案。
  9. IP池管理:Calico通过IP池管理功能,可以为每个节点动态分配IP地址,从而实现更好的IP资源利用率和管理。
  10. 流量日志:Calico支持流量日志,可以记录网络流量的来源、目的地、协议和端口等信息,从而帮助用户更好地监控和调试网络流量。

实现原理

  1. BGP路由协议:Calico 使用 BGP(Border Gateway Protocol)协议来实现容器网络的路由。在 Calico 网络中,每个节点上都运行着一个 Calico 代理(Felix),它会将节点上的容器网络信息注册到 BGP 路由表中,并通过 BGP 协议将这些路由信息传播给其他节点。
  2. IP池和子网划分:在 Calico 网络中,每个节点都有一个唯一的 IP 池。当容器启动时,Calico 会从节点的 IP 池中为容器分配一个独立的 IP 地址。这样,每个容器都有一个唯一的 IP 地址,使容器可以直接通过 IP 地址进行通信。
  3. 容器网络命名空间:Calico 使用 Linux 网络命名空间来实现容器网络隔离。每个节点上的容器都位于自己的网络命名空间中,这样可以保证容器之间的网络隔离。
  4. 路由规则:Calico 使用路由规则来决定容器之间的通信路径。在每个节点上,Calico 代理会根据 BGP 路由表中的路由信息,为容器生成适当的路由规则,从而实现容器间的高性能通信。
  5. 网络策略:Calico 支持网络策略,允许用户定义细粒度的访问控制规则。网络策略可以基于标签选择器来定义哪些容器可以与哪些容器通信,从而实现容器间的隔离和安全通信。
  6. 路由表和路由选择:每个节点上的 Calico 代理维护着一张路由表,用于决定如何转发数据包。当一个容器需要与另一个容器通信时,Calico 代理会根据路由表中的路由选择适当的路径,将数据包转发到目标容器所在的网络命名空间。

Calico 插件通过使用 BGP 路由协议和 Linux 网络命名空间来实现容器网络隔离和高性能通信。

每个节点上的 Calico 代理会维护路由表和 IP 池,根据 BGP 路由信息和网络策略规则,为容器生成适当的路由规则和访问控制规则,实现容器间的通信和安全隔离。

这使得 Calico 成为一个功能强大、可扩展且高性能的容器网络解决方案。

优点:

  1. 高性能:Calico插件使用BGP协议作为底层网络协议,可以实现高性能的容器网络,能够满足高流量和低延迟的应用场景。
  2. 高可扩展性:Calico插件使用BGP协议动态学习和发布容器的路由信息,可以实现高可扩展性的容器网络,能够支持大规模容器集群。
  3. 安全性:Calico插件支持Kubernetes网络策略,可以通过标签选择器和规则定义来限制容器之间的流量,从而实现更好的网络安全性。
  • 简单易用:Calico插件的安装和配置相对简单,可以使用简单的命令行工具完成。
  • 开源免费:Calico插件是开源免费的,可以节省一定的成本。

缺点:

  1. 复杂度高:Calico插件的底层技术比较复杂,需要一定的技术水平才能使用和维护。
  2. 资源占用高:Calico插件使用Linux内核技术实现容器网络隔离,需要占用一定的系统资源。
  3. 配置需要注意:Calico插件的配置需要注意一些细节,例如BGP ASN和IP地址的配置,需要保证每个节点的配置正确。
  4. 不支持Windows节点:目前,Calico插件不支持Windows节点,只能在Linux节点上使用。

总的来说,Calico插件是一种功能强大的容器网络插件,适用于高性能、高可扩展性和安全性的应用场景。在实际应用中,需要根据具体需求评估其优缺点,选择合适的网络插件。

使用场景

Calico插件适用于大规模容器集群的高性能、高可扩展性和安全性的应用场景,特别是在需要对容器流量进行管理和保护的场景中,例如:

大规模容器集群:Calico插件使用BGP协议实现动态路由,可以支持大规模容器集群,具有较高的可扩展性。

高性能应用:Calico插件使用Linux内核技术实现容器网络隔离,可以实现高性能的容器网络,适用于高流量和低延迟的应用场景。

多租户应用:Calico插件支持Kubernetes网络策略,可以通过标签选择器和规则定义来限制容器之间的流量,从而实现更好的网络安全性,适用于多租户应用场景。

高安全性应用:Calico插件支持网络隔离和流量日志等高级网络特性,可以帮助用户更好地管理和保护Kubernetes集群中的网络流量,适用于对安全性要求较高的应用场景。

Calico插件适用于需要高性能、高可扩展性和安全性的容器网络应用场景,是一个功能强大的Kubernetes网络插件。


文章作者: wmg
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wmg !
  目录