Picturesocial | 只要 5 分钟,发现容器编排的秘密武器!

在上一篇文章《Picturesocial | 开发实践:如何在 15 分钟内将应用容器化》,我们讨论了容器以及容器化应用程序所需的步骤。在不考虑将 container 部署到哪里的情况下创建 container,就像把家放在漂浮在海中的货运集装箱里一样,听起来既浪漫又可怕。如果想过上安全而惬意的生活,肯定需要电、水、煤气、食物、垃圾回收…..最好再有些社交活动。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

在这篇文章中,我们将了解 Kubernete ——一个容器的编译工具,帮你把漂浮在海上的集装箱改变成安全且舒服的家。这是 Picturesocial 架构中非常重要的部分。

Picturesocial 会有多个 API,我们希望它们在维护、部署和开发等不同阶段保持彼此独立。因此,我们决定使用容器化架构。

这其实没有那么复杂,它只是意味着你正在使用容器和容器编译器。Container Orchestrator 负责处理编排所需的所有容器、容器副本、网络、存储和基础设施的组件。对于容器编排器,如今最受欢迎的就是 Kubernetes。这要归功于其活跃的社区、持续有效的技术支持和丰富的生态系统。

我们称 Kubernetes 为 k8s,它是一款开源的容器编排器,其生态系统发展迅速,且广泛。Kubernetes 不仅帮助开发者管理容器的扩展和故障处理,还帮助开发者:

  • 服务发现和负载平衡:允许在容器和基础架构之间对网络流量进行负载平衡,以及发现容器的新副本或要移除的故障容器。

  • 自动部署和回滚:可以选择要如何部署容器、如何处理更新以及如何防止因更新、基础设施故障或容器错误而造成的停机。

  • 自动打包:Kubernetes 将根据设置的限制来使用、优化和调整可用的计算能力。

  • 自我修复:如果容器出现故障,Kubernetes 将重启容器直到其正常运行,或者将其删除并创建一个新容器。

从头开始部署和运维自己的 Kubernetes 集群并非易事,需要深入了解 Kubernetes、Linux、虚拟化、网络、安全等技术。于是,亚马逊云科技为开发者提供了 Amazon Elastic Kubernetes(Amazon EKS)服务。这是一款全托管式的 Kubernetes 解决方案,降低了开发者面向基础设施和 Kubernetes 配置、管理的复杂性,同时还确保运行环境安全的安全性。安全补丁会自动应用到运行的集群中。

Manifest (aka. YAML)

开发者可以通过两种方式实现与 Kubernetes 集群进行本地通信:Kubectl(Kube Control)或调用 REST API。两种方法都使用通用的 YAML 结构向集群发送 payload。

我们称之为 manifest,它包含了详细的指令用于:

  • 我们正在在部署什么

  • 我们如何部署它

  • 要暴露什么

  • 我们如何暴露它

以下是一个示例 YAML 模板,我们可以将其用于许多容器应用程序。下面介绍 manifest 的基本概念:

00898f77efae7cdf2c9fae88de9808fb.png

Label/标签

Kubernetes 内部的所有内容都需要一个标签,这是我们识别集群内所有资源的方式,也是我们使用 Kubectl 命令或 API 请求告诉 Kubernetes 要寻找什么的方法。

f7319ad559ba791a4b3fa8f15faa1627.png

Pods

Pods 是 Kubernetes 中最小的对象,也是容器存在的地方。

一个 Pod 可以有多个容器,但建议采用 1 对 1 的关系来避免高度耦合的故障点。Pod 的一些重要注意特性如:

  • Pod 是短暂的,这意味着如果里面的容器出现故障,最可能的结果是 Kubernetes 会删除该 Pod 并创建一个新的。当我们部署容器的新版本时,通常会创建新的 Pod,Kubernetes 将负责更新平衡服务的后端。

  • 容器镜像必须被指定。它被定义为 repository name 和 image name,例如:[aws account id].dkr.ecr.[aws region].amazonaws.com/imageName

  • 设置资源限制是一种最佳实践。我们有两种 boundaries:

  1. 请求/Requests:这是 Pod 所得到的担保。就像你订比萨,有 30 分钟送达的保证一样。这并不意味着比萨不能更快送到,它只是一个指标,意味着单个送餐人可以处理的订单数量。对于 Requests 来说,它们指定了集群中计算资源分配的保证。如果你只有一个 Pod,那么很有可能你会得到比保证更多的计算资源;

  2. 限制/Limits:这是任何 Pod 的硬性限制。如果我们指定了 limits,即使有可用资源,Pod 的消耗量也不会超过指定的 limits。同样用送货员的例子,就像告诉他们在任何情况下都不能同时配送 3 个以上的披萨。

  • 我们在 Kubernetes 中常用的单位是:

  1. Mebibytes/兆字节 (MiB) 表示为 Mi:用作内存衡量值。要从 miB 转换为 MB,你需要 miB x 1.049;

  2. Millicores(mc) 表示为 m:用作 CPU 测量值。1 个 CPU 内核表示为 1000 millicores。例如,250m 是 ¼个 CPU core。

a911a1f74c0131f429949882c549432d.png

ReplicaSet

Pod 本应根据不同的指标(例如 CPU 或内存消耗)被复制。在我们只设置 1 个副本时,也可以设置一个如下例所示的静态值。我们称这种副本设置和自动扩展规则集称为 ReplicaSet。

802e993b07fc88097b96ced85cb57c38.png

Services

我们不建议开发者直接调用 Pod。如我们之前所讨论的,它们是短暂的,这意味着 Pod 名称和 IP 是动态的。

这就是 Service 的用武之地。它提供了从同一 ReplicaSet 调用一个或多个 Pod 的单一接入点。我们将重点关注两种类型的 Service:

  • LoadBalancer/负载均衡器:当我们需要将 ReplicaSet 暴露到 Kubernetes 集群外部时,会使用这种类型的 Service。可以是私有网络,也可以公开到互联网。就 Amazon EKS 而言,需要注意两点:

  1. 服务名称必须始终以字母开头并使用 “-” 作为分隔符,例如:picturesocial-pictures;

  2. 对于私有负载均衡器:必须有服务注释。以下示例指定该服务仅在内部公开:

f653d8b75d6492c1e15d635798d52e26.png

  • clusterIP:当我们需要在 Kubernetes 集群内为使用者提供 ReplicaSet 时,会使用这种服务。这也是最常见的方法,因为如果将 Pod 保留在集群边界内,则会更安全。通过这种方式,可以为使用 Pods 添加更多的安全层,比如入口控制器、双向认证、API 网关等。我们将在以后的文章中解释更多这样的概念。

3b11e2d5dc1e9eef7b9a18d20ca2a9c5.png

服务总能检测到后端的变化,因此,如果一个 Pod 离线或被一个新的 Pod 取代,服务将停止发送流量并重新路由到工作中的 Pod。这就是为什么我们强调,即使 API 仅由一个 Pod 组成,也必须使用 Services 进行同步通信,而不是直接调用 Pod。

192bd5cdd1e504940c3ebf418a35fe36.png

Images Namespace

Kubernetes 是一个多租户容器协调器。这意味着它为同时处理多个应用程序和环境的解决方案而设计。

这就是 namespace 的用武之地。Namespac 作为 Kubernetes 内部资源的逻辑分隔符,可以将资源(Pod、服务等)绑定到特定的 namespac 并设置特定的权限。例如,可以设置为 namespac A 中的 Pod 无法访问 namespac B 中的 Pod。

我建议将业务域的资源分组到一个 namespac 中,这样可以更轻松地找到所需的资源,也可以让团队在软件项目中独立维护特定的业务领域。

ccaf3ebe7c7d6b078c93ee7f9a7a2b13.png

Kubernetes 适合托管哪种类型的应用程序

任何情况下都使用 Kubernetes 就像开着 F1 赛车去超市。虽然我希望这样做,但还是有点扯。当我选择何时使用 kubernetes 时,会使用以下标准 (当然也需要根据实际情况进行调整) :

  • 我的容器化架构由至少 10 种不同的服务组成,这些服务在同一基础架构上独立运行和扩展。

  • 我的服务存在于本地网络环境中的依赖关系,并且需要流量策略和身份验证才能调用这些依赖关系。

  • 我正在与不同的团队合作,维护和开发同一应用程序的不同组件。

  • 我需要控制计算、网络、网络策略、滚动策略和 Orchestrator 版本控制。

  • 我需要一个使用一致的工具集和部署策略从本地扩展到云的解决方案。

如果满足以上两个或更多选项,那么 Kubernetes 是一个不错的选择。

作为一篇科普类文章,这篇信息量略大,刚接触容器的开发者可能需要消化一段时间,但是我们希望帮助刚入门的开发者了解容器编译的工作原理并熟悉一些专用术语。在后续的 Picturesocial 系列文章中,我将通过一个具体的案例演示来展开这些概念是如何应用的。

下一篇文章,我们将一起学习如何使用 Terraform 实际创建 Amazon EKS 集群!

希望你开心工作,努力生活~

往期推荐

#架构模型最佳实践

#GitOps 最佳实践

#亚马逊的开源文化

文章作者

Ana Cunha、Jose Yapur,

Developer Advocate, Amazon Web Services

文章译者

郑予彬

亚马逊云科技资深开发者布道师

文章来源:Picturesocial | 只要 5 分钟,发现容器编排的秘密武器!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444262.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb 无线连接 操作Android设备

最近集五福活动比较热门 可以用这个工具 用自己擅长的语言写一个循环程序 运行起来就可以 自动帮我们 看视频得福卡了 很方便 while (true) {sleep(mt_rand(15, 25));system(adb shell input swipe 500 2000 500 1000 100); } 1. 首先下载 安卓开发工具 adb adb网盘链接 链接…

Vue学习笔记(二)快速入门

Vue学习笔记&#xff08;二&#xff09;快速入门 vue小试牛刀 hello-vue3.html <body><div id"app"><h1>{{msg}}</h1></div><script type"module">import {createApp} from https://unpkg.com/vue3/dist/vue.esm-b…

AI赋能编程 | 自动化工具助力高效办公

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言泡泡AI工具卡片思维导图Markdown编辑器 其他工具文件免费处理工具结语 合集…

web应用课——(第四讲:中期项目——拳皇)

代码AC Git地址&#xff1a;拳皇——AC Git链接

【51单片机系列】中断优先级介绍及使用

文章来源&#xff1a;《51单片机原理及应用&#xff08;第3版&#xff09;》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。 当CPU处理低优先级中断&#xff0c;又发生更高级中断时&#xff0c;此时中断处理过程如下图所示。 一个正在执行的低优先级中断服…

AIOps案例 | 大型物流公司的多数据源统一监控及告警压缩处理

本文作者&#xff1a;擎创夏洛克AIOps &#xff08;内容节选&#xff09; 一说起智能运维在国内的应用&#xff0c;大量的客户都分布于金融行业。因为金融业数据量巨大、对运维故障容忍度更低&#xff0c;所以在智能运维上的投入会更大&#xff0c;应用水平也更高。 但越来越多…

黑马程序员前端web入门:新浪新闻

黑马程序员前端web入门&#xff1a;新浪新闻 几点学习到的&#xff1a; 设置li无圆点: list-style: none;设置a无下划线&#xff1a;text-decoration: none;a属于行内元素&#xff0c;高度hegiht不起作用&#xff0c;可以设置 display: block; 把它变成块元素。此时&#xff0c…

机器学习数学基础

机器学习基础 1、标量、向量、矩阵、张量2、概率函数、概率分布、概率密度、分布函数3、向量的线性相关性4、最大似然估计5、正态分布(高斯分布)6、向量的外积(叉积)7、向量的内积(点积)8、超平面(H)1、标量、向量、矩阵、张量 标量、向量、矩阵和张量是线性代数中不同…

C++关键词auto详解

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、小思考 随着我们对于C的不断学习&#xff0c;遇到的程序越来越复杂&#xff0c;程序中用到的类型也越来越复杂…

通用CI/CD软件平台TeamCity全新发布v2023.11——增强Git托管平台的集成

TeamCity是一个通用的 CI/CD 软件平台&#xff0c;可以实现灵活的工作流、协作和开发做法。我们的解决方案将帮助在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 TeamCity 2023.11正式版下载 TeamCity 2023.11 带来了矩阵构建和构建缓存等多项备受期待的功能&a…

【Linux取经路】进程控制——进程等待

文章目录 一、进程创建1.1 初识 fork 函数1.2 fork 函数返回值1.3 写时拷贝1.4 fork 的常规用法1.5 fork 调用失败的原因1.6 创建一批进程 二、进程终止2.1 进程退出场景2.2 strerror函数2.3 errno全局变量2.4 程序异常2.5 进程常见退出方法2.6 exit 函数2.7 _exit 函数和 exit…

miniReact<一>

一、工程化配置 1.1 目录结构 1.1.1 Multi-repo VS Mono-repo Multi-repo 每个库有自己独立的仓库&#xff0c;逻辑清晰&#xff0c;协同管理复杂 Mono-repo 很方便管理不同独立的库的生命周期&#xff0c;会有更高的操作复杂度 项目有很多包&#xff0c;同时管理多个不同的…