文章目录

  • 1.概述
  • 2.什么是容器引擎?
  • 3.什么是容器?
  • 4.什么是容器编排?
  • 5.容器编排工具
  • 6.什么是K8s?
  • 7.为什么市场推荐K8s
  • 8.K8s架构
  • 9.K8s组件
  • 10.为什么需要 k8s
    • 传统部署时代
    • 虚拟化部署时代
    • 容器部署时代
  • 11.k8s 能做什么?
  • 12.k8s 不能做什么
  • 13.总结

1.概述

Kubernetes 这个名字起源于希腊语,解释为舵手或者飞行员。我们通常叫他 k8s 是因为 k 和 s 之间有八个字符的关系。

欢迎来到K8s入门课程。Kubernetes,也被称为K8s或Kube,是谷歌推出的业界最受欢迎的容器编排器。本K8s教程由一系列关于K8s的文章组成。在第一部分,我们将讨论什么是K8s和K8s的基本概念。

这里提到,Kubernetes 是对容器进行编排,而并非是一种类似于 Docker 的容器,它是一个可移植、可扩展的开源平台,用于 管理容器化的工作负载和服务,可促进声明式配置和自动化,它拥有一个庞大且快速增长的生态,其服务、支持、和工具的使用都相当广泛。

本课程是专为初学者开设的,你可以零基础学习这项技术。我们将带你了解全部K8s的基础知识,帮你理解这些概念。

在开始学习K8s之前,让我们对容器引擎和容器有一个基本的了解。

2.什么是容器引擎?

容器引擎允许你绑定和运行一个应用在一个容器里,这是一个松散隔离的环境。由于隔离性和安全性,你可以在一台主机上操作多个容器。

容器引擎利用了操作系统的内核资源隔离特性,可以在同一个操作系统上运行多个容器。人们通常把容器引擎比作虚拟机(VMs)。

另一方面,虚拟机利用物理硬件资源抽象层之上可执行代码封装了整个操作系统。

3.什么是容器?

一个容器镜像是一个可运行的软件包,其中包含了一个完整的可执行程序,包括代码和运行时需要应用、系统库和全部重要设置的默认值。

应用程序通过使用容器与底层的宿主机架构解耦。如下图所示,我们可以利用底层机器在容器引擎之上运行多个容器。这促进了容器在各种操作系统和云场景中的部署。

容器通过容易扩展和部署应用程序的特性帮助企业实现现代化。然而,重新建立一个全新的基础环境,容器也带来了额外的问题和复杂性。

每天有数千个容器实例被大型和小型软件组织部署,这给他们的管理带来了持续增长的挑战。那么,他们是如何做到的呢?

4.什么是容器编排?

容器编排与容器的生命周期管理相关,特别是在大型动态环境中。软件团队用容器编排器来控制和自动化容器管理的各种任务。

容器编排器可以工作在使用容器的任何环境。它可以帮助你在多个环境中部署相同的程序,而不需要重新编写它。

5.容器编排工具

容器编排技术提供了一个控制容器和微服架构的框架。容器生命周期管理可以通过各种容器编排器解决方案来实现,Kubernetes、Docker Swarm和Apache Mesos是三种常见的解决方案/编排工具。

Docker Swarm是Docker原生工具,非常容易安装和配置。K8s需要大量手工干预来配置其组件,例如 etcd、flannel 和 docker 引擎。

与其他工具相比,K8s凭借其各种优势和功能特性在行业占据主导地位。

6.什么是K8s?

K8s是一个最初由Google开发的,用于自动化部署、扩展和管理容器化应用的开源容器编排器技术。

K8s使部署和管理微服务架构应用程序变得很简单。它通过在集群之上形成一个抽象层来实现这一点,允许开发团队平滑地部署应用程序,而 K8s主要处理以下任务:

  • 控制和管理应用程序对资源的使用

  • 自动负载均衡应用程序的多个实例之间请求

  • 监控资源使用和资源限制,为了可以自动阻止应用消耗过多的资源并且可以再次恢复它们

  • 如果主机资源耗尽或主机死机,将应用程序实例从一台主机迁移到另一台主机是一个可行的选项

  • 当有新的主机加入集群时,新增加的额外资源可以被自动使用

7.为什么市场推荐K8s

K8s是第一个由云原生计算基金会(Cloud Native Computing Foundation, CNCF)和谷歌基金会倡议的项目,是继Linux之后增长最快的开源软件项目。

为什么现在有很多企业依赖K8s来满足他们的容器编排需求?

原因有很多:

  • 可移植性和灵活性:K8s有很强的兼容性,因为它可以在各种基础设施和环境设置下运行。大多数其他编排器没有这种灵活性。它们被锁定在特定的运行时或基础架构中。

  • 开源:CNCF负责管理K8s,这是一个完全开源、由社区驱动的项目。它有许多重要的企业赞助商,但没有一家公司能“控制”这个平台或者控制它的发展方向。

  • 多云兼容性:K8s不但可以将工作负载托管在单个云上,而且可以将工作负载分布在多个云上。 K8s也能轻松地将其环境从一个云扩展到另一个云。虽然其它编排器也能支持多云架构,但K8s在多云兼容性性方面可以完全超越它们。

  • 市场领导者:大部分公司都在使用K8s。根据红帽公司的一项调查,K8s被客户广泛使用 (88%),尤其在生产环境中(74%)。

8.K8s架构

K8s是一个架构良好的分布式系统的例子。它将集群中的所有机器都视为单个资源池的一部分。

K8s与其他成熟的分布式系统一样,有两层:头节点和工作节点。

头节点或主节点由控制面和工作节点应用程序组成。一个K8s集群由许多头节点和工作节点组成。

K8s引入了很多术语来描述应用程序的结构。

我们将带大家学习每个术语。

9.K8s组件

头节点/主节点和工作节点由它自己的组件组成,可以确保编排器稳定地运行。

  • 控制平面
    控制平面是管理员和用户管理不同节点的地方。它通过HTTP调用接收命令或者连接到系统并且运行命令行脚本。顾名思义,它控制了K8s与应用程序的交互方式。

  • API 服务器
    API 服务器为K8s集群提供了一个REST接口。 所有在pod上激活的服务和别的对象都是可以用可编程的方式与与终端进行交互。

  • 调度器
    调度器负责将任务分配给各个节点。它监控资源容量并保证工作节点的性能保持在可接受的范围内。

  • 控制器管理器
    K8s控制器管理器是管理K8s核心控制循环的服务。它负责确保集群的共享状态正常运行。

  • Etcd
    K8s使用了Etcd,一个提供分布式键值存储的数据库,用来共享集群的整体状态的信息。

  • 节点
    节点是运行了pod的物理机或虚拟机。控制平面管理集群中的每个节点,该节点包含运行 pod所需的服务。

  • Pods
    K8s pod 是K8s管理容器集的最小单位。 每个pod有一个分配给pod中的所有容器的单独的IP 地址。在pod中的容器内存和存储资源是共享的。当应用程序只有一个进程时,pod 也可以有一个容器。

  • Kubelet
    Kubelet是一个工作节点组件。它的任务是跟踪pod及其容器的运行状态。它与pod的YAML 或JSON描述文件相关。Kubelet检查 pod 规格并确定 pod 是否健康。

  • Kube代理
    Kube代理是一个网络代理和负载均衡器,充当每个节点和API服务器之间的连接。它在集群中的每个节点上运行,并允许你从内部和外部连接到pod。

  • Kubectl
    Kubectl是K8s的命令行工具。它用于部署应用程序、监控和控制集群资源以及查看日志。

从用户的角度来看,Kubectl 是你的K8s的控制面板。它使你能够执行所有K8s操作。从技术角度来看,Kubectl 是K8s API的客户端。

10.为什么需要 k8s

既然都有了 Docker 这样的容器,并且使用起来也很方便,那么为什么需要使用到 Kubernetes 呢?摘取官网:概述 | Kubernetes

传统部署时代

早期,各个组织是在物理服务器上运行应用程序了,在硬件的基础上装操作系统,然后去部署应用。
由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。
例如,如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。
一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程式资源利用率不高时,剩余资源无法被分配给其他应用程式, 而且维护许多物理服务器的成本很高。

虚拟化部署时代

因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。

虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序, 而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。 通过虚拟化,你可以将一组物理资源呈现为可丢弃的虚拟机集群。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代

容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

容器的出现解决了应用和基础环境异构的问题,让应用可以做到一次构建,多次部署,容器因具有许多优势而变得流行起来,例如:

  • 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
  • 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性), 提供可靠且频繁的容器镜像构建和部署。
  • 关注开发与运维的分离:在构建、发布时创建应用程序容器镜像,而不是在部署时, 从而将应用程序与基础架构分离。
  • 可观察性:不仅可以显示 OS 级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
  • 跨开发、测试和生产的环境一致性:在笔记本计算机上也可以和在云中运行一样的应用程序。
  • 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
  • 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
  • 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
  • 资源隔离:可预测的应用程序性能。
  • 资源利用:高效率和高密度。

但是随着容器部署流行,仅仅基于容器的部署仍然有一些问题没有解决:

  • 生产环境中:需要管理运行着的应用程序的容器,保证服务不会下线。即一个容器故障,需要启动另外一个容器
  • 高并发时:需要启动多个应用保证系统的高可用,并保证多个容器负载均衡
    维护、升级版本时:需要将应用程序重新部署,部署的时候必须对之前的应用容器备份,一旦出现错误,需要手动启动之前容器保证系统运行

如果以上行为交给系统去做,那是不是更简单一点?那谁能做到这些呢?

11.k8s 能做什么?

摘取官网:kubernetes.io/zh-cn/docs/…

这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。

Kubernetes 为你提供:

  • 服务发现和负载均衡
    Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排
    Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚
    你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算
    你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

  • 自我修复
    Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理
    Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

12.k8s 不能做什么

Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。 由于 Kubernetes 是在容器级别运行,而非在硬件级别,它提供了 PaaS 产品共有的一些普遍适用的功能, 例如部署、扩展、负载均衡,允许用户集成他们的日志记录、监控和警报方案。 但是,Kubernetes 不是单体式(monolithic)系统,那些默认解决方案都是可选、可插拔的。 Kubernetes 为构建开发人员平台提供了基础,但是在重要的地方保留了用户选择权,能有更高的灵活性。

Kubernetes:

  • 不限制支持的应用程序类型。 Kubernetes 旨在支持极其多种多样的工作负载,包括无状态、有状态和数据处理工作负载。 如果应用程序可以在容器中运行,那么它应该可以在 Kubernetes 上很好地运行。
  • 不部署源代码,也不构建你的应用程序。 持续集成(CI)、交付和部署(CI/CD)工作流取决于组织的文化和偏好以及技术要求。
  • 不提供应用程序级别的服务作为内置服务,例如中间件(例如消息中间件)、 数据处理框架(例如 Spark)、数据库(例如 MySQL)、缓存、集群存储系统 (例如 Ceph)。这样的组件可以在 Kubernetes 上运行,并且/或者可以由运行在 Kubernetes 上的应用程序通过可移植机制(例如开放服务代理)来访问。
  • 不是日志记录、监视或警报的解决方案。 它集成了一些功能作为概念证明,并提供了收集和导出指标的机制。
  • 不提供也不要求配置用的语言、系统(例如 jsonnet),它提供了声明性 API, 该声明性 API 可以由任意形式的声明性规范所构成。
  • 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
  • 此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。 编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。 而 Kubernetes 包含了一组独立可组合的控制过程,可以持续地将当前状态驱动到所提供的预期状态。 你不需要在乎如何从 A 移动到 C,也不需要集中控制,这使得系统更易于使用且功能更强大、 系统更健壮,更为弹性和可扩展。

13.总结

总的来说:Kubernetes 集群跑起来之后仅仅是有了一个容器编排的系统,只是给容器的操作提供了各种各样的便利,并不具有内置的服务,例如中间件、日志记录……,但是这些是可以自己运行容器去做,而不是 Kubernetes 去做,它只是一个管理中心、调度容器、编排容器。

在本文中,我们已经了解了容器编排的基本概念和K8s的架构。在我们即将发表的文章中,我们将了解K8s的重要关键特性和单节点K8s安装。

【云原生】K8s简介之什么是K8s相关推荐

  1. 【云原生之kubernetes实战】在k8s环境下部署OneNav个人书签工具

    [云原生之kubernetes实战]在k8s环境下部署OneNav个人书签工具 一.OneNav介绍 1.OneNav简介 2.OneNav特点 二.检查本地k8s环境 1.检查工作节点状态 2.检查 ...

  2. 【云原生之kubernetes实战】在k8s环境下部署Homepage个人导航页

    [云原生之kubernetes实战]在k8s环境下部署Homepage个人导航页 一.Homepage简介 二.检查本地k8s环境 1.检查工作节点状态 2.检查系统pod状态 三.安装docker- ...

  3. 【云原生之kubernetes实战】在k8s集群下部署Weave Scope监控平台

    [云原生之kubernetes实战]在k8s集群下部署Weave Scope监控平台 一.Weave Scope介绍 1.Weave Scope简介 2.Weave Scope的特点 3.Weave ...

  4. 【云原生之kubernetes实战】在k8s环境下部署Snipe-IT固定资产管理平台

    [云原生之kubernetes实战]在k8s环境下部署Snipe-IT固定资产管理平台 一.Snipe-IT介绍 二.检查本地k8s环境 1.检查工作节点状态 2.检查系统pod状态 3.检查kube ...

  5. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(上)

    目录 一.k8s 安全管理:认证.授权.准入控制概述 1.1 认证 认证基本介绍 授权基本介绍 准入控制基本介绍 为什么需要准入控制器呢? k8s 客户端访问 apiserver 的几种认证方式 ku ...

  6. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(下)

    目录 一.常见角色(role)授权的案例 1.1 允许读取核心 API 组的 Pod 资源 1.2 允许读写 apps API 组中的 deployment 资源 1.3 允许读取 Pod 以及读写 ...

  7. 叮,你收到一份云原生景观简介

    原文发表于kubernetes中文社区,为作者原创翻译 ,原文地址 更多kubernetes文章,请多关注kubernetes中文社区 云原生景观系列 叮,你收到一份云原生景观简介 云原生景观:供应层 ...

  8. 云原生和ServiceMesh主要组件--理解K8s/Istio/Envoy

    1. K8s vs Istio 1.1 k8s简介 2014 年,Google 开源了 Kubernetes,随后几年得到迅猛发展,在 2017 年奠定了容器编排调度标准的地位. Kubernetes ...

  9. 灵活、高效的云原生集群管理经验:用 K8s 管理 K8s

    作者 | 淮右.临石 **导读:**单 K8s 集群为用户提供了 Namespace 级别的隔离能力,理论上支持不超过 5K Node.15W Pod.多 K8s 集群则解决了单集群的资源隔离.故障隔 ...

最新文章

  1. 规范的 Commit Message
  2. Bootstrap按钮
  3. 我明明只是在努力工作,却被同事说成是“卷王”!!!
  4. NanoPi NEO Air使用十五:使用V4L2驱动USB摄像头
  5. Servlet版本和EL表达式
  6. 最实用的10个重构小技巧排行榜,您都用过哪些呢?
  7. ICML 2020 | Google提出最强生成式摘要预训练模型——天马
  8. vivo人工智能推荐算法岗提前批面试
  9. mysql 增删改查操作笔记
  10. 机械工程师 舒尔电子_工程师专业分类,原来工程师也能这么“多才多艺”
  11. 【MODIS数据处理#10】例五:用NDVI估算植被覆盖度
  12. 关于Dev C++等软件突然提示16位应用程序不兼容的问题
  13. 聚焦数字经济新基建,复杂美再获认可
  14. 解决弹出 “百度未授权使用地图API,可能是因为您提供的密钥不是有效的百度LBS开放平台密钥”的方法
  15. OLED有哪些优劣势?
  16. 成功案例 | 助力贵州省国家税务局从VMware无缝迁移至国产化安超云平台
  17. 基于OpenSSL的CA建立及证书签发(签发单域名/IP)
  18. html不兼容的原因,浏览器不兼容的原因和解决方法
  19. java计算机毕业设计新能源汽车租赁管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  20. 八道经典的面试链表题--------快乐人的java巩固日记[1]

热门文章

  1. mysql proxy mycat_mysql数据库代理MyCAT搭建
  2. 候选码,主码,外码,主属性,非主属性
  3. Git的基本概念和SourceTree的使用
  4. audioread.NoBackendError
  5. 逻辑回归(吴恩达机器学习笔记)
  6. php就业薪资排名_山东第三季度就业难度指数报告:重工行业就业难
  7. AI+医疗:使用神经网络进行医学影像识别分析 ⛵
  8. 什么是模块化?模块化有哪些优缺点
  9. 2019年4月10日
  10. TOJ 4120 Zombies VS Plants