Administrator
发布于 2025-11-13 / 18 阅读
0
0

K8S简介和架构

1.1 介绍

Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。

1.2 K8S特性

kubernetes,主要提供了如下的主要功能:

  • 服务发现和负载均衡

  • Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

  • Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚

  • 你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算

  • Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

  • 自我修复

  • K8S节点自我修复能力,包括我们运行在K8S中的服务,如果宕机,它可以帮助我们修复该服务。

  • 密钥与配置管理

  • Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

2 架构

K8S集群主要是由控制节点/控制平面组件(master)跟工作/工作负载节点(node)组成,不同节点安装不同组件。

Kubernetes Cluster = N Master + N Worker Node:N主节点+N工作节点; N>=1

Master:挂掉之后-要从Master中选取,不能从Worker中选取!

概览

Kubernetes 集群架构

Master控制面板组件

Master节点负责整个集群的管理和协调工作。它维护集群的状态,并处理集群级别的操作和配置,例如添加或删除节点、扩展或缩小集群规模等。

APIServer(API服务器)

资源(控制管理类操作)操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制。作为Kubernetes集群的前端接口,所有的集群操作都通过API Server进行。它处理来自用户和其他组件的请求,包括命令行工具(如kubectl)、GUI界面,并将其转发到适当的组件.

Controller Manager(控制器管理器)

负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等。包含了多个控制器,用于监控和维护集群状态的一致性。例如,ReplicaSet Controller 用于确保指定数量的Pod副本一直运行。这些控制器包括:

  • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应

  • 任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成

  • 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)

  • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌

Scheduler(调度器):

负责将新创建的Pod调度到集群中的合适节点上。调度器根据定义的调度策略和节点资源情况来选择最佳节点。

etcd

etcd Kubernetes集群中兼具一致性和高可用性的键值数据库,用于存储集群配置信息、状态和元数据。

Node 节点组件

node节点组件是集群中的工作节点,负责运行容器和负载

kubelet

一个在集群中每个节点(node)上运行的代理。 它保证容器(containers)都 运行在 Pod 中。

Node节点上的Kubelet组件负责管理节点上的容器。它与Master节点通信,接收Pod的调度请求,并根据指令拉取镜像、启动、停止和监控容器。Kubelet还负责在容器故障时进行自动恢复。

kube-proxy

责网络代理和负载均衡。它维护节点的网络规则,并确保Pod可以通过集群内部和外部的网络访问。Kube-proxy还实现了服务发现和负载均衡功能,使得Pod能够以服务的方式对外提供访问。

举例说明

部署一个Nginx(第三方、微服务)服务来熟悉Kubernetes系统各个组件调用关系:

  1. 首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中

  2. 一个Nginx服务的安装请求会首先被发送到master节点的APIServer组件

  3. APIServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知APIServer,APIServer调用Controller-manager去调度Node节点安装Nginx服务

  4. Node节点通过Kubelet接收到指令后,会通知docker,然后由docker来拉取Docker镜像,启动一个Nginx的pod(封装一组容器),pod是kubernetes的最小操作单元,容器必须跑在pod中

  5. 到这里一个Nginx服务就运行了,如果需要访问Nginx,就需要通过Kube-proxy来对pod产生访问的代理这样,外界用户就可以访问集群中的Nginx服务了

kubernetes概念说明

  • Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控

  • Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行

  • Podkubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

  • Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

  • Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod

  • Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

  • NameSpace:命名空间,用来隔离pod的运行环境,只隔离资源,不隔离网络


评论