Kubernetes----基础概念篇

前言:

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

名称 Kubernetes 源于希腊语,意为 “舵手” 或 “飞行员”。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在 Google 在大规模运行生产工作负载方面拥有十几年的经验的基础上,结合了社区中最好的想法和实践。

一、Kubernetes 发展
  • 传统部署时代

    早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。

    例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且组织维护许多物理服务器的成本很高

在这里插入图片描述

  • 虚拟化部署时代

    作为解决方案,引入了虚拟化功能,它允许您在单个物理服务器的 CPU 上运行多个虚拟机(VM)。虚拟化功能允许应用程序在 VM 之间隔离,并提供安全级别,因为一个应用程序的信息不能被另一应用程序自由地访问。

    因为虚拟化可以轻松地添加或更新应用程序、降低硬件成本等等,所以虚拟化可以更好地利用物理服务器中的资源,并可以实现更好的可伸缩性
    在这里插入图片描述

  • 容器部署时代

容器类似于 VM,但是它们具有轻量级的隔离属性,可以在应用程序之间共享操作系统(OS)。因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。由于它们与基础架构分离,因此可以跨云和 OS 分发进行移植
在这里插入图片描述

二、Kubernetes 作用
  • 容器因为具有许多优势而变得很流行,容器是打包和运行应用程序非常好的方式,在生产环境中会面临一个问题:

    在日常工作中,管理运行的应用程序,并确保不会停机,例如,如果一个容器发送故障,则需要启动另一个容器。如果给系统处理,效率会较低

三、 Kubernetes 其他特性
  • Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统,由于 Kubernetes 在容器级别而不是在硬件级别运行,因此它提供了 PaaS 产品共有的一些普遍适用的功能,例如部署、扩展、负载均衡、日志记录和监视
  • 但是,Kubernetes 不是单一的,默认解决方案是可选和可插拔的。Kubernetes 提供了构建开发人员平台的基础,但是在重要的地方保留了用户的选择和灵活性
3.1 Kubernetes其他特性
  • ① Kubernetes 不限制支持的应用程序类型。Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上很好地运行。
  • ② Kubernetes 不部署源代码,也不构建应用程序。持续集成(CI)、交付和部署(CI/CD)工作流取决于组织的文化和偏好以及技术要求
  • ③ Kubernetes 不提供应用程序级别的服务作为内置服务,例如中间件(例如,消息中间件)、数据处理框架(例如,Spark)、数据库(例如,mysql)、缓存、集群存储系统(例如,Ceph)。这样的组件可以在 Kubernetes 上运行,并且/或者可以由运行在 Kubernetes 上的应用程序通过可移植机制(例如,开放服务代理)来访问
  • ④ Kubernetes 不指定日志记录、监视或警报解决方案。它提供了一些集成作为概念证明,并提供了收集和导出指标的机制。
  • ⑤ Kubernetes 不提供或不要求配置语言/系统(例如 jsonnet),它提供了声明性 API,该声明性 API 可以由任意形式的声明性规范所构成。
  • ⑥ Kubernetes 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统
  • ⑦ 此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。相比之下,Kubernetes 包含一组独立的、可组合的控制过程,这些过程连续地将当前状态驱动到所提供的所需状态。从 A 到 C 的方式无关紧要,也不需要集中控制,这使得系统更易于使用且功能更强大、健壮、弹性和可扩展性。
四、Kubernetes 集群架构与组件
4.1 Kubernetes 集群架构图

在这里插入图片描述

4.2 Kubernetes 各组件详解
  • master节点主要由apiserver、controller-manager和scheduler三个组件,以及一个用于集群状态存储的etcd存储服务组成,而每个node节点则主要包含kubelet、kube-proxy及容器引擎等组件。此外,完整的集群服务还依赖于一些附加组件,如kubedns等。
4.2.1 Master 节点/组件
  • Master组件

    提供集群的管理控制中心。Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用户容器。

  • **① kube-apiServer(核心组件) **

    Kubernetes API,集群的统一吐口,各组件协调者,以RESTful api 提供接口服务,所有的对象资源的增删改查和监听操作都是叫给APIServer处理后再提交给Etcd存储

  • ② kube-controller-manager

    处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManaager就是负责管理这些控制器的

    控制器包括(部分):

    • 节点控制器:负责在节点出现故障时进行通知和响应。
    • 制控制器:负责为系统中的每个复制控制器对象维护正确数量的Pod。
    • 端点控制器:填充“端点”对象(即,加入“服务和窗格”)。
    • 服务帐户和令牌控制器:为新的名称空间创建默认帐户和API访问令牌。
  • ③ kube-scheduler

    根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以再部署再同一个节点上,也可以部署再不同的节点上。

    调度算法(之后会对此进行介绍)

    • ① 预选算法:过滤nodes
    • ② 优选算法:对nodes打分
  • ④ Etcd

    分布式键值存储系统,用于保存集群状态数据,比如Pod、Service等对象信息

    Etcd 具有服务发现系统,这是mysql、Oracle数据库锁没有的,同时还有以下特点:

    • 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
    • 安全:支持SSL证书验证
    • 快速:根据官方提供的benchmark数据,单实例支持每秒2K+读操作
    • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性

    之后也会对Etcd进行单篇博客介绍

4.2.2 Node节点组件
  • 节点组件运行在Node,提供Kubernetes运行时环境,以及维护Pod。

  • ① kublet

    kubelet 是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器

  • ② kube-proxy

    在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

  • ③ docker或rocket

    容器引擎,运行容器

4.2.3 Add-ons 附加组件
  • kube-dns:负责为整个集群提供DNS服务;
  • Ingress Controller:为服务提供外网入口;
  • Heapster:提供资源监控;
  • Dashboard:提供GUI;
  • Federation:提供跨可用区的集群;
  • Fluentd-elasticsearch:提供集群日志采集、存储与查询
4.3 单节点架构工作流程
4.3.1 单节点简易图

在这里插入图片描述

4.3.2 流程详解:
  • 假设用户需创建 nginx资源(网站/调度)
  • 请求发送至master 首先需要经过apiserver(资源控制请求的唯一入口)
  • apiserver 接收到请求后首先会先记载在Etcd中
  • Etcd的数据库根据controllers manager(控制器) 查看创建的资源状态(有无状态化)
  • 通过controllers 触发 scheduler (调度器)
  • scheduler 通过验证算法 验证架构中的nodes节点,筛选出最适合创建该资源,接着分配给这个节点进行创建
  • node节点中的kubelet 负责执行master给与的资源请求,根据不同指令,执行不同操作
  • 对外提供服务则由kube-proxy开设对应的规则(代理)
  • container 容器开始运行(runtime 生命周期开始计算)
  • 外界用户进行访问时,需要经过kube-proxy 访问到container
  • 如果container 因故障而被销毁了,master节点的controllers 会再次通过scheduler 资源调度通过kubelet再次创建容器,恢复基本条件限制
五、Kubernetes 核心概念
  • Pod

    ① 最小部署单元

    ② 一组容器的集合

    ③ 一个Pod中的容器共享网络命名空间(可以理解在同一个局域网)

    ④ Pod 是短暂的(有生命周期)

  • Controllers

    ① ReplicaSet:确保预期的Pod副本数量(参数,可进行设置)

    ② Deployment:无状态应用(例如:web、nignx、apache、tomcat)

    ③ StatefulSet:有状态应用部署

    • 有状态:该应用独一无二,无法重新创建进行完美替代,例如mysql、Oracle数据库

    ④ DaemonSet:确保所有的Node运行同一个Pod(把所有的Node设置为同一个命名空间)

    ⑤ Job:一次性任务(类比linux:at)

    ⑥ Cronjob:定时任务(类比linux:crontab)

    更高层次对象,部署和管理Pod

  • Service

    防止Pod失联

    定义一组Pod访问的策略(主要作用)

    确保每个Pod之间的独立性(安全)

  • Label

    标签,附加到某个资源上,用于关联对象、查询和筛选

  • Namespaces

    命名空间,将对象逻辑上隔离

  • Annotations

    注释

总结:

本篇博客介绍了k8s中的基础概念,之后会逐步进行深入介绍~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值