当前位置: 首页 > news >正文

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 分钟,发现容器编排的秘密武器!

相关文章:

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

在上一篇文章《Picturesocial | 开发实践:如何在 15 分钟内将应用容器化》,我们讨论了容器以及容器化应用程序所需的步骤。在不考虑将 container 部署到哪里的情况下创建 container,就像把家放在漂浮在海中的货运集装箱里一样,听起…...

GEE数据集——Umbra 卫星合成孔径雷达开放数据

Umbra 合成孔径雷达开放数据 Umbra 卫星生成的合成孔径雷达图像分辨率最高(优于 25 厘米/10 英寸)。合成孔径雷达卫星可以在夜间、透过云层、烟雾和雨水捕捉图像。合成孔径雷达具有监测变化的独特能力。开放数据计划(ODP)对全球十个不同地点进行监测。经常更新新图像。ODP …...

一个vue项目中通过iframe嵌套另外一个vue项目,如何让这两个项目进行通信

文章目录 需求分析父传子子传父 需求 一个vue项目中通过iframe嵌套另外一个vue项目,如何让这两个项目之间进行通信 分析 在Vue项目中通过iframe嵌套另外一个Vue项目时,可以通过postMessage方法实现这两个项目之间的通信。postMessage是HTML5新增加的API…...

上班族学习方法系列文章目录

上班族学习方法系列文章目录 文章目录 上班族学习方法系列文章目录前言一、时间管理二、答题实战 前言 上班族如果想提高自己,那么就得掌握有效的学习方法和良好的时间管理。 一、时间管理 上班族有家有业,考证或者提高学历备考时间不充分。需要学会精…...

《Lua程序设计》-- 学习9

迭代器和泛型for 迭代器和闭包 迭代器(iterator)是一种可以让我们遍历一个集合中所有元素的代码结构。在Lua语言中,通常使用函数表示迭代器:每一次调用函数时,函数会返回集合中的“下一个”元素。 一个闭包就是一个…...

GIS应用水平考试一级—2009 年度第二次

全国信息化工程师——GIS应用水平考试 2009 年度第二次全国统一考试一级 试卷说明: 1、本试卷共9页,6个大题,满分150 分,150 分钟完卷。 2、考试方式为闭卷考试。 3、将第一、二、三題的答案用铅笔涂写到(NCIE-GIS)答题卡上。 4、将第四、五、六题的答案填写到主观题答题卡上…...

【计算机视觉】万字长文详解:卷积神经网络

以下部分文字资料整合于网络,本文仅供自己学习用! 一、计算机视觉概述 如果输入层和隐藏层和之前一样都是采用全连接网络,参数过多会导致过拟合问题,其次这么多的参数存储下来对计算机的内存要求也是很高的 解决这一问题&#x…...

Vue3项目封装一个Element-plus Pagination分页

前言:后台系统分页肯定是离不开的,但是ui框架都很多,我们可以定义封装一种格式,所有项目按到这个结构来做. 实例: 第一步:在项目components组件新建一个分页组件,用来进行封装组件. 第二步:根据官方的进行定义,官方提供的这些,需要我们封装成动态模式 第三步:代码改造 <!-…...

node.js(nest.js控制器)学习笔记

nest.js控制器&#xff1a; 控制器负责处理传入请求并向客户端返回响应。 为了创建基本控制器&#xff0c;我们使用类和装饰器。装饰器将类与所需的元数据相关联&#xff0c;并使 Nest 能够创建路由映射&#xff08;将请求绑定到相应的控制器&#xff09;。 1.获取get请求传参…...

Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用

文章目录 一、Builder模式二、工厂模式三、单例模式四、代理模式五、组合模式六、模板方式模式七、适配器模式八、装饰器模式九、迭代器模式 虽然我们都知道有23种设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;Mybatis源码中使用了大…...

用的到的linux-文件移动-Day2

前言&#xff1a; 在上一节&#xff0c;我们复习了cd大法和创建生成文件和文件夹的方法&#xff0c;介绍了一些“偷懒”&#xff08;高效&#xff09;的小技巧&#xff0c;本节&#xff0c;我们一起来探讨下&#xff0c;我们对文件移动操作时有哪些可以偷懒的小技巧~ 一、复制…...

红队打靶练习:INFOSEC PREP: OSCP

目录 信息收集 1、arp 2、nmap WEB 信息收集 wpscan dirsearch ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.110.128 Starting arp-scan 1.10.0 with 256 ho…...

【linux】文件修改记录

是的&#xff0c;在Linux上&#xff0c;您可以使用’ find 命令检查最近修改的文件。此实用程序可以搜索在指定天数内修改过的文件。你可以这样使用它: 查找主目录中最近24小时(1天)内修改过的文件。 find ~ -type f -mtime -1命令说明: -“~”表示您的主目录。 ’ -type f…...

Vue学习Element-ui

声明&#xff1a;本文来源于黑马程序员PDF讲义 Ajax 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是 互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2…...

存内计算技术—解决冯·诺依曼瓶颈的AI算力引擎

文章目录 存内计算技术背景CSDN首个存内计算开发者社区硅基光电子技术存内计算提升AI算力知存科技存算一体芯片技术基于存内计算的语音芯片的实现挑战 参考文献 存内计算技术背景 存内计算技术是一种革新性的计算架构&#xff0c;旨在克服传统冯诺依曼架构的瓶颈&#xff0c;并…...

数据结构--树

一、树的基本术语 结点:树中的一个独立单元 结点的度:结点下分支的个数 树的度:树中所有结点中度的最大值 非终端结点:度不为0的结点 双亲和孩子:结点下的子树称为该结点的孩子.相应地,该结点称为孩子的双亲 兄弟:同一个双亲的孩子之间 祖先:从根到该结点所经分支上的所…...

计算机网络_1.3电路交换、分组交换和报文交换

1.3电路交换、分组交换和报文交换 一、电路交换1、“电路交换”例子引入2、电路交换的三个阶段3、计算机之间的数据传送不适合采用电路交换 二、分组交换1、发送方&#xff08;1&#xff09;报文&#xff08;2&#xff09;分组&#xff08;3&#xff09;首部 2、交换节点3、接收…...

【AI视野·今日NLP 自然语言处理论文速览 第七十七期】Mon, 15 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 15 Jan 2024 Totally 57 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Machine Translation Models are Zero-Shot Detectors of Translation Direction Authors Michelle Wastl, Ja…...

神经网络的一些常规概念

epoch&#xff1a;是指所有样本数据在神经网络训练一次&#xff08;单次epoch(全部训练样本/batchsize)/iteration1&#xff09;或者&#xff08;1个epochiteration数 batchsize数&#xff09; batch-size&#xff1a;顾名思义就是批次大小&#xff0c;也就是一次训练选取的样…...

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程

【从零开始的rust web开发之路 三】orm框架sea-orm入门使用教程 文章目录 前言一、引入依赖二、创建数据库连接简单链接连接选项开启日志调试 三、生成实体安装sea-orm-cli创建数据库表使用sea-orm-cli命令生成实体文件代码 四、增删改查实现新增数据主键查找条件查找查找用户名…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...