文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Kubernetes设计的原则是什么

2023-06-04 17:54

关注

本篇内容介绍了“Kubernetes设计的原则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

引言:

今天我要带给大家的是2018年底,在西雅图举办的Kubecon的一场分享,来自谷歌K8s团队的工程师Saad Ali分享的《Kubernetes设计原则》。这场会议虽然已经过去一年多了,但是我觉得本会议的内容非常值得学习,我们大都知道K8s是如何工作的,但是本文带我们了解k8s背后的设计原则,以及为什么要这样设计。
对于跨云和本地环境在分布式系统上管理和部署工作负载,Kubernetes很快变得不可或缺。
虽然现在大多数人都熟悉如何使用Kubernetes,但很少有人知道其背后的“为什么”?为什么Kubernetes API看起来是这样的?为什么Kubernetes组件仅通过Kubernetes API相互交互?当您可以轻松地直接从pod引用卷时,为什么会有PersistentVolumeClaim对象?
为了回答这些问题并帮助您对Kubernetes进行更深入的了解,本讲座将揭示支撑Kubernetes设计的原理。

原则1. Kubernetes APIs 

是声明性的而非命令性的

我们从最简单的一个例子开始,要如何在一台节点上启动需要运行的任务。
Kubernetes设计的原则是什么
最简单的方式就是发送一个命令,启动容器。
Kubernetes设计的原则是什么
但是这样做的话,如果容器,节点崩溃,或者节点临时不可访问的时候,用户就必须监控和存储每一个节点和容器的状态,捕获所有的异常,并做异常处理。也就是说把所有的复杂的异常处理的逻辑交给客户端来做。
这就引入了Kubernetes的第一个设计原则:
Kubernetes APIs 是声明性的而非命令性的 ( Kubernetes APIs are declarative rather then imperative )
命令式:
声明式:

下图是一个声明式API的例子:

用户创建一个API对象

Kubernetes设计的原则是什么

所用的组件并行工作来达到该状态。

Kubernetes设计的原则是什么

声明式的API支持自动恢复。例如:

1、节点B挂了

Kubernetes设计的原则是什么

系统自主地把Pod移动到健康的节点A上

Kubernetes设计的原则是什么

这里需要注意主节点只是存储了Pod的定义声明,而不会向节点B发送命令,如果那样做,主节点就会变得和我们之前提到的客户端一样,复杂而脆弱,且难以扩展。这就引入了K8s的第二个设计原则:
Kubernetes控制平面是透明的,没有隐藏的内部API ( The Kubernetes control plane is transparent. There are no hidden internal APIs. )

原则2.  Kubernetes控制平面

是透明的,没有隐藏的内部API

之前:
现在:
我们来看一个Pod创建的例子:
如下图所示,所有的组件都监视Kubernetes API,然后决定自己应该怎么做。
Kubernetes设计的原则是什么
用户调用API声明要创建的Pod
Kubernetes设计的原则是什么
主节点创建Pod的定义
Kubernetes设计的原则是什么

Scheduler通过API观察到Pod A的定义,通过调度运算,决定要在Node B上创建Pod A,并通过API更新主节点上的Pod A的定义。

Kubernetes设计的原则是什么
Node B观察到Pod A的定义是在自己的管辖范围,启动Pod A
Kubernetes设计的原则是什么
用户通过API删除 Pod A
Kubernetes设计的原则是什么
节点B发现 Pod A被删除
Kubernetes设计的原则是什么
节点B删除Pod A
Kubernetes设计的原则是什么
这样做的能促成一个更简单,更健壮的系统设计,并很容易从故障状态中恢复。系统没有单点故障,主节点的职责非常简单。
这样做的另一个好处是,系统更容易扩展和组合。因为没有内部隐藏的API,用户可以很容易的用自定的组件替代已有组件,或者增加自定义的功能。
K8s还有很对对象对业务是很重要的,例如存储密码的密匙文件secret,配置configmap,或者下行API提供Pod的基本信息。那么应用程序必须修改为调用KubeAPI来或者这些信息么?
这就引入了Kubernetes的第三个设计原则:
满足用户的需求 ( Meet the user where they are )

原则3.  满足用户的需求 

之前:
现在:

Kubernetes设计的原则是什么

我们可以举一个例子,是关于远程存储的。

Kubernetes设计的原则是什么

如上图所示,Pod可以直接引用一个远程的存储卷(GCE PD,AWS EBS,NFS等),kubernetes会自动使得该卷被用于Pod。但是这样做的话,有一个问题,如果你要迁移到一个新的基础架构上,那么它就不工作了。于是这就引入了kubernetes设计的第四个原则:

可移植的工作负载 ( Workload portability )

原则4. 可移植的工作负载

持久卷(PersistentVolumn,PV)和持久卷声明(PersistenVolumnClaim, PVC)就是这样一个例子。

Kubernetes设计的原则是什么

Kubernetes设计的原则是什么

如上图所示,通过PVC的抽象,用户Pod并不直接引用GCE PD或者EBS,这样就使得该Pod可以在不同的基础架构中互相迁移,做到可移植。就像操作系统一样,该设计使得系统应用和底层的硬件或者架构实现分离解耦。

总结

本文总结了Kubecon 2018的一场由谷歌高级软件工程师、kubernete开发人员Saad Ali分享的《Kubernetes设计原则》。其中的四个设计原则分别是:
  1. Kubernetes APIs 是声明性的而非命令性的

  2. Kubernetes控制平面是透明的,没有隐藏的内部API

  3. 满足用户的需求

  4. 可移植的工作负载

通过该分享,我们可以发现,K8s的背后设计原则的原因,其实它软件设计的一些一般性原则是一致的,虽然面向对象已经不在是什么流行的术语,但是本文中的设计原则和面向对象的设计原则高度一致。
希望本文的分享能帮助你理解K8s背后的设计原则。

“Kubernetes设计的原则是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯