Kubernetes,微服务,CI / CD和Docker的逆行:学习技巧

似乎“我们为什么需要Kubernetes”这个话题已经很烦人了。我想说:“每个需要它的人都早已了解”,但是我将技术(和接近技术)工人分为“理解并知道如何使用”的人员和“理解但想知道如何使知识相关的人”。 ”。

也许您是过去十年来一直在同一堆栈上工作的经理;您可能是支持旧解决方案或在熟悉的环境中用熟悉的语言编写的开发人员。也许您只是从技术管理转到组织管理,然后突然发现您所知道的一切都不再相关,所以我想了解是否有相对简单的方案可以解决这一问题。我将尝试根据自己的经验提出建议-一位意识到将很快用“ Kubernetes是一种有效的技术,我们必须努力应用它”的表述来表达对组织管理的看法,但并没有完全理解其背后的含义。这些话以及最近发展起来的所有技术文化的背后。

为什么我认为能够改变技术思维模式很重要?

对于长期从事技术工作的人来说,最困难的事情是接受新趋势已经永久化。在20多年的工作中,我了解了不同技术的来龙去脉,其中一些是“超相关的”几个月。

我读过Joel Spolsky的文章,内容是Microsoft如何系统地为开发人员发明新的堆栈,以防止他们看到其他东西。像SRE一样,我对每项新技术都感到恐惧:新事物都是原始的,原始事物都是不稳定的。好吧,所有不稳定的因素都将导致生产问题,而生产稳定性是主要问题。

作为程序员和企业家,我想更快地创建产品-我需要学习新知识,改变常规方法,这意味着-缓慢推出功能。如果一些新技术被迅速采用,那么与面向微服务的开发有关的一切(我们称之为整个现代堆栈)都需要学习。而且每年学习时间更长;以旧的熟悉的方式编写并更快地交付产品要容易得多。

但是事实仍然存在:有时会保留新技术并完全改变整个范式。于是出现了一种选择:保持旧的范式或进入新的范式。Perl开发人员记得预订时,Cobol程序员仍然可以找到工作,但是这些人的替代方式越来越少。然后以稳定性的名义“逆行”成为一种限制。在整个现代堆栈中,如果您不想限制自己,那么时间就不算了,但是我们已经落后了。而且,如果我们不想卡在perl中,我们需要学习。需要很长时间。我将尝试告诉我逐步的学习经验。

潜水方向


了解如何在docker中运行应用程序。首先,退伍军人应该理解,“存储”和“启动”应用程序的方式已经永远改变了。很有可能,最近几年学会开发的开发人员不知道如何在没有docker的情况下在生产中运行应用程序。这样的开发人员可能没有“在本地存储文件”的概念,除非共享存储的情况很少,但是“资深人士”需要了解的主要内容是:docker是一个新的exe。 exe格式可能有其缺点,但没有人真正考虑过。

是的,微服务方法已成为标准。 OOP似乎使大型团队更容易编写大型软件。现在,微服务已成为相同的标准。他们甚至是由同一个人耕种的(请参阅福勒)这是合理的:如果对应用程序API进行了版本控制,则单个团队编写独立应用程序要比一个大型应用程序容易。您可以争论为什么要编写小型应用程序微服务,但是到了某个时候,它们都开始以OOP风格编写它们-太熟悉了(有关exe,请参见上文)。有很多争论认为,进程间通信(尤其是基于TCP堆栈的通信)具有100万个性能缺陷(一种服务将通过TCP传递给另一种服务,而不仅仅是进行汇编程序调用-您可以想象其中的区别是什么)生产能力?),但事实仍然是微服务具有开发中型和大型项目的优势,并且它们也已成为标准。了解微服务之间的交互方式(HTTP API,grpc,作为奖励,通过队列进行异步交互(一百万种方法),了解什么是服务网格。 (一阵愤怒的幽默:天哪,伙计们,他们想到了共享应用程序的想法,事实证明,分割后的应用程序之间的通信是一个艰难的笑话,因此他们增加了另一层来减轻进程间的恐惧,这对我们来说是什么?)

, .因此,我们调和了我们现在正在docker中启动应用程序,并将应用程序共享到微服务中。现在,我们需要以某种方式管理正在运行的泊坞窗。您可以自己在专用服务器上进行操作(并引导(例如,Docker Swarm)或构建Kubernetes),也可以使用云提供的服务-来自AWS或Kubernetes的容器服务。使用云有一个很大的优势。实际上,您已经不再考虑在容器管理器下面运行的层了(SRE现在笑了,但我们要承认-当一切稳定后,大多数情况下我们不会爬到GKE节点上)。因此,实际上,已成为标准Kubernetes的容器管理器正在转变为操作系统。它具有软件包管理器,您可以在其中“安装软件”,也可以在其中运行“ exe-shniki”-码头工人,它有kronjoby。 Kubernetes是一个新的操作系统。

了解如何运送Docker容器。现在,一个简单站点的布局需要5分钟,人们认为这是正常的。我们需要收集泊坞窗,对其进行测试,将其放入注册表中,然后将其放入泊坞窗管理器中(让我们进一步谈谈Kubernetes)。这是每个人都习惯的野蛮(?),它已经过优化,这是标准。 CI / CD系统已成为标准布局,需要对其进行处理。就像使用GitOps一样。

了解大多数应用程序的本地托管已成为过去(在西方-已经不复存在)。曾几何时,购买服务器,组装服务器,将它们带到DC,放置在主机中并进行切换是常态。即使是一个小项目。然后是专用服务器。现在有多少人正在考虑折磨,购买和收集中小型项目的铁?专用-现在在西方,很快在俄罗斯联邦-将被乌云取代。这已经讨论了一百年了,自2008年以来我一直在使用AWS,但是它有问题,但是当我们谈论接管Kubernetes管理的服务(Yandex或Selectel的EKS,GKE,Kubernetes)时,我不明白为什么要进行管理Kubernetes和Dediks自己,如果其他人这样做?我不再更换Dediks的冷却器了……俄罗斯联邦内部Kubernetes分布的普遍性问题是美元汇率的问题,关于波斯人和俄罗斯云托管“青年”的法律。迟早会决定这一点,而内部部署将成为企业和大型项目想要的荒野。与基地相同。如果我们谈论的大多数应用程序不需要超高负载或超强大的调优功能,那么基于云的PostreSQL / MongoDB / MySQL提供了很多优势。无需考虑调优,无需考虑备份。从生产服务器创建开发服务器-云控制台中的几个命令。我知道,整个想法会引起管理员的愤怒:伙计们,我是管理员,但是对于大多数非重要任务,不需要数据库管理。也许由于波斯法律,AWS和GKE昂贵且无法使用,但这只是滞后的时间:早晚,Yandex或Selectel将具有相同的功能,范式将会改变。

了解现在编写了什么基础架构。我不喜欢IaaC担任厨师和木偶时的想法,但是,感谢上帝,他们被更合适的Terraform和Pulumi代替,用来描述您想要在集群中筹集的资金,并且可以在内部工作。进去,在外壳中放一些东西-现在绝对是野蛮的。是的,它更快,更方便,但是在新的范式中却很疯狂:记住exe。

深潜课程


我如何看待特定的技术方法,以了解如何使用现代堆栈?

1)在云托管上创建一个试用帐户。所有托管服务提供商都提供它们。我从GKE开始,但是,例如,如果您希望自己很有可能在该地区工作,那么可以注册俄罗斯托管服务。
如果Terraform / Pulumi支持您的云,请描述您要在其中创建的基础架构。如果您具有编程技能,我建议使用Pulumi:您可以使用熟悉的语言和构造来代替自己的Terraform SDL。

2)找到应用程序并将其打包在docker中。有什么可以打包的-您可以自己选择。我突然自己发现NodeJS是如何普及的,因此决定对它的操作进行深入研究,因此我继续使用该节点。例如,这里是有关NodeJS博客,可以提出博客,但总的来说,一切由您决定。

3)处理K8S的基本构造(用于部署,服务),并在K8S集群中动手部署应用程序。

4)处理Helm,编写Helm图表,部署Helm应用程序。
在CircleCI上作为CI-ke采取免费计划,无需设置,然后进行配置:配置将类似于其他系统。

5)通过CI-ku修复应用程序。
单独的CI(应用程序构建的内容)和CD。用GitOps制作CD(例如,参见ArgoCD)。

下一步是什么


从现在开始的某个地方,您原则上将了解现代堆栈的主要基础。
我可以在哪里进一步挖掘?

  • 如果您正在西部寻找工作/工作,可以对云计算有更深入的了解:向AWS Architect提交来自AWS的Google证书或同等证书(我们最近ITSumma收到了3个这样的证书)。这将给出赋予Cloud的功能并帮助其导航的想法。linuxacademy的好课程
  • 移交给CKA:这是一个困难的话题,但值得。考试准备将提供大量的知识。
  • 如果您不知道如何学习编程。现在我去研究前沿,对一切都发生了变化感到惊讶。我的知识在2012年或更早的时候就结束了,回到jQuery时,人们笑了起来。现在,前端已经变得比后端复杂得多,这里有大量的应用程序逻辑,而对于我来说,范式却是完全不寻常的。很有意思!

而且比这里的博客更普通,我保留了电报频道,订阅:-)

All Articles