- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
作为软件工程师,我们应该熟悉 K8s,尽管它有点像 DevOps,但它能让我们更好地了解幕后发生的事情,让我们与部署工作更密切相关,更有责任感。本文将从软件工程师的角度探讨 Kubernetes (K8s),我们将介绍其 动机、原理和核心组件 ,助力于开发者们提升 Kubernetes 的专业知识水平,能更有信心地拥抱这项前沿技术! 。
在谈论 Kubernetes 之前,首先让我们了解一下什么是 容器 。 。
当我们考虑一个这样的场景时,容器的概念就会变得很清晰:在开发人员完成满足特定需求的代码编写后,下一步就是将其打包并无缝安装到另一台主机上,确保我们的客户可以轻松安装并享受其优势。那如何打包并安装到另一台主机上?通常,我们有很多依赖项,如二进制代码、依赖库和不同的操作系统,我们需要将它们全部打成一个包,即所谓的 "容器"。 。
换句话说,我们可以将代码与所有依赖项一起装入容器,然后在远程机器上轻松运行,或者用工程术语来说, "部署我们的服务" 。 。
既然我们知道我们的服务是使用容器运输的,那么就会出现这些主要问题:
如何才能知道我们的容器服务不会崩溃?我们希望确保如果一个容器宕机,另一个容器将启动.
怎样确保这个容器有足够的资源运行?也许它占用的资源比实际需要的还要多.
如何管理版本部署,这意味着当我们升级代码时,可以在不停机的情况下完成?我们希望确保服务的高可用性.
如何让我们的容器相互对话?
当我们的请求增加或减少时,如何进行扩展或缩减? 。
在采用 K8s 之前,AppsFlyer 曾遇到过这些问题,而作为一家拥有强大平台团队的公司,我们通过内部实施解决了这些问题。例如,为了管理服务的生命周期,我们创建了一个名为"Medic"的流程,通过不断向健康检查 API 发送 GET 请求,确保我们的服务始终正常运行。 。
另一个例子是,我们的大多数服务都是通过一个 docker 容器 和用于部署与管理服务的 内部工具("Santa") 部署在一个 ec2 实例上的。这不会与任何其他服务共享,否则就会浪费资源、时间,更重要的是,还会浪费金钱。 。
从上文可以了解到,Kubernetes 的实施是为了解决我提到的挑战。 。
Kubernetes 的定义是:“这是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。”换句话说,Kubernetes 为我们提供了一个容器编排系统,用于妥善管理我们的集群,让我们可以部署、管理资源并扩展应用。K8s 将我们的容器包裹起来,为我们掌舵。 。
以下就是我们从使用 K8s 和解决上述挑战中获得的一些好处:
崩溃时容器的自行修复 ——Kubernetes 提供了一种健康检查机制。这意味着不再需要实现检查 API 来对我们的服务进行采样.
应用容器的自动分发和调度为我们提供了 节点资源的高效利用 。通过与多个应用程序共享节点实例,明智、高效地利用资源.
自动推出和回滚,无需停机 .
服务发现和负载平衡可 帮助容器相互通信 .
水平扩展可 确保开发人员在低负载或高负载的情况下同时使用应用程序 ,从而提高应用程序的性能。 。
总之,Kubernetes 是大规模管理容器化应用程序的最佳解决方案。凭借其强大的组件和自动化功能,Kubernetes 简化了应用程序生命周期的部署、扩展和管理。与直接在一个 EC2 实例上使用 Docker 相比, Kubernetes 可以节省时间和精力 ,并为管理生产中的应用程序提供基本功能。 。
最重要的是, Kubernetes 能为公司节省资金 。通过自动管理基础设施,Kubernetes 减少了对人工干预和内部工具的需求,如上所述,这可以节省大量运营成本。此外,Kubernetes 还可以帮助 优化资源利用率 ,使在相同硬件上运行更多应用程序成为可能,从而节省成本。 。
。
Kubernetes 的核心组件分为两大类: 控制平面组件和节点 。让我们来看看这些高级组件: 。
API 服务器是控制平面的核心组件,负责公开 Kubernetes API 并处理 API 请求。它是集群中其他组件(如 kubectl 命令行工具或 Kubernetes 面板)与集群交互的主要方式。 。
调度器负责根据可用资源以及指定的限制和规则,将 pod 调度到集群中的节点上。它可确保以最大限度提高资源利用率和减少资源争用的方式将 pod 放置在节点上。 。
控制管理器是在控制平面上运行的进程,负责管理集群的状态并确保其符合所需的状态。它由多个不同的控制器组成,每个控制器负责集群管理的特定方面,例如部署控制器,它负责管理集群中应用程序的部署。 。
云控制管理器是在云平台上运行 Kubernetes 时使用的特殊组件。它负责将 Kubernetes 控制平面与云提供商的 API 集成,允许集群使用云的特定功能和资源。 。
etcd 是一个分布式键值存储,用于存储 Kubernetes 集群的配置数据,包括集群的当前状态和期望状态。它用于存储需要在集群中所有节点间持久化的数据,如集群中 pod、服务和其他对象的信息。 。
Kubelet 是运行在集群中每个节点上的守护进程,负责管理该节点上的 pod。Kubelet 负责启动和停止 pod、监控 pod 的健康状况并在必要时重新启动 pod 等任务。它与 Kubernetes 控制平面通信,以接收关于运行哪些 pod 以及如何管理它们的指令,还与容器运行时(如 Docker)通信,以实际执行容器。 。
Kube-proxy 是一个在集群中每个节点上运行的守护进程,负责为集群实施虚拟网络基础设施。Kube-proxy 使用网络编程技术,根据集群网络配置中定义的规则,将网络流量转发到适当的 pod 或服务。Kube-proxy 执行的一些主要任务包括负载平衡、服务发现和网络策略执行。 。
作为开发人员,全面了解我们所遇到的技术至关重要,无论这些技术是与我们的直接职责直接相关,还是由单独的 DevOps 团队管理,本文将作为一个完美的起点,推动您深入了解 K8s 的世界。 。
K8s 拥有陡峭的学习曲线,对于开发人员太过笨重。基于平台工程理念构建的全新一代应用管理平台 Walrus 将分离研发和运维的关注点,通过提供灵活强大的应用和环境部署管理能力、可屏蔽基础设施的上层抽象, 使研发人员能够在无需了解底层技术细节的前提下自助构建、部署和运行应用程序,减轻开发人员的认知负担 。借助 Walrus 将云原生的能力和最佳实践扩展到非容器化环境,并支持任意应用形态统一编排部署,降低使用基础设施的复杂度,为研发和运维团队提供易用、一致的应用管理和部署体验,进而构建无缝协作的软件交付流程。复制下方项目链接至浏览器,即刻试用 Walrus。 。
开源地址:github.com/seal-io/walrus 。
参考链接 : https://medium.com/appsflyerengineering/hi-developer-meet-kubernetes-8652bdc210d9 。
最后此篇关于从软件工程师角度聊聊Kubernetes的文章就讲到这里了,如果你想了解更多关于从软件工程师角度聊聊Kubernetes的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 在进行Maven开发时,往往需要下载大量jar包,而由于网络不稳定等其他因素可能导致jar未下载完毕,然后保留了lastUpdated文件,导致无法更新失效的jar包。 本文分享 bat脚本,自
按字母顺序排序并不是我们花太多时间担心的事情。我们在很小的时候就学习了字母表,现在我们知道它(拉丁文)以 A 开头,然后是 B,然后是 C 等等,一直到 Z。 但是这个订单究竟存储在计算机系统中的什么
我尝试使用可分离为 2 个一维向量的二维矩阵来证明二维傅里叶变换的信号属性的可分离性。地点: f(x,y) = f(x)*f(y) 那么 F(u,v) = F(u)*F(v) 使用以下代码: % Se
我需要为几个小型sqlite数据库编写文档。想描述数据的使用方式,包括表和行说明以及示例数据。 是否可以使用MySQL Workbench?如果没有其他选择,或者我可以使用任何模板? TIA! 最佳答
我正在尝试使用旧版本(例如:1.4.5)安装 memcached,但我不知道该怎么做。 brew install memcached安装最新的。 我也试过 brew install memecache
背景 多年来,我一直使用自己的类似贝叶斯方法,根据大型且不断更新的训练数据集对来自外部来源的新项目进行分类。 每个项目都有三种类型的分类: 30 个类别,其中每个项目必须属于一个类别,且最多属于两个类
嗨,我需要确定 4 个数字是否相等。数字是 size(A,1)、size(B,1)、size(C,1) 和 size(D,1),其中,例如A = [1 2; 3 4], B=[1 2 3, 4 5 6
Wikipedia 中的文章似乎太冗长了。 我将框架理解为一组精心设计的库和工具。 Qt 框架为跨平台 GUI 提供了一组库/工具。 cocoa 框架为 Mac 做了同样的事情。 软件框架的实际定义是
我们的客户最近发现了这个网站: http://mydeco.com/3d-planner/ 它有一个非常非常奇特且组合良好的 3d CAD Web 应用程序,似乎是使用 jQuery 编写的,而不是
我们正在寻找一种独立的(非 cms)日历解决方案来显示在网络上。它可以是开源的或付费服务。 我们主要是在寻找一种在 Web 上显示日历的方法,其中包含事件发生的时间和事件的名称。如果它可以按周、月、年
我想知道与软件相关的“质量保证”和“质量科学”之间的区别。 我在Google上进行了研究,但未找到有关“质量科学”的任何信息。 最佳答案 Based on the link you have prov
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我有一个由 2 个方程和 2 个未知数组成的系统,我想使用 MATLAB 求解,但不知道如何编程。我得到了一些有关 Gamma 分布的信息(平均值为 1.86,90% 的间隔介于 1.61 和 2.1
给定一个矩阵,其中 1 是当前子集 test = 0 0 0 0 0 0 0 0 0 0 0 0
我在组合 Matlab“数据”变量的重复元素时遇到问题。我可以使用 unique 和 sort 轻松组合这些值。 [sorted,idx] = sort(data); [~,ij] = unique(
我在做的问题中有这么一段代码,如下图。定义部分只是为了向您展示数组的大小。下面我粘贴了矢量化版本 - 它慢了 2 倍以上。为什么会这样?我知道如果矢量化需要大的临时变量,我就会发生,但(看起来)这里不
我有一个 3D 矩阵,我想将它的每个 2D 分量存储在另一个 2D 矩阵的行中,该 2D 矩阵有许多行作为 3D 矩阵的第 3 维。 我该怎么做? 最佳答案 与 permute & reshape -
如果计算机能够使用纯 JavaScript(Google V8)、C++(Windows、Mac OS 和 Linux)运行程序/软件而没有任何性能问题,是否有任何好的方法可以通过要求尽可能少尽可能从
我的团队的任务是将用于播放媒体文件的全屏、信息亭式应用程序从 Windows 迁移到嵌入式 ARM Linux(瘦客户端)。我们需要在 sd/1080p 中支持 mpeg-2 播放以及 HTML、SW
我们有数以千计的具有白色或黑色或渐变背景的产品图片。我们正在寻找可以去除图片背景的软件或服务。我们需要一款能够很好地完成这项工作的智能软件。 最佳答案 在 photoshop 中,您可以记录 Acti
我是一名优秀的程序员,十分优秀!