Kubernetes 简介

93 阅读9分钟

K8S

k0.png

1:概述

  • Kubernetes ,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。
  • 传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
  • 新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
  • 容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在 build 或 release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。
  • Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
  • 在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

2:部署架构演进

3. 能做什么

Kubernetes 为提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足扩展要求、故障转移应用、提供部署模式等。
Kubernetes 提供:

  • 服务发现和负载均衡
  • 存储编排
  • 自动部署和回滚
  • 自动完成装箱计算
  • 自我修复
  • 密钥与配置管理

4:Kubernetes组件

Master

kube-apiserver:该组件负责公开了 Kubernetes API,负责处理接受请求的工作。
etcd:一致且高度可用的键值存储,用作 Kubernetes 的所有集群数据的后台数据库。
kube-scheduler:控制平面的组件, 负责监视新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。
kube-controller-manager:kube-controller-manager 是控制平面的组件, 负责运行控制器进程。
节点控制器(Node Controller) :负责在节点出现故障时进行通知和响应
任务控制器(Job Controller) :监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
端点分片控制器(EndpointSlice controller) :填充端点分片(EndpointSlice)对象(以提供 Service 和 Pod 之间的链接)。
服务账号控制器(ServiceAccount controller) :为新的命名空间创建默认的服务账号(ServiceAccount)。 cloud-controller-manager:

Node

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。
kubelet: kubelet 会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。 kube-proxy: kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
容器运行时(Container Runtime) :这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。 Kubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。

插件(Addons)

DNS :尽管其他插件都并非严格意义上的必需组件,但几乎所有 Kubernetes 集群都应该有集群 DNS, 因为很多示例都需要 DNS 服务。
Web 界面(仪表盘) : Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身, 并进行故障排除。
容器资源监控:容器资源监控 将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中, 并提供浏览这些数据的界面。
集群层面日志:集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中, 这种集中日志存储提供搜索和浏览接口。
网络插件:网络插件 是实现容器网络接口(CNI)规范的软件组件。它们负责为 Pod 分配 IP 地址,并使这些 Pod 能在集群内部相互通信。

5:架构

k1.png

k2.png

核心组件

Kubernetes主要由以下几个核心组件构成:

etcd 保存了整个集群的状态;
api server 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等级制;
controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet 负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理;
Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡; 除上述核心组件,还有一些推荐的插件
CoreDNS 负责为整个集群提供DNS服务
Ingress Controller 为服务提供外网入口
Prometheus 提供资源监控
Dashboard 提供GUI
Federation 提供跨可用区的集群

6: 核心概念

Kubernetes 是一个基于容器化技术的分布式应用程序编排平台,其核心概念主要包括 Pod、Service、Namespace、Deployment、StatefulSet、DaemonSet、Job 和 CronJob 等。

Pod

定义: Pod是Kubernetes中最小的可部署对象,用于托管容器应用程序。一个Pod可以包含一个或多个容器,这些容器共享网络和存储,并共同部署到同一节点上。
作用: Pod是Kubernetes管理的最小单元,它提供了一种将容器组合成一个逻辑单元的方式,以便在集群中共同部署和管理。

Deployment

定义: Deployment是用于定义Pod如何部署和更新的控制器。它允许用户指定副本数量、升级策略等,并确保指定的Pod始终处于预期状态。
作用:Deployment通过管理ReplicaSet来确保Pod的副本数量符合预期,并支持滚动更新和回滚操作,使得应用程序的部署和更新更加灵活和可靠。

Service

定义: Service是一种抽象,用于定义一组Pod的访问方式。通过Service,可以为一组Pod提供统一的DNS名称和稳定的IP地址,实现负载均衡和服务发现。 作用:Service为Pod提供稳定的访问入口,使得客户端能够透明地访问后端Pod集群,同时支持负载均衡和故障转移。

Namespace

定义: Namespace提供了一种将集群划分为多个虚拟集群的方式。每个Namespace都可以包含自己的资源对象,帮助组织和隔离不同团队或项目的资源。
作用:Namespace通过逻辑隔离集群资源,提高了集群的可用性和安全性,使得不同团队或项目可以独立管理自己的资源。

Node

定义: Node是Kubernetes集群中的工作节点,负责运行容器化的应用程序。每个Node都有自己的资源和容量,可以托管多个Pod。
作用:Node是Kubernetes集群中的计算资源,通过运行Pod来承载应用程序的容器。Node与Master节点协作,共同实现集群的管理和控制。

Cluster

定义: Cluster是由多个Node组成的Kubernetes集合,共同管理和运行容器化应用程序。Cluster包括Master节点和Worker节点,Master节点负责集群管理,Worker节点负责运行应用程序。
作用:Cluster提供了完整的容器编排和管理能力,通过Master节点和Worker节点的协作,实现了应用程序的自动化部署、扩展和管理。

Master节点组件

定义: 集群的统一入口,各组件协调者,处理所有的API请求,并与etcd等后端存储进行交互。
Controller Manager: 包含多个控制器,负责监控集群状态并确保集群达到预期状态。
Scheduler:负责将新创建的Pod分配到集群中的节点上,根据资源需求、策略和约束条件等进行调度决策。
etcd:分布式键值存储系统,用于存储集群的配置信息、状态信息等。

Worker节点组件

Kubelet:运行在每个工作节点上的代理,负责管理节点上的Pod生命周期,与Master节点上的API Server进行通信。
kube-proxy:用于网络代理和负载均衡的组件,维护节点上的网络规则和转发规则。 容器运行时:如Docker、containerd等,负责在节点上创建和运行容器。

参考

一文了解K8S(Kubernates)-CSDN博客

什么是容器:从基础到进阶的全面介绍-CSDN博客