K8s小白入门
文章目录
- 前言
- 一、特性
- 二、集群的结构
- 控制平面内部组件
- Node内部组件
- 三、Docker与K8s的关系
- 总结
前言
Kubernetes(K8s)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。是支持云原生部署的一个平台,它前生是谷歌的Borg系统,后经过Go语言重写,在2014 年开源了 Kubernetes 项目,并捐献给CNCF 基金会开源,即Kubernetes,之所以简称K8s,因为 Kubernetes 中间有 8个字母。
一、特性
-
自动化部署和回滚:K8s 允许用户声明应用的期望状态,并自动将实际状态调整为期望状态。这意味着可以自动部署新版本的应用,并在出现问题时自动回滚到之前的版本。
-
服务发现和负载均衡:K8s 可以使用 DNS 名称或自己的 IP 地址来暴露容器。如果进入容器的流量很大,K8s 可以负载均衡并分配网络流量,从而使部署稳定。
-
存储编排:K8s 允许自动挂载用户选择的存储系统,例如本地存储、公共云提供商等。
-
自动完成装箱计算:K8s 提供了资源调度功能,能够根据容器的资源需求,将其分配到合适的节点上,优化资源利用率。
-
自我修复:K8s 能够自动重启失败的容器、替换容器、杀死不响应用户定义的健康检查的容器,并且在准备好服务之前不将其通告给客户端。
-
密钥与配置管理:K8s 允许存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
-
水平扩缩:K8s 支持根据 CPU 使用率或其他自定义指标,自动对应用进行扩展或缩减,确保应用在不同负载下都能高效运行。
-
可移植性和灵活性:K8s 支持在多种环境中运行,包括本地数据中心、公有云和混合云,提供一致的操作体验。
二、集群的结构
集群的结构主要由控制平面(Control Plane)和工作节点(Node) 两部分组成。
控制平面内部组件
Kubernetes 的控制平面(Control Plane)是集群的核心,负责管理和协调所有节点,确保集群处于期望的状态。控制平面由以下关键组件组成:
-
API 服务器(kube-apiserver):
- 功能:作为 Kubernetes 控制平面的前端,提供集群的 RESTful API 接口,处理所有的 API 请求,包括认证、授权、数据校验和集群状态变更。
- 作用:所有其他组件都通过 API 服务器进行通信,是集群的统一入口。
-
etcd:
- 功能:一个分布式、一致性、高可用的键值存储,用于保存集群的所有配置信息和状态数据。
- 作用:作为集群的唯一数据源,存储了所有的集群数据,包括节点信息、Pod 状态、配置数据等。
-
调度器(kube-scheduler):
- 功能:监视新创建且未指定运行节点的 Pod,并根据资源需求、硬件/软件/策略约束、亲和性/反亲和性规范等因素,将其分配到合适的节点上。
- 作用:确保工作负载在集群中的合理分布,优化资源利用率。
-
控制器管理器(kube-controller-manager):
-
功能:运行各种控制器进程,每个控制器负责维护集群的不同方面,确保实际状态与期望状态一致。
-
常见控制器:
- 节点控制器:负责在节点出现故障时进行通知和响应。
- 副本控制器:确保每个副本集(ReplicaSet)具有正确数量的 Pod 副本。
- 端点控制器:填充 Endpoint 对象,维护服务与 Pod 之间的映射关系。
-
-
云控制器管理器(cloud-controller-manager):
- 功能:嵌入特定云提供商的控制逻辑,允许将集群与云提供商的 API 集成。
- 作用:管理与云平台相关的控制器,如节点控制器、路由控制器和服务控制器,处理云资源的创建、更新和删除。
Node内部组件
在 Kubernetes 集群中,节点(Node) 是实际运行容器化应用的工作单元。每个节点包含以下关键组件:
-
kubelet:
- 功能:节点上的核心代理,负责与控制平面通信,确保容器按照定义正确运行。
- 作用:接收并执行来自 API 服务器的 Pod 指令,监控 Pod 和容器的状态,报告节点和 Pod 的状态信息。
-
kube-proxy:
- 功能:节点上的网络代理,负责维护网络规则,处理服务的网络代理和负载均衡。
- 作用:实现 Kubernetes 服务的通信与负载均衡机制,确保网络流量正确路由到相应的 Pod。
-
容器运行时(Container Runtime):
- 功能:负责实际运行容器的底层软件。
- 作用:管理容器的生命周期,包括创建、启动、停止和删除容器。常见的容器运行时包括 Docker、containerd、CRI-O 等。
这些组件共同协作,确保节点能够高效地运行和管理容器化的应用程序,提供稳定的运行环境。
三、Docker与K8s的关系
互补性: Docker 提供了容器化的技术基础,使应用程序可以在任何地方以一致的方式运行;而 Kubernetes 则提供了容器编排和管理的能力,帮助更轻松地管理和扩展应用程序。
集成性: Kubernetes 可以使用 Docker 作为容器运行时接口的一部分。这意味着 Kubernetes 可以利用 Docker 来运行容器,但 Kubernetes 也可以与其他容器运行时(如 containerd、CRI-O 等)一起工作。
抽象层: Kubernetes 提供了一层抽象,使得用户无需关心底层基础设施的具体细节,而是专注于应用的部署和服务管理。
总结
K8s的概念较为复杂,但基本的结构就是这些。如今K8s是现代云原生应用的首选平台。