Kubernetes部署相关概念

news2024/11/14 4:17:05

 本文封面由 凯楠📸友情提供


Kubernetes部署相关概念概览

容器运行时(container runtime):

是负责在计算机操作系统上创建、运行和管理容器的软件组件。它是整个容器化环境中的关键组成部分,与操作系统内核紧密交互,负责管理容器的生命周期、资源隔离、文件系统挂载和网络连接等功能。

Master-NodeWork-Node:

两者角色分别对应着控制节点和工作节点。Kubernetes的核心组件部署在Master管理节点作为Kubernetes大脑,控制整分布式集群的运转。Node节点作为"四肢",执行Master的操作指令。

控制平面(Control Plane)和数据平面(Data Plane):

控制平面是管理集群的“大脑”负责决策和全局控制,也被称为管理节点。数据平面是负责运行容器化应用程序的节点,也被称为工作节点。

Kubelet

运行在每个 Kubernetes 节点上的代理,负责管理该节点上的容器。它与容器运行时通信,确保容器按照 Pod 的规格运行。kubelet 还负责监控容器的状态,并向主控制平面报告节点的状态。

Kubeadm:

Kubernetes 一个命令行工具,用于在一个或多个节点上启动、初始化或升级 Kubernetes 集群。它提供了一个简化的方式来配置集群,而不必手动执行复杂的步骤。kubeadm 通常用于设置和管理集群的初始化过程。

kubectl

Kubernetes 的命令行客户端工具,用于与 Kubernetes 集群进行交互。通过 kubectl,用户可以管理集群、部署和扩展应用、查看集群状态等。kubectl 可以用来执行各种操作,例如创建、删除和更新资源对象(如 PodServiceDeployment 等)。


容器运行时(container runtime

Kubernetes是一个容器编排和管理系统,它的主要任务是在集群中部署、运行和管理容器化应用程序因此,kubernetes需要一个“容器运行时”来管理容器,以便能够将容器化的应用程序部署和运行在集群中。DockerContainerd都是常用的“容器运行时”,因此需要在安装kubernetes安装之前进行安装。

需要注意,从Kubernetes v1.20版本开始,Kubernetes官方已经将默认的“容器运行时”从Docker改为Containerd。因此,Kubernetes同时支持使用DockerContainerd作为“容器运行时”,将此从docker依赖中解放出来。从v1.24版本开始,docker作为“容器运行时”已经被官方弃用,Containerd成为唯一的“容器运行时”

  • Cgroup

是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。

  • Linux namespaces

是对全局系统资源一种封装隔离,使处于不同namespace的进程拥有独立全局系统资源,改一个namespace中系统资源只会影响当前namespace里的进程,对其他namespace中的进程没有影响。

在Kubernetes中,“容器运行时”需要与宿主机的CgroupNamespace进行交互,以管理容器的资源。而对于Cgroup的驱动程序,默认使用的是Cgroupfs。需要将三者统一,将/etc/containerd/config.toml文件中的SystemdCgroup改成true。表示使用Systemd驱动。相比于Cgroupfs驱动,可以提高Kubernetes集群资源管理效率和集群性能。


 Master-NodeWork-Node

  • Master-Node又称控制平面(Control Plane)有四大组件apiserveretcdcontroller-managerscheduler
  • Master-Node节点的Cloud Controller Manager组件是云控制管理器,是负责与云平台的API进行交互并提供一致的管理接口方便用户管理他们的程序。 
  • Work-Node节点又称数据平面(Data Plane)有三大组件kubeletkube-proxyContainer Runtime

控制平面(Control Plane)和数据平面(Data Plane)

控制平面组件:

  • kube-apiserver

是控制平面的入口,处理来自用户、其他组件和外部系统API请求。提供API的服务端实现。

  • etcd

分布式键值存储系统,用于存储集群的配置数据、状态和元数据。etcd 提供了持久性存储,确保即使在控制平面组件失败或重启时,集群的状态仍然可恢复。

  • kube-controller-manager

运行一系列控制器,负责监控集群的状态,并根据所需的状态调整系统。例如,Node 控制器负责管理节点,Replication Controller 负责确保指定数量的 Pod 实例在集群中运行。

  • kube-scheduler

负责决定在哪个节点上启动新的 Pod 实例。它根据节点资源、Pod 调度策略和其他约束来进行决策。

数据平面组件:

  • kubelet

在每个节点上运行的代理,负责维护节点上的容器。它通过与控制平面的 kube-apiserver 交互来获取 Pod 规范,并确保 Pod 中的容器按规范运行。

  • kube-proxy

负责维护节点上的网络规则,实现 Kubernetes 服务的网络代理。它通过 iptables 或其他实现来确保流量正确路由到集群中的 Pod

  • Container Runtime

负责在节点上运行容器。通过启动和管理容器来满足 Pod 的规范。

控制平面和数据平面的分离使得 Kubernetes 具有高度的可扩展性和灵活性。通过这种架构,可以在不影响整体系统运行的情况下分别扩展控制平面和数据平面的能力。


 工作原理

  1. 用户通过 kube-apiserver 与控制平面通信,提交集群操作请求。
  2. 控制平面组件(etcdkube-controller-managerkube-scheduler)负责决策、调度和维护集群状态。
  3. kubelet 接收控制平面的指令,负责在节点上创建、更新和删除容器。
  4. kube-proxy 负责维护节点上的网络规则,实现服务代理。
  5. “容器运行时”负责在节点启动和管理容器。

Kubernetes 容器网络接口(CNI

Kubernetes 网络的实现不是集群内部自己实现,而是依赖于第三方网络插件。Kubernetes 提供了容器网络接口 CNIContainer Network Interface),具体的网络通信交给 CNI 插件来负责。主要有两种网络插件分别是Flannel网络插件和Calico 网络插件。

  • Flannel插件

是随着CNI概念的兴起,flannel也是最早实现CNI标准的网络插件(CNI标准也是由CoreOS提出的)。设计目的是为集群中所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP地址通信。Flannel 实质上是一种“覆盖网络(overlay network)”,是将TCP数据包装在另一种网络包里进行路由转发和通信,目前已经支持UDPVxLANAWS VPCGCE路由等数据转发方式(此处不展开讲),默认UDP转发。

  • Calico 插件

是一种基于 BGP 的、纯三层的、容器间互通的网络方案。 即每个节点上的Pod都拥有唯一的IP地址。这种设计简化了网络管理,同时提供了更直观的网络拓扑。而在多数的虚拟化平台实现中,通常使用二层隔离技术来实现容器的网络,这些二层技术有一些弊端,比如需要依赖VLANbridge和隧道等技术。其中 bridge 带来了复杂性,vlan 隔离和 tunnel 隧道则消耗更多的资源并对物理环境有要求,随着网络规模的增大,整体会变得越加复杂。 (此处不展开讲)


Calico 件和Flannel件的选择

  • Calice 

技术基础:Calico 依赖于BGPBorder Gateway Protocol)路由协议来实现节点间通信,可以支持大规模的集群

性能:由于使用了 IP-in-IP VXLAN 隧道以及基于路由的策略,Calico 在大多数情况下提供较高的网络性能

安全性和策略:Calico提供强大的网络安全策略,允许用户细粒度地控制容器间的流量,在大型企业环境中非常有用。

复杂性:由于其功能强大,Calico 的配置可能比 Flannel 更复杂。

资源消耗:Calico 需要更多的计算和内存资源来运行,特别是在处理大量网络规则时。

  • Flannel 

网络模型:Calico 支持多种网络模型,包括 HostGWOverlay(如 IPIP VXLAN)以及直接路由模式。

技术基础:Flannel 主要依赖于 UDP VXLAN 隧道进行节点间通信,它是轻量级集群的网络解决方案

性能:虽然 Flannel 通常提供良好的性能,但与 Calico 相比,可能在某些情况下有更高的网络延迟

安全性和策略Flannel默认不提供复杂的网络策略,但可以通过集成其他工具(如 Cilium)来增强安全性。

简单性Flannel 设计为易于部署和管理,特别适合小型或中型集群,或者对网络要求不高的环境。

资源消耗:相比 CalicoFlannel 对系统资源的需求较低,更适合资源有限的环境。

网络模型Flannel 支持 Overlay 模式(如 VXLAN UDP),以及 Host-gateway 模式。


Calico 组件和Flannel组件的选择(总结)

  • Calico组件:

如果运行一个大型集群规模,需要精细的网络策略控制,并且愿意接受更复杂的配置过程,计算和内存资源资源充足,那么 Calico 可能是一个更好的选择。

  • Flannel组件:

如果运行一个较小集群规模,对网络性能要求不高,而且希望有一个易于管理和配置的网络解决方案,计算和内存资源资源紧缺,那么 Flannel 更适合。  


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2074254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux(Ubuntu )搭C++ 最新版GDAL完整教程

在前面的文章中主要是介绍如何在windows系统下利用python安装gdal库,如下: 如何快速安装GDAL 在linux环境下python安装gdal也可以利用现成的whl文件,但是安装c GDAL环境的比较麻烦,目前网络上大多是安装的老版本的教程&#xff…

springboot3 SecurityConfig SecurityFilterChain 需要使用CorsFilter,实际是CorsWebFilter

使用springboot3做微服务开发,由于网关gateway使用webFlux,因此导致实际类型是CorsWebFilter,但是在public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception方法中,项目启动报错…

rt-studio+clion+cubemx联合使用(使用scons进行整合)

前言 以前在clion中使用rt-thread的方式 1. 使用的cubemx生成的方式: 这种方式只能使用rt-thread的内核版本 2. 自己去把rt-thread的源码拷贝到对应的工程中,再编写对应的CMakelists文件进行管理思考 我的想法是通过rt-studio创建项目,然后通过工具转…

河南萌新2024第二场

H 狼狼的备忘录 题目大意: 给定n本备忘录,里面记录了一个人的m个星座信息,要求按一下要求整理备忘录 A:同一个成员的星座信息 x 是星座信息 y 的后缀,那么星座信息 x 会没有星座信息 y 完整,从而应该只保…

Nginx + Docker Compose前后端分离部署到服务器过程记录

一、采用Nginx部署前端VUE(Vite) 1、修改配置文件vite.config.ts,将本地环境改为开发环境 注意base处只能是‘/’ 不能是 ‘./!在这里插入图片描述 对项目进行打包 在当前目录的终端执行:npm run build 若报错如下&#xff1…

CORS错误

说明:记录一次CORS(跨域)错误,及解决方法。 场景 在vscode里面运行前端项目,idea中运行后端项目,登录时,访问接口,报CORS错误,如下: 解决 在后端项目的网关…

【PyQt6 应用程序】PyUIC使用加载可视化文件

使用uic模块可以方便地从Qt Designer设计的UI文件加载用户界面。这种方法使得设计和布局变得更加直观,并且可以将用户界面设计与程序逻辑分离。 本次展示如何使用PyQt6和uic模块来加载一个简单的UI文件。 文章目录 需要使用Qt Designer创建一个UI文件。Qt Designer是一个强大…

并行 parallel DOP 受 Resource Manager 限制

监控 Script select s.SID, s.SERIAL#, s.username ,rpd.plan, s.RESOURCE_CONSUMER_GROUP, rpd.PARALLEL_DEGREE_LIMIT_P1 from v$session s, DBA_RSRC_CONSUMER_GROUPS rcg, DBA_RSRC_PLAN_DIRECTIVES rpd , V$RSRC_CONSUMER_GROUP v…

甲方(北汽)渗透测试面试经验分享

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 所在城市&…

IDEA 2024.2.0.2 使用 Jrebel and XRebel 热部署

安装 激活 工具网站中url和邮箱复制进去 设置 允许项目自动构建 允许开发过程中自动部署

苍穹外卖项目DAY10

苍穹外卖项目DAY10 1、Spring Task 1.1、介绍 Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 定位:定时任务框架 作用:定时自动执行某段Java代码 只要是需要定时处理的场景都可以使用Spring Task…

大数据技术之Flume 拓扑结构(4)

目录 Flume 拓扑结构 简单串联 (Simple Serial) 复制和多路复用 (Replication and Multiplexing) 负载均衡和故障转移 (Load Balancing and Failover) 聚合 (Aggregation) 示例配置 Flume 拓扑结构 Flume 支持多种拓扑结构来满足不同的数据收集和传输需求。以下是 Flume 中常…

复现ssrf漏洞

目录 一、pikachu靶场 1、靶场环境: 使用docker拉取: docker run -d -p 8765:80 8023/pikachu-expect:latest 2、使用dict 3、使用file读取文件 二、redis未授权访问 1、源码 2、使用bp探测端口 3、继续使用bp探测172.18.0.2的端口 4、使用go…

鸿蒙(API 12 Beta3版)【使用AVPlayer开发音频播放功能(C/C++)】音视播放与录制

使用AVPlayer可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解AVPlayer音频播放相关功能。 播放的全流程包含:创建AVPlayer,设置播放资源,设置播放参数(音量/倍速/…

运用Archimate为 智慧文旅搭建 数字化架构体系【系统架构】

ArchiMate是一种用于企业架构建模的开放、独立且详细的语言,它提供了一套丰富的概念和关系来描述、分析和可视化企业架构的不同领域。以下是ArchiMate建模的一些关键功能: 多视图建模:ArchiMate定义了23个示例视图,分为四类&#…

python模块04-requests

1 requests模块发送请求 Requests是一个Python HTTP庫 相关参考资料: 文档:Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档 requests PyPI:requests PyPI requests源码:GitH0ub - psf/requests: A simple, yet elegant, …

封装车牌号码输入组件

<!-- Title: 国内车辆号牌号码输入组件Description: 国内车辆号牌号码输入组件&#xff0c;具体使用方法如下&#xff1a;<its-hphmInput v-model"form.hphm" :glbm"京A" :parentmessage.sync"hphm" onChange"provinceAbbreviationC…

基于R语言进行AMMI分析3

参考资料&#xff1a;https://cran.r-project.org/web/packages/agricolae/agricolae.pdf 1、plot()函数 本次介绍的是Agricolae包中的plot.AMMI()函数。此函数可以绘制AMMI双标图&#xff0c;也可以绘制三标图&#xff08;三个坐标轴&#xff0c;IPCA1&#xff0c;IPCA2&…

「C++系列」类/对象

文章目录 一、类1. 基本类的定义2. 类的访问控制3. 类的实例化4. 构造函数和析构函数5. 继承6. 类的使用 二、对象1. 创建对象2. 对象的生命周期3. 对象的内存4. 对象的操作5. 对象的复制6. 总结 三、应用案例1. 定义BankAccount类2. 分析 四、相关链接 一、类 C 类&#xff0…

【初阶数据结构】顺序表和链表算法题(下)

链表 2.链表2.4合并两个有序链表2.5链表分割2.6链表的回⽂结构2.7相交链表2.8环形链表I2.9 环形链表II2.10随机链表的复制 2.链表 2.4合并两个有序链表 思路 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ …