K8S(Kubernetes)是一个开源的容器部署和管理平台,由Google开发后捐献给云原生计算基金会(CNCF)。以下是K8S的基础知识概述:
一、K8S概述
-
定义:K8S的全称为Kubernetes,用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是一个生态极其丰富的容器编排框架工具。
-
特性:
- 弹性伸缩:根据应用负载自动调整资源,确保应用在高负载时稳定运行,在低负载时节省资源。
- 自我修复:自动检测并替换故障节点或容器,确保应用始终可用。
- 服务发现和负载均衡:为应用提供稳定的网络接入点,实现服务发现和负载均衡。
- 自动发布和回滚:支持滚动发布模式,如果更新过程中出现问题,可以回滚到之前的版本。
- 集中化配置管理和密钥管理:方便管理应用配置和敏感数据。
- 存储编排:支持外挂存储并对外挂存储资源进行编排,提高存储使用灵活性。
二、K8S集群架构与组件
K8S的架构采用主从设备模型(Master-Slave架构),即由Master节点负责集群的调度、管理和运维,Slave节点作为集群中的运算工作负载节点。
-
中央控制节点(Master Node):
- 位于集群的中心,包含API Server、Scheduler、Controller Manager和etcd等组件。
- 这些组件协同工作,负责集群的管理、调度和状态监控。
-
工作节点(Worker Node):
- 围绕在Master Node周围,每个Node节点上运行Kubelet、Kube-Proxy和容器运行时等组件。
- 这些节点负责执行Master节点分配的任务,运行和管理容器实例。
三、K8S核心组件
-
etcd:
- 一个高度可靠的分布式键值存储,用于存储集群配置信息的持久化存储。
- etcd保存了Kubernetes集群的所有状态数据,如Pods、Services等资源的定义和状态。
-
kube-apiserver:
- Kubernetes集群的API服务器,是集群的前端服务器,提供了HTTP/HTTPS RESTful API。
- 所有的请求都需要经过这个接口进行通信,负责接收、校验并响应所有的REST请求,并将结果状态持久化存储在etcd中。
-
kube-controller-manager:
- Kubernetes集群中的控制器管理器,负责管理集群中所有的控制器(controller)。
- 这些控制器包括节点控制器(Node Controller)、副本控制器(Replication Controller)等,它们不断地监听集群状态变化,并根据期望状态和实际状态的差异来进行调谐。
-
kube-scheduler:
- Kubernetes集群的默认调度器,负责将新创建的Pod调度到合适的节点上。
- 调度决策考虑的因素包括单个Pod及Pods集合的资源需求、软硬件及策略约束、亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限等。
-
kubelet:
- 在每个节点上运行的代理,负责管理该节点上的容器、Pod和容器相关的资源。
- 是节点与主节点通信的桥梁,执行主节点下发的指令。
-
kube-proxy:
- 网络代理,负责实现Kubernetes服务的网络抽象和负载均衡。
- 它将对服务的访问转发到后端的一组Pod上,提供服务的网络访问能力,确保服务的可靠性和可扩展性。
四、K8S核心概念
-
Pod:
- Kubernetes中的最小调度单元,由一个或多个容器组成,这些容器共享存储和网络资源。
- Pod是Kubernetes生态系统中的核心管理单元。
-
Service:
- 为Pod提供稳定的网络接入点,实现服务发现和负载均衡。
-
Label和Label Selector:
- 用于组织和选择资源对象的标签和标签选择器。
-
Namespace:
- 用于将集群内部的资源逻辑上划分为不同的空间,方便管理和隔离。
五、K8S工作流程
- 用户通过kubectl命令行工具、UI界面或API向kube-apiserver发送请求。
- kube-apiserver接收请求后,进行身份验证和授权,然后将请求转发给相应的控制器(如Controller Manager)或调度器(如kube-scheduler)。
- 控制器根据请求的类型和集群的当前状态,生成相应的资源对象(如Pod)并存储在etcd中。
- kubelet在Node节点上监控etcd中的资源对象变化,并相应地创建、更新或删除容器。
- kube-proxy负责实现服务的网络抽象和负载均衡,确保服务的可靠性和可扩展性。
综上所述,K8S是一个功能强大的容器编排工具,通过其丰富的组件和核心概念,可以实现对容器化应用程序的自动化部署、扩展和管理。