浅淡Kubernetes 与容器技术体系的最佳方法

我们已经进入到容器化时代,Kubernetes成为了市场上容器编排的事实标准,而且k8S 同样具备了微服务所需要的服务注册与发现、负载均衡、配置中心。Spring cloud 的核心是Netflix微服务框架,非常成熟,但是在netflix oss开发初期,那个时候还没有docker,我们现在所有的服务都是通过虚拟容器承载的。

Netflix oss的许多内容都是在一个已经过去的年代写出来的,那时所有东西都只能运行在AWS云上而没有其它选择。关于那个年代的许多宝贵遗产和前提假设都已经被封装到了Netflix的库里面,对于现在你运行的环境(比如Linux容器)已经不适用了。在Linux容器、Docker、容器管理系统等等出现之后,我们越来越看到把我们的微服务运行在容器(公有云、私有云,或者都要等等)里的巨大价值。另外,因为这些容器都是直接把这些服务打包起来,所以我们倾向于不要过多关心在容器里面运行的到底是什么技术(是Java?还是Node.js?或者Go?或者.NET Core?)

Kubernetes是多语言的,以通用的方式为所有语言解决分布式计算问题。Kubernetes提供了配置管理、服务发现、负载均衡、跟踪、统计、单实例、平台级和应用栈之外的调度工作。该应用不需要任何客户端逻辑的库或代理程序,可以用任何语言编写。这意味着一个平台可以被多个团队(包括使用SpringJava开发人员)使用,并提供多种用途:应用程序开发、测试环境、构建环境(源码运行、构建服务、依赖仓库)等。Kubernetes解决了更广的微服务架构问题。除了提供运行时服务,Kubernetes也可以让你制定环境、设置资源限制、RBAC、管理应用程序生命周期、允许自动扩容和自我修复(几乎表现得像一个抗脆弱平台)。

  • 在K8s集群中,没有必要拥有Eureka。K8s中的ETCD拥有所有必要的信息。

  • 您的应用程序将通过指定的K8s服务名称联系K8s API服务器以获取端点信息。

  • Kubernetes 可以解决你所遇到的问题,可能可以取代netflix的整套技术

  • 容器化时代我们应当选择Kubernetes

  • 基于Kubernetes 构建.NET Core 的技术体系

  • 为什么是容器,Docker和Kubernetes?


今天我们来谈一谈,学习 Kubernetes 和容器技术体系的最佳方法,到底是什么。学习一门综合性的技术,不应该着急一头扎进去看源码。理清楚自己的定位,才是最重要的。


定位一:纯粹的开发人员


如果你是一位纯粹的开发人员,无论是前端、后端,还是应用、游戏的开发,你首先应该明白这样两个道理:


  1. Kubernetes 和容器技术主要解决的,是代码编写完成后的事情。这不单单是发布或者 CI/CD,而是指从你执行完 git commit && git push 之后开始,都应该进入容器化的管理流程当中,当然包括后续的发布、运维、升级、回n滚等所有阶段。


  2. Kubernetes 体系的核心,是为开发者提供编写代码过程中的“微服务编程范式”。


比如,在你编写代码的时候,你应该清楚地知道:我该如何划分模块,就能更方便地利用到 Kubernetes 的 Pod 模型,来构建更加低耦合、高内聚的代码制品,让我后面的升级和重构工作更加容易。


再比如,当你的代码需要与一个外部资源进行交互的时候,你应该首先想到:我的这个外部资源,是不是可以作为一个 Kubernetes 的 CRD 放到 Etcd 里面。


这样,我编写的代码,就可以遵循一个自定义 Controller 或者 Operator 的编程范式,通过声明式 API 的方式来执行业务逻辑。这样写出来的代码一定会更加简单、健壮、容易维护。


这样的例子其实非常多。作为开发人员,你最应该关注的,是 Kubernetes API 对象的细节、容器设计模式以及 Kubernetes API 编程范式。


640?wx_fmt=png

Kubernetes里的所有API对象


  • 你应该习惯于把你的服务想象成一个个容器,把整个应用想象成一个 Pod,学会把基于容器和 Kubernetes 的设计思想和架构方式,融入到自己平常的工程实践当中。

  • 你应该大量实践这些思想和设计模式,编写各种各样的 CRD 和 Controller,并想办法提高这些自己编写的自定义 Controller 项目的性能和服务能力。

  • 你应该尝试扮演公司或者组织中推广微服务和云原生体系倡导者,并热心地帮助团队成员共同学习 Kubernetes 的设计思想和 API,全力帮助 Istio 或者 Knative 这样的 Service Mesh 和 PaaS 平台在组织中落地。


这些,都是增强你在即将到来的云计算时代竞争力的有效手段。


当然,如果你对 Kubernetes API 以及编程范式还不熟悉,甚至对 Kubernetes API 的普适性还有所怀疑,那么你可以阅读一下《深入剖析 Kubernetes》的最后一篇文章。相信 Kubernetes  API 成为云上编程标准的故事,一定会对你有所启迪。现在订阅《深入剖析 Kubernetes 》,还可以享受拼团优惠价¥79,原价¥99,仅限今天24小时。


640?wx_fmt=png

扫码二维码,马上免费试看


定位二:专注于服务器端的编程人员/运维工程师


而如果你是一位专注于服务器端的编程人员,或者运维工程师,那么你更应该关注的是 Kubernetes 这个项目背后的实现原理,它所体现出来的 Borg 和 Omega 项目多年来大规模集群管理的经验教训。


比如,声明式 API 的设计与实现原理,Informer、Controller 这些机制的实现方式,为什么说 Etcd 最适合的场景是配置管理,集中式集群调度器的核心机制与常用策略都有哪些。


此外,Kubernetes 项目的各个可扩展性接口,也是你需要重点关注和理解的对象,比如 CNI 和网络插件的工作方式、CSI 和存储插件的设计、Kubernetes Volume 管理的完整流程,以及 CRI 的设计和各种 container runtime的异同。


从这个角度来说,Kubernetes 项目就是当前云计算平台层开源项目的事实标准,熟悉它的思想、架构、实现细节甚至核心组件的源码,不仅是学习这项技术的必经之路,也是传统后端技术人员向云端转型的最佳途径。


640?wx_fmt=png       

Kubernetes通过存储插件管理容器

持久化存储的原理


你应该尝试扮演公司和组织中进行云原生和基础架构转型的关键角色,而不是充当传统和守旧那一方。你应该尝试用容器和 Kubernetes 化的思想来影响周边的每一位工程师。要记住,这个进程每前进一步,你的价值就放大一分。


定位三:学生、刚刚入行的初学者


而作为学生、刚刚入行的初学者,或者是对这个领域充满兴趣准备在这里作为一番的后端从业人员,我希望你对容器和 Kubernetes 技术体系的学习和实践,更要关注这个项目和平台背后更深层的基础和底盘部分,这包括:


  • 了解操作系统和硬件的实际工作方式,尤其是CPU、存储和网络。

  • 充分理解操作系统的设计,甚至可以根据需要重新实现或者绕过某些部分,这是你后面进行系统性能优化的关键所在。

  • 理解“所有系统都是分布式系统”的道理。了解经典的分布式系统设计的思想,并从实际的工程实践中理解这些解决思路,这也是 Kubernetes 这个分布式项目构建的基础。


只有清楚了自己的定位,你才能够在 Kubernetes 这样一个大而全的技术体系面前做到“有所放矢,有的放矢”,才能够把容器和 Kubernetes 这项技术发展浪潮,与自己的技术路线和个人成长历程,真正地关联起来。

640?wx_fmt=png     

Kubernetes 项目核心功能的“全景图”


一旦明确了定位,抓到了这其中的精髓和主线,那么接下来的学习过程对于你来说,其实就是“无招胜有招”,可以随心所欲地按照你实际的项目、所关心的领域逐步展开,而完全不必拘泥于某种特定的套路了。


这里再推荐一下《深入剖析 Kubernetes 》,作者是张磊,也是Kubernetes项目资深成员和项目维护者 ,他在专栏中对Kubernetes的整体架构进行深入的剖析。会从容器的发展史开始讲起,可以帮助你轻松的学习Kubernetes,我已经学习了一半,讲得不错,是我至今为止看到的最好的Kubernetes学习资料。所以也推荐给你。


对了,现在订阅《深入剖析 Kubernetes 》,还可以享受拼团优惠价¥79,原价¥99,仅限今天24小时。


640?wx_fmt=png

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

 

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

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

相关文章

单位根反演题单

单位根反演题单 LOJ#6485. LJJ 学二项式定理 单位根反演。 bzoj 3328 PYXFIB 单位根反演矩阵乘法。 POJChallengeRound2 Guideposts 求图上路径长度为k的倍数的方案数。 单位根反演矩阵乘法。 #include <vector> #include <list> #include <map> #inc…

.NET Core 批量重置 Azure Blob Storage 的 mime type

点击上方蓝字关注“汪宇杰博客”我的博客使用 Azure Blob Storage 存储文章配图&#xff0c;结果今天玩 Azure CDN 的时候爆了&#xff0c;原因是图片mime type不对。我们来看看如何在 .NET Core 里批量重置 Azure Blob Storage 中文件的mime type吧。起因使用编程方式&#xf…

AGC026E - Synchronized Subsequence

AGC026E - Synchronized Subsequence 题目描述 Solution 定义cnt[x][0],cnt[x][1]cnt[x][0],cnt[x][1]cnt[x][0],cnt[x][1]表示在前xxx个数中0的个数和1的个数分别是多少。 然后把整个串sss划分为若干个子串&#xff0c;划分点在所有cnt[i][0]cnt[i][1]cnt[i][0]cnt[i][1]c…

[NewLife.XCode]实体工厂(拦截处理实体操作)

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netcore&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0c;代…

AGC027D - Modulo Matrix

AGC027D - Modulo Matrix 题目描述 Solution 有一个显然的想法是先填一部分格子&#xff0c;剩下的格子的即为相邻格子的LCM1LCM1LCM1&#xff0c;但这样填写的数呈指数级增长&#xff0c;并不优秀。 我们发现一个格子的数是否可以填写只和相邻的四个格子有关系&#xff0c…

DDD该怎么学

2006年&#xff0c;国内的互联网才刚刚萌芽&#xff0c;人们甚至还不习惯网购&#xff0c;大多数在校生都在宿舍里刷魔兽世界副本。但企业软件开发却得到了蓬勃发展&#xff0c;各种公司和事业单位都纷纷进行信息化转型。然而人们很快发现&#xff0c;企业应用业务逻辑的复杂度…

博弈论练习2

博弈论练习2 \;1.AGC010F - Tree Game 题目描述 Solution 一道简单博弈题&#xff08;不知道为啥能作为AGC的F题&#xff09;。 考虑树形dpdpdp&#xff0c;设f[x]f[x]f[x]表示以xxx为根的子树中是否先手必胜。 则f[x]1f[x]1f[x]1当且仅当能找到xxx的子节点vvv满足f[v]0f[v…

Net Core下使用RabbitMQ比较完备两种方案(虽然代码有点惨淡,不过我会完善)

一、前言上篇说给大家来写C#和Java的方案&#xff0c;最近工作也比较忙&#xff0c;迟到了一些&#xff0c;我先给大家补上C#的方案。二、使用的插件HangFire一个开源的.NET任务调度框架&#xff0c;最大特点在于内置提供集成化的控制台,方便后台查看及监控&#xff0c;支持多种…

利用ASP .NET Core的静态文件原理实现远程访问Nlog日志内容及解决遇到的坑

最近项目上试运行发现&#xff0c;很多时候网站出了问题或者某个功能不正常&#xff0c;常常需要运维人员去服务器里面查看一下日志&#xff0c;看看日志里面会产生什么异常&#xff0c;这样导致每次都要去远程服务器很不方便&#xff0c;有时服务器是客户保管的不能让我们随意…

后缀数组SA

后缀数组SA 模板 花了不少时间才理解倍增求SASASA的实现方法&#xff0c;我还是太菜了。 定义sa[i]sa[i]sa[i]表示排名为iii的后缀的起始位置。 定义rank[i]rank[i]rank[i]表示起始位置为iii的后缀的排名。 显然两者之前互逆。 void solve() {int m122;for (int i1;i<m;…

使用.NET Core 编写端到端测试

什么是端到端测试端到端测试也称E2E,与单元测试、集成测试、组件测试、契约测试相比&#xff0c;端到端测试的目的是验证整个系统是否满足业务目标&#xff0c;而不管使用的组件架构如何&#xff0c;为了实现这一点&#xff0c;系统被视为一个黑盒子&#xff0c;测试尽可能多地…

Manacher

Manacher(马拉车算法) Manacher算法主要用于求解回文串问题&#xff0c;能够统计出以每一个位置为中心的回文串的个数&#xff0c;效率极高。 模板 题目描述 Manacher算法的实现过程&#xff1a; 1.在字符串每两个字符之间插入一个分隔符。 2.iii从111到nnn求解P[i]P[i]P[i…

.NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 )...

如果你使用过 WPF/UWP 等 XAML UI 框架&#xff0c;那么应该了解到附加属性的概念。那么没有依赖属性支持的时候如何做附加属性的功能呢&#xff1f;你可能会想到弱引用。但这需要做一个弱引用字典&#xff0c;要写的代码还是非常麻烦的。本文介绍 .NET 的 ConditionalWeakTabl…

P4548 [CTSC2006]歌唱王国

P4548 [CTSC2006]歌唱王国 题目描述 Solution 这一题在《具体数学&#xff08;混泥土数学&#xff09;》里讲得很详细了啊&#xff0c;这里相当于总结一下&#xff0c;想具体了解的直接看书吧。 我们先考虑字符集为222的情况&#xff0c;设硬币正面朝上(H)(H)(H)的概率为pp…

在C#中使用Json.Net进行序列化和反序列化及定制化

序列化&#xff08;Serialize&#xff09;是将对象转换成字节流&#xff0c;并将其用于存储或传输的过程&#xff0c;主要用途是保存对象的状态&#xff0c;以便在需要时重新创建该对象&#xff1b;反序列化&#xff08;Deserialize&#xff09;则是将上面的字节流转换为相应对…

SRM614 Div1 Hard

SRM614 Div1 Hard 题目描述 Solution 显然有&#xff1a; E(x,y)(E(x−1,y)E(x,y−1))/21E(x,y)(E(x-1,y)E(x,y-1))/21 E(x,y)(E(x−1,y)E(x,y−1))/21 直接高斯消元时间复杂度O((nm)3)O((nm)^3)O((nm)3)。 可以发现这种做法十分浪费&#xff0c;消元之后会有大量冗余元素&…

知乎个人精选 | 绝版的专业书到哪里找最快最高效?

估计书到用时方恨少是很多软件开发人员的苦恼&#xff0c;当然我这里提到的"少"表示稀少&#xff0c;买不到之意~比如你加入一家政府机构或给为政府机构服务的公司做开发&#xff0c;主要做传统软件&#xff0c;对方需要使用 Win Forms做开发&#xff0c;你打算系统性…

HUD4035Maze

HUD4035Maze 题目描述 Solution 很容易写出期望的式子&#xff1a; 令fif_ifi​表示从iii号节点开始期望几步走出迷宫。 令pi1−ki−eip_i1-k_i-e_ipi​1−ki​−ei​表示选择走向其他边的概率。 令did_idi​表示iii号结点的度数。 fikif1pi∑fjdi10eiAnsf1f_ik_if_1p_i\sum…

正反案例介绍SOLID原则

一.概述SOLID五大原则使我们能够管理解决大多数软件设计问题。由Robert C. Martin在20世纪90年代编写了这些原则。这些原则为我们提供了从紧耦合的代码和少量封装转变为适当松耦合和封装业务实际需求的结果方法。使用这些原则&#xff0c;我们可以构建一个具有整洁&#xff0c;…

LOJ#2145. 「SHOI2017」分手是祝愿

LOJ#2145. 「SHOI2017」分手是祝愿 题目描述 Solution 首先有一个结论&#xff1a; 灯的状态序列a1,a2...ana_1,a_2...a_na1​,a2​...an​唯一对应了一个最优操作序列b1,b2...bnb_1,b_2...b_nb1​,b2​...bn​。 因为编号最大的灯只能由开关自己来改变。 因此&#xff0c;…