gpt4 book ai didi

从软件工程师角度聊聊Kubernetes

转载 作者:我是一只小鸟 更新时间:2023-09-08 15:02:32 34 4
gpt4 key购买 nike

作为软件工程师,我们应该熟悉 K8s,尽管它有点像 DevOps,但它能让我们更好地了解幕后发生的事情,让我们与部署工作更密切相关,更有责任感。本文将从软件工程师的角度探讨 Kubernetes (K8s),我们将介绍其 动机、原理和核心组件 ,助力于开发者们提升 Kubernetes 的专业知识水平,能更有信心地拥抱这项前沿技术!   。

背景

在谈论 Kubernetes 之前,首先让我们了解一下什么是 容器 。   。

当我们考虑一个这样的场景时,容器的概念就会变得很清晰:在开发人员完成满足特定需求的代码编写后,下一步就是将其打包并无缝安装到另一台主机上,确保我们的客户可以轻松安装并享受其优势。那如何打包并安装到另一台主机上?通常,我们有很多依赖项,如二进制代码、依赖库和不同的操作系统,我们需要将它们全部打成一个包,即所谓的 "容器"。   。

换句话说,我们可以将代码与所有依赖项一起装入容器,然后在远程机器上轻松运行,或者用工程术语来说, "部署我们的服务" 。   。

部署挑战

既然我们知道我们的服务是使用容器运输的,那么就会出现这些主要问题:

  • 如何才能知道我们的容器服务不会崩溃?我们希望确保如果一个容器宕机,另一个容器将启动.

  • 怎样确保这个容器有足够的资源运行?也许它占用的资源比实际需要的还要多.

  • 如何管理版本部署,这意味着当我们升级代码时,可以在不停机的情况下完成?我们希望确保服务的高可用性.

  • 如何让我们的容器相互对话?

  • 当我们的请求增加或减少时,如何进行扩展或缩减?   。

在采用 K8s 之前,AppsFlyer 曾遇到过这些问题,而作为一家拥有强大平台团队的公司,我们通过内部实施解决了这些问题。例如,为了管理服务的生命周期,我们创建了一个名为"Medic"的流程,通过不断向健康检查 API 发送 GET 请求,确保我们的服务始终正常运行。   。

另一个例子是,我们的大多数服务都是通过一个 docker 容器 和用于部署与管理服务的 内部工具("Santa") 部署在一个 ec2 实例上的。这不会与任何其他服务共享,否则就会浪费资源、时间,更重要的是,还会浪费金钱。   。

K8s 解决方案

从上文可以了解到,Kubernetes 的实施是为了解决我提到的挑战。   。

Kubernetes 的定义是:“这是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。”换句话说,Kubernetes 为我们提供了一个容器编排系统,用于妥善管理我们的集群,让我们可以部署、管理资源并扩展应用。K8s 将我们的容器包裹起来,为我们掌舵。   。

以下就是我们从使用 K8s 和解决上述挑战中获得的一些好处:

  • 崩溃时容器的自行修复 ——Kubernetes 提供了一种健康检查机制。这意味着不再需要实现检查 API 来对我们的服务进行采样.

  • 应用容器的自动分发和调度为我们提供了 节点资源的高效利用 。通过与多个应用程序共享节点实例,明智、高效地利用资源.

  • 自动推出和回滚,无需停机 .

  • 服务发现和负载平衡可 帮助容器相互通信 .

  • 水平扩展可 确保开发人员在低负载或高负载的情况下同时使用应用程序 ,从而提高应用程序的性能。   。

总之,Kubernetes 是大规模管理容器化应用程序的最佳解决方案。凭借其强大的组件和自动化功能,Kubernetes 简化了应用程序生命周期的部署、扩展和管理。与直接在一个 EC2 实例上使用 Docker 相比, Kubernetes 可以节省时间和精力 ,并为管理生产中的应用程序提供基本功能。   。

最重要的是, Kubernetes 能为公司节省资金 。通过自动管理基础设施,Kubernetes 减少了对人工干预和内部工具的需求,如上所述,这可以节省大量运营成本。此外,Kubernetes 还可以帮助 优化资源利用率 ,使在相同硬件上运行更多应用程序成为可能,从而节省成本。   。

每位开发人员都应了解的 K8s 基本组件

  。

Kubernetes 的核心组件分为两大类: 控制平面组件和节点 。让我们来看看这些高级组件:   。

API 服务器

API 服务器是控制平面的核心组件,负责公开 Kubernetes API 并处理 API 请求。它是集群中其他组件(如 kubectl 命令行工具或 Kubernetes 面板)与集群交互的主要方式。   。

调度器

调度器负责根据可用资源以及指定的限制和规则,将 pod 调度到集群中的节点上。它可确保以最大限度提高资源利用率和减少资源争用的方式将 pod 放置在节点上。   。

控制管理器

控制管理器是在控制平面上运行的进程,负责管理集群的状态并确保其符合所需的状态。它由多个不同的控制器组成,每个控制器负责集群管理的特定方面,例如部署控制器,它负责管理集群中应用程序的部署。   。

云控制管理器

云控制管理器是在云平台上运行 Kubernetes 时使用的特殊组件。它负责将 Kubernetes 控制平面与云提供商的 API 集成,允许集群使用云的特定功能和资源。   。

etcd

etcd 是一个分布式键值存储,用于存储 Kubernetes 集群的配置数据,包括集群的当前状态和期望状态。它用于存储需要在集群中所有节点间持久化的数据,如集群中 pod、服务和其他对象的信息。   。

Kubelet

Kubelet 是运行在集群中每个节点上的守护进程,负责管理该节点上的 pod。Kubelet 负责启动和停止 pod、监控 pod 的健康状况并在必要时重新启动 pod 等任务。它与 Kubernetes 控制平面通信,以接收关于运行哪些 pod 以及如何管理它们的指令,还与容器运行时(如 Docker)通信,以实际执行容器。   。

Kube-proxy

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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com