从软件工程师角度聊聊 Kubernetes

作为软件工程师,我们应该熟悉 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

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

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

相关文章

无涯教程-JavaScript - IMSECH函数

描述 IMSECH函数以x yi或x yj文本格式返回复数的双曲正割。复数的双曲正割被定义为双曲余弦的倒数,即 六(z) 1/cosh(z) 语法 IMSECH (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the hyperbolic secant.Required Notes Ex…

zookeeper/HA集群配置

1.zookeep配置 1.1 安装4台虚拟机 (1)按照如下设置准备四台虚拟机,其中三台作为zookeeper,配置每台机器相应的IP,hostname,下载vim,ntpdate配置定时器定时更新时间,psmisc&#xff…

linux 进程隔离Namespace 学习

一、linux namespace 介绍 1.1、概念 Linux Namespace是Linux内核提供的一种机制,它用于隔离不同进程的资源视图,使得每个进程都拥有独立的资源空间,从而实现进程之间的隔离和资源管理。 Linux Namespace的设计目标是为了解决多个进程之间…

Android Jetpack架构组件库:Hilt

一、开发者官网关于Hilt库使用链接如下 使用 Hilt 实现依赖项注入 Hilt版本说明 二、工程目录图 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 代码:LearnJetpack-hilt:hilt版本2.48 代…

国标GB28181协议视频平台EasyGBS国标平台设备播放断流现象的排查分析及解决

EasyGBS平台基于GB28181国标协议,支持多路设备接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力,已经在大量的项目中落地应用,如明厨亮灶、平安…

【C++心愿便利店】No.5---构造函数和析构函数

文章目录 前言一、类的6个默认成员函数二、构造函数三、析构函数 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C 心愿便利店 🔑本章内容:类…

20230904 QT客户端服务器搭建聊天室

Ser cpp#include "app.h" #include "ui_app.h"APP::APP(QWidget *parent):QWidget(parent),ui(new Ui::APP) {ui->setupUi(this);this->resize(550,400);ui->Line->setAlignment(Qt::AlignCenter);//标签文本对齐方式 居中ui->Line->se…

智能井盖传感器:高效守护城市道路安全

近年来,井盖出问题导致事故的报道时有发生,但却容易被公众所忽视。井盖作为城市基础设施的一部分,主要用于保护下方的供水管道、下水道以及电信线缆等。然而,由于长时间使用、缺乏维护、设计不合理等原因,井盖出现问题…

C语言——程序环境和预处理(再也不用担心会忘记预处理的知识)

了解程序环境和预处理 前言:一、程序环境二、编译链接2.1 翻译环境2.2 编译的几个阶段2.3 运行环境 三、预处理3.1 预定义符号3.2. #define的使用3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##的用途3.2.5 带副作用的宏参数3.2.6…

MySQL卸载干净再重新安装【Windows】

家人们,谁懂啊? 上学期学的数据库,由于上学期不知道为什么抽风,过得十分的迷,上课跟老师步骤安装好了Mysql,但后面在使用的过程中出现了问题,而且还出现了忘记密码这么蠢的操作,后半…

vue 子组件向父组件传递参数 子传父

子组件中写: this.$emit(RowCount,res.data.RowCount); 父组件中写: getMFGLRowCount(val){ //父组件中的方法: 接收子组件传过来的参数值赋值给父组件的变量 //this.totalCount val; alert("这…

无涯教程-JavaScript - IMREAL函数

描述 IMREAL函数以x yi或x yj文本格式返回复数的实系数。 语法 IMREAL (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the real coefficient.Required Notes Excel中的复数仅存储为文本。 当将格式为" a bi"或&q…

【漏洞复现】一米OA存在任意文件读取漏洞

漏洞描述 一米OA协同办公系统,集成了OA办公自动化系统、手机客户端、专业报表工具,为全国千万企业用户提供全功能、性价比高的OA软件。 该OA系统的getfile.jsp文件存在任意文件上传漏洞,攻击者通过漏洞可以获取服务器的敏感信息。 免责声明 技术文章仅供参考,任何个人和…

分类预测 | Matlab特征分类预测全家桶(BP/SVM/ELM/RF/LSTM/BiLSTM/GRU/CNN)

分类预测 | Matlab特征分类预测全家桶(BP/SVM/ELM/RF/LSTM/BiLSTM/GRU/CNN) 目录 分类预测 | Matlab特征分类预测全家桶(BP/SVM/ELM/RF/LSTM/BiLSTM/GRU/CNN)预测效果基本介绍程序设计参考资料致谢 预测效果 基本介绍 分类预测 | …

sql:SQL优化知识点记录(十四)

(1)索引失效行锁变表锁 建立2个索引 索引是失效后,系统性能会变查,如果涉及到锁的话,行锁会变表锁 有一个问题,当session1用b字段做查询条件因为是varchar类型,需要加双引号,但是没…

Win10下使用vim9

作为一个经常与文字打交道的Writer,你在学会Vim的基本操作之后,就一定会爱上Vim的。 以下是Windows10_64位(专业版)环境中安装、使用Vim9的全过程,分享一下: 一、下载、安装Vim9 去Vim官网去下载最新的Vi…

BMS电池管理系统——BMS的功能模块及基本要素(二)

BMS电池管理系统 文章目录 BMS电池管理系统前言一、BMS电池管理系统各个功能模块的关系二、BMS的边界及基本要素 前言 前面了解了BMS以及他的功能模块,这些功能模块之间的关系是什么呢? 一、BMS电池管理系统各个功能模块的关系 下面我们分析一下这张图…

基于STM32设计的格力空调遥控器

一、格力空调协议介绍 格力空调的红外控制协议被称为格力红外通讯协议或者格力红外遥控协议。这个协议定义了一系列红外信号,可以用来控制格力空调的各种操作,例如开关、温度控制、模式选择、风速控制等等。 格力空调的红外控制协议是一种自定义协议&a…

nvm 在 Windows 上的使用

NVM(Node Version Manager)是一个用于管理和切换多个 Node.js 版本的工具。它允许你在同一台机器上同时安装和使用不同版本的 Node.js,而无需手动安装和卸载。 之前都是只安装一个版本的 node.js,该更新时更新,使得以前…

CocosCreator3.8研究笔记(十)CocosCreator 图像资源的理解

一、图像资源导入 Cocos Creator 可使用图像文件格式,支持 JPG、PNG、BMP、TGA、HDR、WEBBP、PSD、TIFF 等。 将图像资源直接拖拽到 资源管理器 即可将其导入 二、图像资源的类型 在 属性检查器 面板中便可根据需要设置图像资源的使用类型:raw 、 textu…