揭开 Kubernetes 的神秘面纱


揭开 Kubernetes 的神秘面纱

文章插图
 
Kubernetes 是一款生产级的开源系统,用于容器化应用程序的自动部署、扩展和管理 。本文关于使用 Kubernetes 来管理容器 。-- Abhinav Nath Gupta(作者)
“容器”已成为最新的流行语之一 。但是,这个词到底意味着什么呢?说起“容器”,人们通常会把它和 Docker 联系起来,Docker 是一个被定义为软件的标准化单元容器 。该容器将软件和运行软件所需的环境封装到一个易于交付的单元中 。
容器是一个软件的标准单元,用它来打包代码及其所有依赖项,这样应用程序就可以从一个计算环境到另一个计算环境快速可靠地运行 。容器通过创建类似于 ISO 镜像的方式来实现此目的 。容器镜像是一个轻量级的、独立的、可执行的软件包,其中包含运行应用程序所需的所有信息,包括代码、运行时、系统工具、系统库和设置 。
容器镜像在运行时变成容器,对于 Docker 容器,镜像在 Docker 引擎上运行时变成容器 。容器将软件与环境隔离开来,确保不同环境下的实例,都可以正常运行 。
什么是容器管理?容器管理是组织、添加或替换大量软件容器的过程 。容器管理使用软件来自动化创建、部署和扩展容器 。这一过程就需要容器编排,容器编排是一个自动对基于容器的应用程序进行部署、管理、扩展、联网和提供可用性的工具 。
KubernetesKubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,它有助于配置和自动化 。它最初由 google 开发,拥有一个庞大且快速增长的生态系统 。Kubernetes 的服务、技术支持和工具得到广泛应用 。
【揭开 Kubernetes 的神秘面纱】Google 在 2014 年开源了 Kubernetes 项目 。Kubernetes 建立在 Google 十五年大规模运行生产工作负载的经验基础上,并结合了社区中最好的想法和实践以及声明式句法的使用 。
下面列出了与Kubernetes生态系统相关的一些常用术语 。
Pod:Pod 是 Kubernetes 应用程序的基本执行单元,是你创建或部署的 Kubernetes 对象模型中的最小和最简单的单元 。Pod 代表在 Kubernetes 集群上运行的进程 。
Pod 将运行中的容器、存储、网络 IP(唯一)和控制容器应如何运行的命令封装起来 。它代表 Kubernetes 生态系统内的单个部署单元,代表一个应用程序的单个实例,该程序可能包含一个或多个紧密耦合并共享资源的容器 。
Kubernetes 集群中的 Pod 有两种主要的使用方式 。第一种是运行单个容器 。即“一个容器一个 Pod”,这种方式是最常见的 。第二种是运行多个需要一起工作的容器 。
Pod 可能封装一个由紧密关联且需要共享资源的多个同位容器组成的应用程序 。
副本集(ReplicaSet):副本集的目的是维护在任何给定时间运行的一组稳定的副本容器集 。副本集包含有关一个特定 Pod 应该运行多少个副本的信息 。为了创建多个 Pod 以匹配副本集条件,Kubernetes 使用 Pod 模板 。副本集与其 Pod 的链接是通过后者的 metas.ownerReferences 字段实现,该字段指定哪个资源拥有当前对象 。
服务(Services):服务是一种抽象,用来公开一组 Pod 功能 。使用 Kubernetes,你无需修改应用程序即可使用陌生服务发现机制 。Kubernetes 给 Pod 提供了其自己的 IP 地址和一组 Pod 的单个 DNS 名称,并且可以在它们之间负载平衡 。
服务解决的一个主要问题是 Web 应用程序前端和后端的集成 。由于 Kubernetes 将幕后的 IP 地址提供给 Pod,因此当 Pod 被杀死并复活时,IP 地址会更改 。这给给定的后端 IP 地址连接到相应的前端 IP 地址带来一个大问题 。服务通过在 Pod 上提供抽象来解决此问题,类似于负载均衡器 。
卷(Volumes): Kubernetes 卷具有明确的生命周期,与围绕它的 Pod 相同 。因此,卷超过了 Pod 中运行的任何容器的寿命,并且在容器重新启动后保留了数据 。当然,当 Pod 不存在时,该卷也将不再存在 。也许比这更重要的是 Kubernetes 支持多种类型的卷,并且 Pod 可以同时使用任意数量的卷 。
卷的核心只是一个目录,其中可能包含一些数据,Pod 中的容器可以访问该目录 。该目录是如何产生的,它后端基于什么存储介质,其中的数据内容是什么,这些都由使用的特定卷类型来决定的 。
为什么选择 Kubernetes?容器是捆绑和运行应用程序的好方法 。在生产环境中,你需要管理运行应用程序的容器,并确保没有停机时间 。例如,如果一个容器发生故障,则需要启动另一个容器 。如果由系统自动实现这一操作,岂不是更好? Kubernetes 就是来解决这个问题的!Kubernetes 提供了一个框架来弹性运行分布式系统 。该框架负责扩展需求、故障转移、部署模式等 。例如,Kubernetes 可以轻松管理系统的金丝雀部署 。


推荐阅读