当前位置: 首页 > news >正文

k8s技术架构

文章目录

    • Kubernetes 核心概念
      • 主要组件
        • 1. Master 节点
        • 2. Worker 节点
      • 核心对象
      • 工作流程
      • 扩展性和插件化
    • kubernetes网络
      • Kubernetes 集群网络
        • Pod 网络
        • Service 网络
        • Ingress 网络
        • 网络策略
      • 主机网络
        • 主机网络配置
        • 主机与集群网络的集成

Kubernetes 核心概念

Kubernetes(通常简称为 K8s,因为“K”到“s”之间有 8 个字母)是一个用于自动化部署、扩展和管理容器化应用的强大平台。Kubernetes 的架构设计旨在提供高度可扩展、高可用性和易于管理的基础设施。下面是 Kubernetes 架构的主要组成部分及其功能解析:

主要组件

1. Master 节点

Master 节点是集群的大脑,它负责集群的管理和协调。Master 节点通常包含以下几个组件:

  • API Server

    • API Server 是集群的前端,它暴露了 RESTful API 接口,允许客户端与集群进行交互。
    • API Server 是集群状态的主要来源,它还负责验证和配置数据,并提供集群的认证和授权。
  • etcd

    • etcd 是一个分布式的键值存储,用于保存集群的状态数据,如配置、密钥等。
    • etcd 确保了数据的一致性和可靠性。
  • Controller Manager

    • Controller Manager 负责运行多个控制器,这些控制器负责执行集群的状态变更。
    • 控制器的例子包括 ReplicaSet 控制器、Deployment 控制器、Endpoint 控制器等。
  • Scheduler

    • Scheduler 负责监听待调度的 Pod,并选择合适的 Node 来运行它们。
    • Scheduler 会考虑 Node 的资源可用性、亲和性规则等因素来做出决策。
2. Worker 节点

Worker 节点(也称作 Node 或者 Minion)是集群中实际运行工作负载的地方。每个 Worker 节点包含以下组件:

  • kubelet

    • kubelet 是一个位于每个节点上的代理,它负责维护 Node 上的 Pod 状态与 API Server 中定义的状态一致。
    • kubelet 负责启动和停止容器,并报告 Pod 的状态。
  • Container Runtime(如 Docker、Containerd、rkt 等):

    • Container Runtime 负责拉取镜像、运行容器,并管理容器的生命周期。
    • Kubernetes 支持多种容器运行时。
  • kube-proxy

    • kube-proxy 负责实现 Kubernetes 服务(Services)的网络规则。
    • 它通过 iptables 或 IPVS 实现服务的负载均衡。

核心对象

Kubernetes 使用一组核心对象来定义和管理集群的状态。以下是几个重要的核心对象:

  • Pod

    • Pod 是 Kubernetes 中最小的可部署单位,它包含一个或多个容器。
    • Pod 代表了一个或一组容器的逻辑主机。
  • ReplicaSet

    • ReplicaSet 确保任意时刻都有指定数量的副本(Pod)在运行。
    • 它通常用于保证应用的高可用性。
  • Deployment

    • Deployment 是用于声明式更新应用状态的更高层次抽象。
    • 它使用 ReplicaSet 来保证应用的副本数,并支持滚动更新。
  • Service

    • Service 定义了一个逻辑组的 Pod 以及如何访问它们(例如,网络流量应该如何到达 Pod)。
    • Service 提供了一个稳定的 IP 地址和 DNS 名称,即使后端的 Pod 发生变化。
  • PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

    • PV 是集群中的一部分存储资源,可以由用户申请。
    • PVC 是用户对存储资源的请求,当一个 PVC 被绑定到一个 PV 后,用户就可以使用这个存储空间。

工作流程

  1. 用户通过 kubectl 发送命令:用户使用 kubectl 工具向 API Server 发送命令,如查询、创建、更新或删除资源。

  2. API Server 接收请求:API Server 接收到请求后,验证请求并将其存储在 etcd 中。

  3. Controller Manager 检测并同步状态:Controller Manager 中的控制器检测到状态的变化,并尝试使集群的状态与期望状态保持一致。

  4. Scheduler 分配 Pod:当 Pod 创建后,如果没有指定具体的 Node,Scheduler 会选择一个合适的 Node 来运行 Pod。

  5. kubelet 创建和管理容器:kubelet 根据 API Server 中的描述创建和管理容器。

  6. kube-proxy 设置网络规则:kube-proxy 设置必要的网络规则,以便 Pod 可以相互通信,并对外暴露服务。

扩展性和插件化

Kubernetes 设计为高度可扩展和插件化的,支持通过自定义控制器、Webhook、Admission Controller 等机制来扩展其功能。此外,Kubernetes 支持多种存储插件、网络插件等,使其能够适应不同的基础设施环境。

通过理解 Kubernetes 的架构和核心组件,你可以更好地利用 Kubernetes 来管理容器化的应用和服务。

kubernetes网络

在 Kubernetes(K8s)环境中,“集群网络”指的是在集群内部如何管理和配置网络,以便容器化的应用程序能够互相通信,并且可以与外部网络进行交互。而“主机网络”则是指运行 Kubernetes 工作负载的物理或虚拟机器上的网络配置。

Kubernetes 集群网络

Pod 网络
  • Pod 网络模型:在 Kubernetes 中,每个 Pod 都被视为拥有独立的网络栈,即每个 Pod 都有一个唯一的 IP 地址,并且所有的容器共享这个 IP 地址和端口空间。这意味着 Pod 内部的容器可以直接通过 localhost 相互访问。
  • Pod 间的通信:Pod 之间的通信通常是通过 Kubernetes 内置的网络功能实现的,比如使用默认的 bridge 网络或其他第三方网络插件,如 Calico、Flannel、Cilium 等。
Service 网络
  • Service:Kubernetes 的 Service 对象定义了一组 Pod 的逻辑集合以及访问它们的策略。Services 提供了一个抽象层来定义一组 Pod 的逻辑集合,并且提供了访问这些 Pod 的方法。
  • Service 类型
    • ClusterIP:默认类型,为 Service 分配一个集群内部的 IP 地址。只有集群内部的客户端可以访问此 Service。
    • NodePort:为 Service 分配一个每个 Node 上的静态端口。任何 Node 上的客户端都可以通过 <nodeIP>:<nodePort> 访问此 Service。
    • LoadBalancer:创建一个外部负载均衡器(云提供商或负载均衡硬件),并将外部 IP 地址映射到 NodePort 上的 Service。
    • ExternalName:通过返回 CNAME 和其值来返回 Service 的外部 DNS 名称。
Ingress 网络
  • Ingress 控制器:处理进入集群的 HTTP(S) 流量,并根据域名和路径将请求路由到相应的 Services。Ingress 控制器通常与负载均衡器一起工作,以提供更高级别的路由和负载均衡功能。
网络策略
  • NetworkPolicy:允许集群管理员控制 Pod 间的通信规则,包括允许来自哪些 Pod 的入站流量,以及允许向哪些 Pod 发送出站流量。

主机网络

在 Kubernetes 集群中,主机网络指的是底层物理或虚拟机器的网络配置。这些机器可以是裸金属服务器、虚拟机或云实例。主机网络的重要性在于它影响了 Kubernetes 如何在其上构建和维护集群网络。

主机网络配置
  • 物理网络接口:每个主机都至少有一个物理网络接口,用于连接到物理网络或虚拟交换机。
  • 网络配置:主机的网络配置包括 IP 地址、子网掩码、网关、DNS 设置等信息。这些配置决定了主机如何与外部网络通信。
  • 防火墙规则:为了安全起见,通常会在主机上配置防火墙规则来控制进出流量。
主机与集群网络的集成
  • 网络插件:Kubernetes 集群使用的网络插件(如 Flannel、Calico 等)通常会在主机上安装代理程序,这些代理程序负责配置必要的网络接口、路由表项和其他网络资源,以支持集群内的网络通信。
  • NAT 和路由:在多主机环境中,集群网络通常依赖于 NAT 和路由来确保 Pod 之间的通信能够跨越多个主机。

总之,Kubernetes 集群网络关注的是如何在集群内部实现容器间的通信和服务发现,而主机网络则关注的是如何配置和管理底层主机的网络设置,以支持集群网络的功能。两者相互作用,共同实现了 Kubernetes 集群的整体网络架构。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测
  • 【论文阅读】语义通信安全研究综述(2024)
  • Simulink:循环计数器 Counter Free-Running
  • echarts进度
  • LabVIEW焊缝视觉识别系统
  • 【PostgreSQL教程】PostgreSQL 高级篇之 LOCK(锁)
  • 【AI学习】聊两句深度学习的目标函数
  • Uniapp核心基础(一)
  • pyecharts可视化数据大屏
  • 第二百一十六节 JSF教程 - JSF基本标签、JSF表单文本框示例
  • 【数据结构取经之路】布隆过滤器BloomFilter原理、误判率推导、代码实现
  • Jenkins构建CI/CD
  • 生信软件33 - Wgsim生成双端(PE) fastq模拟数据
  • vue3+ts项目import导入路径用@/报错找不到模块“@/components/也没有快捷提示
  • 使用Python通过字节串或字节数组加载和保存PDF文档
  • ----------
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • GraphQL学习过程应该是这样的
  • Java教程_软件开发基础
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • laravel 用artisan创建自己的模板
  • leetcode-27. Remove Element
  • orm2 中文文档 3.1 模型属性
  • select2 取值 遍历 设置默认值
  • SOFAMosn配置模型
  • sublime配置文件
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue-router 实现分析
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Zsh 开发指南(第十四篇 文件读写)
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 那些年我们用过的显示性能指标
  • 如何使用 JavaScript 解析 URL
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​iOS实时查看App运行日志
  • #define
  • $GOPATH/go.mod exists but should not goland
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (C++17) optional的使用
  • (八十八)VFL语言初步 - 实现布局
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (未解决)macOS matplotlib 中文是方框
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .NET 8.0 发布到 IIS
  • .NET Core 成都线下面基会拉开序幕
  • .NET MVC之AOP
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 读取 JSON格式的数据
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48