首页 > 其他分享 >从软件工程师角度聊聊 Kubernetes

从软件工程师角度聊聊 Kubernetes

时间:2023-09-08 10:24:46浏览次数:46  
标签:容器 Kubernetes 工程师 集群 聊聊 pod K8s 我们

作为软件工程师,我们应该熟悉 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,工程师,集群,聊聊,pod,K8s,我们
From: https://www.cnblogs.com/sealio/p/17686781.html

相关文章

  • 前辈从业多年的心得分享 - 读《这就是软件工程师》
    这本书一开始是从左耳朵耗子的推特上看到的出版消息,是耗子叔和郄小虎等几位前辈分享的各自从业多年的经验和心得,在书中得到的启发:看书看文档能让你知道why,而看代码写代码会让你知道how。多看牛人代码,多看牛人的解决办法和思路可以发现门道。和身边的人搭伙学习。避免X-Y......
  • Kubernetes Dashboard 认证时间延长
    近日,有同事反馈登录KubernetesDashboard竟然容易失效,需要再次认证。希望我们可以设置更长的时间。首先我们查询资料得知默认的Token失效时间是900秒,也就是15分钟,这意味着你每隔15分钟就要认证一次。//Expirationtime(inseconds)oftokensgeneratedbydashboard.Defaul......
  • Kubernetes Components
    KubernetesComponentsWhenyoudeployKubernetes,yougetacluster.AKubernetesclusterconsistsofasetofworkermachines,callednodes,thatruncontainerizedapplications.Everyclusterhasatleastoneworkernode.Theworkernode(s)hostthePods......
  • kubernetes deploy standalone mysql demo
    kubernetes集群内部署单节点mysqlansibleall-mshell-a"mkdir-p/mnt/mysql/data"catmysql-pv-pvc.yamlapiVersion:v1kind:PersistentVolumemetadata:name:mysql-pv-volumelabels:type:localspec:storageClassName:manualcapacity:s......
  • rke2 在线部署 kubernetes
    文章目录1.还原虚拟机2.背景3.介绍4.预备条件5.1配置网卡5.配置主机名6.配置互信7.安装ansible8.系统初始化9.kube-master01部署9.1定制配置文件(可选)9.2部署9.3命令配置9.4检查节点10.配置其他管理节点11.Agent节点配置12.检查集群13.配置管理工具14.卸载1......
  • 【软考】系统集成项目管理工程师(三)信息系统集成专业技术知识①【16分】
    一、系统集成的特点官方解释:1、信息系统建设的内容主要包括设备采购、系统集成、软件开发和运维服务等;2、信息系统集成是指将计算机软件、硬件、网络通信、信息安全等技术和产品`集成`为能够满足用户特定需求的信息系统;显著特点如下:1、信息系统集成要以满足用户需求为根本出发点;2......
  • Kubernetes快速进阶与实战:构建可靠的容器化应用平台
    ......
  • kubeadm部署kubernetes+harbor
    kubeadm部署kubernetes+harbor架构图 安装步骤1、在所有节点上安装Docker和kubeadm2、部署KubernetesMaster3、部署容器网络插件4、部署KubernetesNode,将节点加入Kubernetes集群中5、部署DashboardWeb页面,可视化查看Kubernetes资源6、部署Har......
  • OpenMLDB 基于 Kubernetes 的部署全攻略
    简介Kubernetes作为当前工业界流行的云原生容器编排和管理工具,在大量项目实践中被使用。目前,OpenMLDB的离线引擎和在线引擎,均已经完整支持了基于Kubernetes的部署,可以实现更为方便的管理功能。本文将分别介绍离线和在线引擎基于Kubernetes的部署攻略。注意,离线和在线引擎......
  • 聊聊GaussDB AP是如何执行SQL的
    本文分享自华为云社区《GaussDBAP是如何执行SQL的》,作者:yd_270088468。前言介绍GaussDBAP各组件是如何协调工作的,会着重介绍SQL引擎。1、SQL引擎组件和SQL生命周期Parser:词法/语法分析模块。词法分析会从SQL字符串中解析出一个个单词,作为语法分析的输入。语法分析可以想象成是......