译者:范晓波
欢迎来到K8s入门课程。Kubernetes,也被称为K8s或Kube,是谷歌推出的业界最受欢迎的容器编排器。本K8s教程由一系列关于K8s的文章组成。在第一部分,我们将讨论什么是K8s和K8s的基本概念。
本课程是专为初学者开设的,你可以零基础学习这项技术。我们将带你了解全部K8s的基础知识,帮你理解这些概念。
在开始学习K8s之前,让我们对容器引擎和容器有一个基本的了解。
容器引擎允许你绑定和运行一个应用在一个容器里,这是一个松散隔离的环境。由于隔离性和安全性,你可以在一台主机上操作多个容器。
容器引擎利用了操作系统的内核资源隔离特性,可以在同一个操作系统上运行多个容器。人们通常把容器引擎比作虚拟机(VMs)。
另一方面,虚拟机利用物理硬件资源抽象层之上可执行代码封装了整个操作系统。
一个容器镜像是一个可运行的软件包,其中包含了一个完整的可执行程序,包括代码和运行时需要应用、系统库和全部重要设置的默认值。
应用程序通过使用容器与底层的宿主机架构解耦。如下图所示,我们可以利用底层机器在容器引擎之上运行多个容器。这促进了容器在各种操作系统和云场景中的部署。
容器通过容易扩展和部署应用程序的特性帮助企业实现现代化。然而,重新建立一个全新的基础环境,容器也带来了额外的问题和复杂性。
每天有数千个容器实例被大型和小型软件组织部署,这给他们的管理带来了持续增长的挑战。那么,他们是如何做到的呢?
容器编排与容器的生命周期管理相关,特别是在大型动态环境中。软件团队用容器编排器来控制和自动化容器管理的各种任务。
容器编排器可以工作在使用容器的任何环境。它可以帮助你在多个环境中部署相同的程序,而不需要重新编写它。
容器编排技术提供了一个控制容器和微服架构的框架。容器生命周期管理可以通过各种容器编排器解决方案来实现,Kubernetes、Docker Swarm和Apache Mesos是三种常见的解决方案/编排工具。
Docker Swarm是Docker原生工具,非常容易安装和配置。K8s需要大量手工干预来配置其组件,例如 etcd、flannel 和 docker 引擎。
与其他工具相比,K8s凭借其各种优势和功能特性在行业占据主导地位。
K8s是一个最初由Google开发的,用于自动化部署、扩展和管理容器化应用的开源容器编排器技术。
K8s使部署和管理微服务架构应用程序变得很简单。它通过在集群之上形成一个抽象层来实现这一点,允许开发团队平滑地部署应用程序,而 K8s主要处理以下任务:
控制和管理应用程序对资源的使用
自动负载均衡应用程序的多个实例之间请求
监控资源使用和资源限制,为了可以自动阻止应用消耗过多的资源并且可以再次恢复它们
如果主机资源耗尽或主机死机,将应用程序实例从一台主机迁移到另一台主机是一个可行的选项
当有新的主机加入集群时,新增加的额外资源可以被自动使用
K8s是第一个由云原生计算基金会(Cloud Native Computing Foundation, CNCF)和谷歌基金会倡议的项目,是继Linux之后增长最快的开源软件项目。
为什么现在有很多企业依赖K8s来满足他们的容器编排需求? 原因有很多:
可移植性和灵活性:K8s有很强的兼容性,因为它可以在各种基础设施和环境设置下运行。大多数其他编排器没有这种灵活性。它们被锁定在特定的运行时或基础架构中。
开源:CNCF负责管理K8s,这是一个完全开源、由社区驱动的项目。它有许多重要的企业赞助商,但没有一家公司能“控制”这个平台或者控制它的发展方向。
多云兼容性:K8s不但可以将工作负载托管在单个云上,而且可以将工作负载分布在多个云上。 K8s也能轻松地将其环境从一个云扩展到另一个云。虽然其它编排器也能支持多云架构,但K8s在多云兼容性性方面可以完全超越它们。
市场领导者:大部分公司都在使用K8s。根据红帽公司的一项调查,K8s被客户广泛使用 (88%),尤其在生产环境中(74%)。
K8s是一个架构良好的分布式系统的例子。它将集群中的所有机器都视为单个资源池的一部分。
K8s与其他成熟的分布式系统一样,有两层:头节点和工作节点。
头节点或主节点由控制面和工作节点应用程序组成。一个K8s集群由许多头节点和工作节点组成。
K8s引入了很多术语来描述应用程序的结构。 我们将带大家学习每个术语。
头节点/主节点和工作节点由它自己的组件组成,可以确保编排器稳定地运行。
控制平面是管理员和用户管理不同节点的地方。它通过HTTP调用接收命令或者连接到系统并且运行命令行脚本。顾名思义,它控制了K8s与应用程序的交互方式。
API 服务器为K8s集群提供了一个REST接口。 所有在pod上激活的服务和别的对象都是可以用可编程的方式与与终端进行交互。
调度器负责将任务分配给各个节点。它监控资源容量并保证工作节点的性能保持在可接受的范围内。
K8s控制器管理器是管理K8s核心控制循环的服务。它负责确保集群的共享状态正常运行。
K8s使用了Etcd,一个提供分布式键值存储的数据库,用来共享集群的整体状态的信息。
节点是运行了pod的物理机或虚拟机。控制平面管理集群中的每个节点,该节点包含运行 pod所需的服务。
K8s pod 是K8s管理容器集的最小单位。 每个pod有一个分配给pod中的所有容器的单独的IP 地址。在pod中的容器内存和存储资源是共享的。当应用程序只有一个进程时,pod 也可以有一个容器。
Kubelet是一个工作节点组件。它的任务是跟踪pod及其容器的运行状态。它与pod的YAML 或JSON描述文件相关。Kubelet检查 pod 规格并确定 pod 是否健康。
Kube代理是一个网络代理和负载均衡器,充当每个节点和API服务器之间的连接。它在集群中的每个节点上运行,并允许你从内部和外部连接到pod。
Kubectl是K8s的命令行工具。它用于部署应用程序、监控和控制集群资源以及查看日志。
从用户的角度来看,Kubectl 是你的K8s的控制面板。它使你能够执行所有K8s操作。从技术角度来看,Kubectl 是K8s API的客户端。
在本文中,我们已经了解了容器编排的基本概念和K8s的架构。在我们即将发表的文章中,我们将了解K8s的重要关键特性和单节点K8s安装。