当前位置: 首页 > 科技观察

了解容器编排的构建块可以使Kubernetes入门更容易

时间:2023-03-22 15:04:04 科技观察

容器编排是指用于自动化、管理和调度由单个容器定义的工作负载的工具和平台。容器编排、开源工具和专有工具领域的玩家很多,比如Hashicorp的Nomad、ApacheMesos、AWS的ECS等,当然还有谷歌的Borg项目(Kubernetes就是从这个项目演变而来的)。每种技术都有其优点和缺点,但Kubernetes的日益普及和社区的大力支持已经清楚地表明,Kubernetes目前是容器编排领域明显的领导者。Kubernetes在使用开源软件时具有明显的优势。作为一个开源平台,它可以部署在本地,在Kubernetes之上构建其他开源软件也很有意义。此外,作为最活跃的开源生态系统之一,它拥有超过40,000名贡献者,并且由于许多开发者已经熟悉Kubernetes,用户可以更轻松地集成基于Kubernetes的开源解决方案。将Kubernetes分解为构建块分解Kubernetes的最简单方法是查看容器编排的核心概念。容器作为基础工作模块,然后将各个组件构建在彼此之上以将系统连接在一起。有两种核心类型的组件:工??作负载管理器:一种用于托管和运行容器的方法集群管理器:一种用于表示集群决策的全局方法在Kubernetes术语中,这些角色由工作节点和管理工作的控制平面(即Kubernetes组件)组成结束。管理工作负载Kubernetes工作节点具有嵌套的组件层。底层是容器本身。集群及其组件从技术上讲,容器在容器中运行,容器是Kubernetes集群中的原子对象类型。它们之间的关系如下:Pod:Pod定义了应用程序的逻辑单元;它可以包含一个或多个容器,每个Pod部署到一个节点。节点:这是在集群中充当工作负载的虚拟机;Pod在节点上运行。集群:由工作节点组成,由控制平面管理。每个节点都运行一个名为kublet的代理,用于在容器内运行容器,以及一个管理网络规则的kube-proxy。管理集群工作节点管理容器,Kubernetes控制平面在集群上做出全局决策。控制平面及其组件控制平面由几个基本组件组成:内存存储(etcd):这是所有集群数据的后端存储。虽然可以使用其他后备存储etcd运行Kubernetes集群,但默认情况下它是一个开源分布式键值存储。调度器(kube-scheduler):调度器负责将新创建的Pod分配给合适的节点。API前端(kube-apiserver):这是开发人员可以与Kubernetes交互以部署服务、获取指标、检查日志等的网关。控制器管理器(kube-controller-manager):监控集群并进行必要的更改以保持集群处于所需状态,例如扩展节点、为每个复制控制器维护正确数量的pod,以及创建新的命名空间。控制平面做出保持集群健康的决定,并将这些决定抽象化,这样开发人员就不必担心它们。它的功能非常复杂,以至于系统用户需要了解控制平面的逻辑约束,而不要陷入细节之中。使用控制器和模板的集群组件决定了集群如何自我管理,但开发人员管理员如何告诉集群运行软件?这就是控制器和模板发挥作用的地方。控制器编排pod,而Kubernetes针对不同的用例使用不同类型的控制器。但关键的是Jobs(用于一次性作业)和ReplicaSets(用于运行一组指定的提供服务的相同容器)。与Kubernetes中的其他所有内容一样,这些概念构成了允许开发人员运行弹性服务的更复杂系统的构建块。建议不要直接使用ReplicaSets,而是使用Deployments。部署代表用户管理ReplicaSets并允许滚动更新。Kubernetes部署确保只有特定的pod在更新时被关闭,从而实现零停机部署。同样,CronJobs管理作业并用于运行计划的和重复的进程。Kubernetes的许多层允许更大程度的自定义,但CronJobs和Deployments足以满足大多数用例。一旦知道选择哪个控制器来运行服务,就需要使用模板对其进行配置。模板分析Kubernetes模板是一个YAML文件,定义了容器运行时使用的参数。和任何形式的代码配置一样,它有自己特定的格式和要求,需要学习的东西很多。但值得庆幸的是,您需要提供的信息与运行任何容器编排的代码相同:告诉它如何命名应用程序告诉它在哪里寻找容器的图像(通常称为容器注册表)告诉它要运行多少个实例(在上文中针对ReplicaSets数量的配置灵活性而言)是Kubernetes的众多优势之一。使用不同的资源和模板,您还可以提供以下集群信息:环境变量密码位置容器应挂载使用的任何数据卷允许每个容器或Pod使用多少CPU和内存容器应运行的特定命令有很多这方面的示例以及聚合来自不同资源的所有组合的模板,允许用户在Kubernetes中互操作组件并根据他们的需要自定义它们。在更大的生态系统中,开发人员可以通过使用ConfigMap和Secrets组合作业、服务和部署来组合应用程序(在部署期间),所有这些都必须仔细编排。这些编排步骤的管理可以手动完成,也可以使用一种常见的包管理选项。虽然绝对可以针对KubernetesAPI进行自己的部署,但打包配置通常是一个好主意(特别是如果要交付的开源软件可能由团队以外的人直接部署和管理)。Kubernetes的首选包管理器是Helm。使用Helm不会花费很多时间,它允许您打包软件以便轻松安装在Kubernetes集群上。总结位于容器之上的许多层和扩展可能会使容器编排变得难以理解。但是,一旦您分解各个部分并查看它们是如何相互作用的,它实际上就很清楚了。