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系统各个组件调用关系:
首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中
一个Nginx服务的安装请求会首先被发送到master节点的APIServer组件
APIServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知APIServer,APIServer调用Controller-manager去调度Node节点安装Nginx服务
Node节点通过Kubelet接收到指令后,会通知docker,然后由docker来拉取Docker镜像,启动一个Nginx的pod(封装一组容器),pod是kubernetes的最小操作单元,容器必须跑在pod中
到这里一个Nginx服务就运行了,如果需要访问Nginx,就需要通过Kube-proxy来对pod产生访问的代理这样,外界用户就可以访问集群中的Nginx服务了
kubernetes概念说明
Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控
Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
Pod:kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod
Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
NameSpace:命名空间,用来隔离pod的运行环境,只隔离资源,不隔离网络
