关于kubernetes:从软件工程师角度聊聊-Kubernetes

2次阅读

共计 2814 个字符,预计需要花费 8 分钟才能阅读完成。

作为软件工程师,咱们应该相熟 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-kub…

正文完
 0