欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > k8s技术架构

k8s技术架构

2024/10/24 22:18:32 来源:https://blog.csdn.net/wendao76/article/details/141947479  浏览:    关键词: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 集群的整体网络架构。

版权声明:

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

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