写点什么

我们需要专职 Kubernetes 工程师吗?

  • 2022-07-29
  • 本文字数:3243 字

    阅读完需:约 11 分钟

我们需要专职 Kubernetes 工程师吗?

伴随着技术领域的每一次重大变革,我们都会看到很多拥有新头衔的新职业。如今,基础设施和应用程序部署领域的最大变革是 Kubernetes 被广泛采用。我们随之看到的最新职位是“Kubernetes Operator”,K8s 操作员(不要把它与 Kubernetes 编程操作符这个构造搞混了,后者是 Kubernetes 中用于管理资源的一个软件扩展)。由于“操作员”这个词在 Kubernetes 中有多种含义,为简单起见,我们将在后文中使用“Kubernetes 工程师”这个说法。

 

来自 Kubernetes Gateway API 站点的一张示意图,将 Kubernetes 工程师描述为负责管理网关功能的“集群操作员”。Gateway API 仍处于 alpha 阶段,但这个模型同样适用于使用其他入站-出站选项(例如 Ingress API)的 Kubernetes 实现。

用于在 Kubernetes 中部署 L4 和 L7 路由的一组现代 API,图片来源:https://gateway-api.sigs.k8s.io/

 

Kubernetes 工程师通常由其他头衔的工程师担任例如 Web 应用的站点可靠性工程师,或老派 IT 部门的系统管理员等。云原生组织和团队可能会将这个岗位作为平台运营或云架构师职位的一部分,但越来越多运行现代应用或走云原生之路的公司都需要专门的 Kubernetes 专家。

 

这一变化可以追溯到上次大型基础设施的变革浪潮时期。当时,虚拟化技术取代了裸机,企业争相聘请虚拟化工程师来操作 VMware 和 Citrix 虚拟化平台。

 

在这次变革中,Kubernetes 工程师需要经历一个非常陡峭的学习曲线。Kubernetes 一词经常令人困惑,同样的网络或应用术语在 Kubernetes 世界中可能含义不同。同时,还产生了许多较新的术语。例如,微服务与以 Kubernetes 作为主要部署模式的实现密切相关;服务网格是一种全新的基础设施,旨在帮助团队安全可靠地管理和交付微服务,它基本上总是跟 Kubernetes 关联在一起。

 

未来,几乎每个追求 Kubernetes 的组织都需要符合 Kubernetes 工程师职位描述的人才。如果他们还没有这样的雇员,那么他们很快就会需要一个。那么,这个职位对企业意味着什么、企业如何通过这个岗位来满足自己的需求呢?

 

基本职责

 

Kubernetes 工程师的首要任务是确保 Kubernetes 在其所在组织正常运行。该岗位的职责通常包括:

 

  • 安全性。Kubernetes 并非开箱即用的。Kubernetes 工程师的工作是锁定 Kubernetes 并对其进行配置,以便开发人员在集群上部署他们的应用程序时,不必要的情况下避免暴露各种 API、允许未经授权的流量等等。

  • 性能和可观察性。虽然 Kubernetes 因其众多弹性特点而出名,但对其进行性能调优需要知识全面。比如,即使在 CPU 或内存层资源不足的情况下,Pod 可能看起来也是在正常运行,结果却是导致了延迟、丢包或重复重启。Kubernetes 工程师的工作是通过查看服务和流量指标来寻找比“Pod 是否启动并正常通过流量?”更细微的问题,进而识别问题并对性能进行调优。

  • 网络。Kubernetes 网络不同于传统网络,Kubernetes 网络多路复用第 4 层和第 7 层,并通过 API 运行一切。Kubernetes 网络需要工程师管理南北和东西流量,并调整维护关键服务所需的内部网络要求。许多流量管理工具是 Kubernetes 独有的——例如,Ingress控制器是专用于 Kubernetes 的组件,它是高级 Ingress 约定(如标头重写和流量整形)所必需的。Kubernetes 工程师应该精通这种新颖且差异化的网络环境,并准备好为 Kubernetes 设置和管理网络管道。

  • 基础设施。组织可以选择自己运行 Kubernetes,或者使用托管服务。不管是哪种情况,Kubernetes 工程师的任务都是确保一切都能以正确的方式运行、获得正确的补丁,并有足够的资源来运行应用程序。可以这么说,Kubernetes 工程师很少有服务器机柜的钥匙,但他们通常能够判断 CPU、内存和其他物理元素是否出现了故障或不足。使用托管 Kubernetes 环境时,Kubernetes 工程师可以确保服务已配置并能根据需要进行扩展,而不会过度配置。

工作范围

 

Kubernetes 工程师角色的工作范围取决于三个因素:

 

  • 企业基础设施规模

  • 企业在 Kubernetes 采用曲线上的位置

  • Kubernetes 部署的复杂性

 

如果你是一家初创公司,只在小型基础架构上运行数量有限的应用程序,“Kubernetes 工程师”角色可能就只是某人工作的一部分内容而已,甚至可能仅限于在托管 Kubernetes 服务(例如 Google Kubernetes Engine)上部署容器和应用。此类服务抽象出了物理硬件和网络层,并能很好地处理扩展、基本安全性和基本网络管理需求,只需要非常少的手动工作。

 

但是,企业在决定一个兼职的 Kubernetes 工程师是否够用之前,需要考虑一点:基础设施越大,移动部件的数量越多,工作就越复杂和耗时。

 

下图是一个非常简单的视图。从广义上讲,在裸机上管理和操作 Kubernetes 比使用托管服务复杂得多,但是使用托管服务意味着对物理层的可见性为零,并且会增加一些延迟。非常多的问题、冲突和性能问题都可以追溯到多租户基础架构上。如果企业认为云端有很多“嘈杂的邻居”不是什么好事情,那就想象下它们在托管 Kubernetes 服务中的样子吧!这一逻辑同样适用于驻留在大型容器和更高容量 Kubernetes 集群上的大型应用程序。

 

 

除了基础设施问题之外,企业还需要考虑将运行多少个集群,以及每个集群中有多少个 pod 和节点。

 

多集群 Kubernetes 要复杂得多,因为它需要对安全性、网络、API 和流量管理进行额外的定制,还需要管理和链接多个 Ingress 控制器(稍后会详细介绍),并确定是否需要运行多个集群以进行热故障转移(很昂贵),企业也可以选择容忍备份集群从头开始启动带来的一些停机时间。

 

对于单个集群和数量有限的 pod 和服务,可观察性和故障排除远没有那么复杂。一旦企业必须对运行在十几个 Pod 上的多个服务进行故障排除并观察它们的性能,那么工作就会变得非常繁重。

 

那么,Kubernetes 工程师是负责部署应用还是只管理基础设施?这需要具体情况具体分析。

 

在大型组织中,Kubernetes 工程师的职责主要是保障 Kubernetes 环境的安全和正常运行,而不是编写 YAML 清单或监督应用程序部署工作,他们通常与平台运维团队(或作为该团队的成员)密切合作,更多的是设置受信任的服务和 API 目录,或设置经过审查以处理 Kubernetes 设置的容器注册表。

 

较小的组织或团队需要对 Kubernetes 投入更多精力,这里的 Kubernetes 工程师角色可能与 DevOps 团队重叠,并要负责与应用程序开发人员合作监督部署流程。

 

什么时候需要 Kubernetes 工程师

 

一旦确定 Kubernetes 将在应用程序基础架构中发挥重要作用,企业就要开始考虑聘请一名 Kubernetes 工程师,或者至少是一名具有 Kubernetes 专业知识、并有实践经验的应用开发人员。

 

企业如果在开始部署应用之前,遵循“构建坚如磐石的、以 Kubernetes 集群为基础的现代应用程序设计模式”(在 F5 NGINX,这种模式被称为“集群输出”),那么你就需要尽快招募一名 Kubernetes 工程师。

 

在 Kubernetes 中出现的问题有很多,相关的风险很高,而架构、服务设计和其他缺陷可能不会在“上线”后自己暴露出来。出于这个原因,在采用的早期就发展自己的 Kubernetes 工程技术是明智之举。

 

Kubernetes 认证是否必要?

 

虽然成为一名认证的 Kubernetes 管理员(CKA)绝对是一个加分项,但有很多人是以更老派的方式——通过来之不易的经验和教训来学习如何运维 Kubernetes 集群。事实上,我们认为执行特定任务的经验比 CKA 证书更有用,原因有二:

 

  • Kubernetes 比任何认证课程都复杂得多。

  • 一旦构建了所有服务、配置了网络并设置了安全性,任何 Kubernetes 部署都会变得非常复杂。

 

当然,经验和认证都有是两全其美的。在花时间亲身体验 Kubernetes 之后再去考 CKA 是一个很好的策略。

 

另外一个问题是:Kubernetes 工程师需要高级 Kubernetes 网络专业知识吗?答案是不必要。

 

Kubernetes 工程师需要对 Kubernetes 网络概念有深入了解,并具备配置 Ingress 控制器、多集群网络以及管理东西和南北流量的经验,但不一定需要更高级的容器网络接口(CNI)应用经验。这些应用旨在提供的东西更像是 Kubernetes 中的网络管理和网络安全层。对于现在大多数 Kubernetes 用例来说,CNI 是多余的。所以,Kubernetes 工程师有这方面的技能当然更好,没有也无所谓。

 

原文链接:

 

https://www.cncf.io/blog/2022/03/03/an-emerging-job-kubernetes-engineer/

 

2022-07-29 09:204504

评论 1 条评论

发布
用户头像
CKA 太贵,有效期太短,而且多半是形式化的命令操作,没有什么实际意义。
2022-08-02 08:06
回复
没有更多了
发现更多内容

【LeetCode】奇数值单元格的数目Java题解

Albert

LeetCode 7月月更

RocketMQ之消费者启动与消费流程

vivo互联网技术

RocketMQ 中间件 ACK

项目git commit时卡主不良代码:husky让Git检查代码规范化工作

zhoulujun

git husky lint-stated

QT和MFC的优缺点比较

乌龟哥哥

7月月更

Linux 0.12 源码阅读

贾献华

7月月更

5G NR RRC连接控制

柒号华仔

5G 7月月更

GaussDB云数据库初步使用记录

DS小龙哥

7月月更

多传感器时间同步

秃头小苏

时间同步 7月月更

注意!软件供应链安全挑战持续升级

SEAL安全

安全 软件供应链

自己搭建git服务器:linux自己Gitlab服务

zhoulujun

gitlab git私有参考 git部署 git服务端

深入JS函数中默认参数的使用

猪痞恶霸

前端 js 7月月更

Qt|字符排序以及转化问题

中国好公民st

qt 7月月更

Qt | 串口通信 QSerialPort

YOLO.

通信 qt 串口 串口通信 7月月更

纯CSS实现四种方式文本反差色效果

南城FE

CSS 前端 css动画 7月月更 反差色

图解网络:访问控制列表ACL,功能堪比防火墙!

wljslmz

防火墙 acl 网络技术 7月月更 访问控制列表

Pro 单店版和多店版,你还傻傻分不清楚?

CRMEB

Java面向对象基础

五分钟学大数据

Java 7月月更

SLSA 框架与软件供应链安全防护

SEAL安全

SLSA 软件供应链安全

老司机狂飙之路--EventBus原理简要分析

芝麻粒儿

android EventBus 7月月更

不习惯的Vue3起步四 の 生命周期&provide/inject

空城机

Vue3 7月月更

适合初学者的 10 个JavaScript 代码整洁技巧

devpoint

JavaScript ES6 7月月更 数据操作

在线直播系统源码——开源源码

开源直播系统源码

软件开发 直播源码 开源源码 在线直播系统源码

QT实现 文件夹复制

小肉球

qt 7月月更

【愚公系列】2022年7月 Go教学课程 009-数据类型之浮点型

愚公搬代码

7月月更

你想知道的数组易错知识都在这了-C

芒果酱

7月月更

Wireshark抓包分析Eureka注册发现协议

程序员欣宸

Java SpringCloud Eureka 7月月更

iOS 中的 Category

NewBoy

ios 前端 移动端 iOS 知识体系 7月月更

继承(二)

Jason199

js 继承 7月月更

解读《深入理解计算机系统(CSAPP)》第7章链接

小明Java问道之路

连接 csapp ELF 链接 7月月更

使用AssemblyScript 构建 WebAssembly 应用

devpoint

webassembly Wasm 7月月更 assemblyscript

《深入 Linux 设备驱动程序那和机制》读书笔记

贾献华

7月月更

我们需要专职 Kubernetes 工程师吗?_语言 & 开发_Jenn Gile_InfoQ精选文章