开发人员如何学习 Kubernetes

虽然“容器编排平台”还没有被整个行业大范围采用,但在这一领域 Kubernetes 已经战胜其他选手,成为了事实标准。近两年的 Web 开发技术社区,随便打开一两个群,你都能看到人们在谈 Kubernetes。很多开发人员,包括曾经的我,在学习 Kubernetes 时遇到一个障碍:在网上看到的各类 Kubernetes 文章,或者在社区里听到的各类 Kubernetes 分享,通常都充斥着各类听不懂的名词,让人一时无法融入他们的氛围之中。而当自己狠下心去找一两篇安装教程想试一试的时候,却发现要么准备步骤繁多,要么文档中的步骤复杂、令人忘而却步。

我相信这些问题不止我一个人遇到,而且事实上,它们本不应该成为阻挡我们学习 Kubernetes 的障碍。

获得 Kubernetes 集群

在聊我们如何获得一个可用的 Kubernetes 集群之前,稍微啰嗦几句关于必要性的问题。很多技术参考书喜欢先上来写一章“概述”,就像大学教材第一章总是“绪论”一个套路,先回顾一下这个技术的来龙去脉,展望一下未来。然后第二章是安装教程,不少书写的特别详细,恨不得每一个界面都截图,每一段代码和配置都要贴到书上。这个做法先不说在书的写作上合不合理,它至少带来一个问题,那就是不知不觉就把读者刚翻开一本书时的新鲜感带到软件安装的细节中磨灭殆尽了。这是十分低效的,也是很打击读者信心的事情。

如果我们眼前的任务是学习 Kubernetes 的用法,而不是要学会如何部署并立志去当一个 Kubernetes 集群运维人员,那么完全没必要早早地着急研究如何部署一个 Kubernetes 集群,更不必去研究它的高可用集群的原理和细节。

对于急于学习 Kubernetes 用法的开发人员来说,可以有更多简单的方法获得一个可用的 Kubernetes 集群:

  • 使用 Katacoda 提供的线上环境(免费)。Katacoda 是一个提供交互式在线学习环境的网站,它有很多课程是免费的,其中就包括不少 Kubernetes 课程。只要打开其中一个 Kubernetes,根据提示就可以在几分钟时间里获得一个小型集群环境。

  • 使用 Minikube 在个人电脑上安装(免费)。Minikube 是一个可以在个人电脑上快速启动的集群。不过,由于仍然有一些自己安排的步骤,所以由于每个人电脑的实际情况的不同,还是有一定机率会遇到一些问题。

  • 使用公有云提供的 Kubernetes 服务(收费)。微软云、腾讯云、华为云等各类云环境都提供了 Kubernetes 集群服务,对于用户来说,只要一路下一步下去,根据向导和文档,通常只需要十来分钟就可以拥有一个自己的集群。

实际上直接使用公有云的 Kubernetes 是我最推荐的一种方法,因为它最省事,而且并不贵:省事是很容易理解的,各个云一定希望自己提供的服务是易于使用、健康稳定的,否则不会有人用他们的服务;而价格方面,我自己在好几个云环境都创建过 Kubernetes 集群,发现他们对于主节点(集群管理节点)都是不收费的,只对工作节点收费——也就是说,用于运行你的容器的虚拟机才需要收费。Azure 国际云上提供的 B2ms 型号虚拟机(2 核 8 GB内存)一个月才人民币 500 元左右(美元 $70.8)。如果你只是要用几天用于学习的话,平均到每天只要 17 元,相当于一顿外卖的钱,可以说相当便宜了。

总之,如果你现在是想快速上手学习,那就先不要在部署 Kubernetes 集群上花费太多精力。

正确的学习路径

我想,应该有不少人都买了 Kubernetes 的大部头著作。但这其实也是没必要的。

坦率地讲,很多大部头并不适合想快速上手 Kubernetes 的应用开发人员作为入门读物。这些大部头,会从 Kubernetes 原理讲起,然后分别介绍 Pod、Service、ReplicaSet、Deployment、PersistentVolume、PersistentVolumeClaim 等一系列概念,后面介绍各种原理,包括 Kubernetes 网络模型,最后还不忘介绍如何阅读 Kubernetes 源代码、为它贡献代码、开发扩展等。

估计这一系列下来,很多人的一开始的热情早就磨灭到所剩无几了。最重要的是,对于开发人员来说,还是没有学会该怎么写好一个 Pod 的描述文件,该怎么为自己的应用设计一个面向 Kubernetes 的持续交付流水线。这类书,就像一本字典——你在遇到不认识的字时总是可以随手翻一翻,但学习遣词造句却还是要从《语文》课本开始。同理,开发人员需要一个快速上手的路径,而不是先从大部头著作开始。

我主张,应用开发人员只需要先学很少的几个 Kubernetes 关键概念,比如 Pod、Service 和 Deployment;然后直接把精力放在如何把自己的应用部署上去,并着手研究部署到 Kubernetes 之后的各类场景化需求,再反过来去逐个学习 Kubernetes 的各项功能特性。

举例来说,把自己的应用部署上去,如果你的应用:

  • 需要存储文件,你就着手研究如何使用 PersistentVolume、PersistentVolumeClaim 来实现存储;

  • 依赖 Redis 或 Postgres 数据库,你就研究如何在部署应用的同时,等待 Redis/Postgres 变成就绪状态,再让用户访问自己的应用;

  • 是一个微服务系统,你就研究如何发现并调用其他微服务

  • 总是崩溃,你就研究如何收集日志,并存储内存转储文件(core dump),以便分析

  • 需要很多配置,你就研究如何将应用的配置交给 Kubernetes 管理,并规划命名空间以满足多套逻辑环境的隔离性

下图是 WordPress 应用在 Kubernetes 上部署时涉及到的各种资源:

一步一步下来,我相信,你对 Kubernetes 的各种特性会是一个逐渐熟悉的过程。最重要的是,这会是一个“发现之旅”,它让你总是带着明确的问题出发,在解决问题之后获得相应的成就感,激励你继续探索和学习下去。而这正是学习一个新的工具最好的方法。

总结

Kubernetes 已经占据着各类技术社区的头条很长一段时间了,但根据 InfoQ 2019 年发布的 Cloud & DevOps 报告,大量的企业目前还没有采用它。对于开发人员来说,现在这个阶段开始学习并为企业接下来的战略做好准备,将是对自己接下来一段时间职业生涯最好的保障。

同时,人们经常在谈到学习 Kubernetes 时,经常谈到的是它复杂、难以入门,让很多人“从入门到放弃”。实际上,在学习 Kubernetes 时,选择一个合适的学习路径是可以让学习效果事半功倍的。

基于上面的讨论,我结合自己学习 Kubernetes 的经历,近期制作了一门在线直播课程,以一个开发人员的视角与大家一同学习 Kubernetes。目前这个课程第一期的直播已经在 3.19 日晚播出,收到大量关注和好评。如果你对这个课程感兴趣,请扫码查看其详细信息:

此外,还有一些其他的资源,也是供开发人员学习 Kubernetes 非常好的材料:

  1. 微软提供了一份学习路径材料,我个人认为是比较为开发人员考虑的:http://shorturl.at/berF1

  2. 红帽编写的给开发人员的 OpenShift 文档是一份不可多得的实操手册:http://shorturl.at/pyEQS

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

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

相关文章

安装 java decompiler_Eclipse离线安装Java Decompiler插件(反编译)

Java Decompiler是Java语言的反编译工具,具体介绍见博客Java Decompiler(Java反编译工具)1、下载插件Eclipe的Java Decompiler插件名为JD-Eclipse,2、安装插件Ecipse安装JD-Eclipse(即Java Decompiler)插件步骤如下:打开Help --> Install …

给 ABP vNext 应用安装私信模块

在上一节五分钟完成 ABP vNext 通讯录 App 开发 中,我们用完成了通讯录 App 的基础开发。这本章节,我们会给通讯录 App 安装私信模块,使不同用户能够通过相互发送消息,并接收新私信的通知。在章节的最后,笔者将演示模块…

《C++ Primer》7.5.2节练习

练习7.41: #include <iostream> #include <string> using namespace std;class Sales_data {friend std::istream &read(std::istream &is, Sales_data &item);friend std::ostream &print(std::ostream &os, const Sales_data &item);pu…

零基础玩视频号?创作运营变现,你要的干货都在这了!

点击蓝字“大白技术控”关注我哟加个“星标★”&#xff0c;每日良时&#xff0c;好文必达&#xff01;不少小伙伴应该已经听说过视频号这个新功能了&#xff0c;视频号是微信内测的短视频功能&#xff0c;本人已经在视频号里刷了2个月了。3月中旬正式开通了视频号 「大白技术控…

Asp.Net Core 中IdentityServer4 实战之 Claim详解

一、前言由于疫情原因&#xff0c;让我开始了以博客的方式来学习和分享技术&#xff08;持续分享的过程也是自己学习成长的过程&#xff09;&#xff0c;同时也让更多的初学者学习到相关知识&#xff0c;如果我的文章中有分析不到位的地方&#xff0c;还请大家多多指教&#xf…

程序员还有35岁的坎吗?

昨天晚上和多年未见的前同事聊天&#xff0c;提到了程序员的年龄歧视问题&#xff1a;自己年龄也 30 出头了&#xff0c;在思考 IT 届流传的 35 岁是一个坎的问题&#xff1b;开始注重提升管理能力&#xff0c;担心35岁之后&#xff0c;一线写代码的岗位不能胜任&#xff1b;公…

java 左移 返回值_java左移右移运算符详解

在阅读源码的过程中&#xff0c;经常会看到这些符号<< &#xff0c;>>&#xff0c;>>>&#xff0c;这些符号在Java中叫移位运算符&#xff0c;在写代码的过程中&#xff0c;虽然我们基本上不会去写这些符号&#xff0c;但需要明白这些符号的运算原理&…

人与人的差距在于认知

作者介绍findyi&#xff0c;腾讯、360码农&#xff0c;前哒哒少儿英语技术VP&#xff0c;现任土豆教育CTO。工作和生活中不光要埋头干活&#xff0c;还要抬头看天。思考总结方法论是提升认知的必备途径&#xff0c;是将碎片化知识总结为动态的智慧的过程。认知有多重要&#xf…

.NET5来了你别慌

近日微软.Net大咖Scott在博客中对外宣传.NET5首个预览版&#xff0c;并且我们可以通过微软的官网下载SDK5和运行库。很多朋友感觉.NetCore3.1还没搞明白&#xff0c;.NET5就来了感觉一下子慌了神。在这里我提醒朋友们&#xff0c;瞬息万变的世界中&#xff0c;总有相对不变的真…

java8 stream 最大值_JDK8-Stream流常用方法

Stream流的使用流操作是Java8提供一个重要新特性&#xff0c;它允许开发人员以声明性方式处理集合&#xff0c;其核心类库主要改进了对集合类的 API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中&#xff0c;能 让代码更加简…

周三晚6点半!盛派首席架构师“苏老师”在线解密内部系统框架!

工作中有些事&#xff0c;看起来只用一会会儿就能完成&#xff0c;但真正完成起来&#xff0c;总会遇到一些意想不到的困难&#xff01;你一定碰到过这样的情况——开发时间 2 周的项目&#xff0c;搭框架就要用 1 周&#xff0c;刚开发完&#xff0c;各种调试和修 bug又花去 2…

给微软的日志框架写一个基于委托的日志提供者

动手造轮子&#xff1a;给微软的日志框架写一个基于委托的日志提供者Intro微软的日志框架现在已经比较通用&#xff0c;有时候我们不想使用外部的日志提供者&#xff0c;但又希望提供一个比较简单的委托就可以实现日志记录&#xff0c;于是就有了后面的探索和实现。Solution基于…

C++分析使用拷贝控制成员和调用构造函数的时机

我们来分析下面这段代码&#xff1a; #include <iostream> #include <vector>using namespace std;struct X {X() {cout << "构造函数X()" << endl;}X(const X &) {cout << "拷贝构造函数X(const X&)" << en…

《C++ Primer》13.1.4节练习

练习13.14: 这是一个典型的应该定义拷贝控制成员的场合。如果不定义拷贝构造函数和拷贝赋值运算符&#xff0c;依赖合成的版本&#xff0c;则在拷贝构造和赋值时&#xff0c;会简单复制数据成员。对本问题来说&#xff0c;就是将序号简单复制给新对象。 因此&#xff0c;代码中…

十问十答 CDDL 许可证

今天我们来整理一下通用开发和发行许可证 CDDL 的十大问题清单。通用开发与发行许可证&#xff08;Common Development and Distribution License&#xff0c;CDDL&#xff09;由已被甲骨文公司收购的太阳微系统公司&#xff08;Sun Microsystems&#xff09;发布的一种开源许可…

Http Server API路由请求到web程序

引言接上文&#xff0c;容器内web程序一般会绑定到http://0.0.0.0:{某监听端口}或http://:{某监听端口}&#xff0c;以确保使用容器IP可以访问到web应用。正如我们在ASP.NET Core官方镜像显示的&#xff0c;ASP.NET Core程序在容器内80端口监听请求This image sets the ASPNETC…

《C++ Primer》13.1.6节练习(部分)

练习13.18: #include <iostream> #include <string> using namespace std;class Employee {private:static int sn;public:Employee() {mysn sn;}Employee(const string &s) {name s;mysn sn;}const string &get_name() {return name;}int get_mysn() …

用Azure Custom Vision 零代码创建一个口罩识别模型

新冠肺炎下&#xff0c;地球是一家&#xff0c;不分国籍&#xff0c;不分种族&#xff0c;或者现在只能呆在家中&#xff0c;但是也是一种对抗疫的支持。停课不停学留在家中&#xff0c;不仅是对学生&#xff0c;对于所有人都是有用的。在现阶段&#xff0c;大家可能最需要的不…

C++拷贝构造函数调用时机分析

让我们来分析下面这段代码&#xff1a; #include <iostream> #include <string> using namespace std;class Employee {private:static int sn;public:Employee() {cout << "Employee()" << endl;mysn sn;}Employee(const string &s) …

百万年薪程序员的7点能力

作者介绍findyi&#xff0c;腾讯、360码农&#xff0c;前哒哒少儿英语技术VP&#xff0c;现任土豆教育CTO。几周前&#xff0c;微盟爆了个大雷&#xff0c;数据库让内部员工删库跑路。写了篇文章&#xff0c;做了一些我的判断&#xff1a;从微盟36小时故障&#xff0c;谈谈数据…