环境管理3阶段:从说明书到命令到声明式 | 学习笔记

简介: 快速学习环境管理3阶段:从说明书到命令到声明式

开发者学堂课程【ALPD 云架构师系列:云原生 DevOps 36计-阿里云云效出品环境管理3阶段:从说明书到命令到声明式】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/772/detail/13502


环境管理3阶段:从说明书到命令到声明式


内容介绍:

. 说明书(文档)

. 命令(脚本

. 声明(配置)


一、说明书(文档)

image.png

不可执行,编辑文档的人和执行操作的人不是同一个人。

而且文档是不可执行的不可验证的说明这个软件最新状态的。但是写软件的人并不应一定会去及时的去更新文档同时写软件的人即便更新文档这个文档是不是工作了其实他没有办法得到及时的验证呢因为他用不到


二. 命令(脚本)

基础设施管理都有运维负责,Dev 和 Ops 是上下游的关系,界限分明

通过命令的方式写各种脚本然后把所有的命令组合在一起作为一个批处理文件

因为每次布一个新环境都非常麻烦,需要花费大量时间在改参数然后配各种各样的 ip 等。情况下效率太低所以就可以写一个脚本去做这件,这时脚本那就起着一个部署的作用

但是这个脚本可能慢慢就会变的很多,因为要应对各种各样的环境

比如说有的环境可能是三个节点但另外环境可能是十二个节点,这时很难做到很好的适配可能还有网络差异,任何差异都会存在这个问题所以我们会写一系列的脚本然后为各种情况去做控制

如果要操作这个脚本,写脚本或者维护脚本一般都慢慢开始的,需要有专人负责。然后这个技术设施就开始变成运维的一个工作,这个工作同时包括了怎么去做自动化运脚本甚至做一个平台

开发是在前面,而运维在后面,这就是个上下游的关系,并且互相之间很分明开发的时候 给的是一个镜像包或者是代码,而剩下的工作,比如怎么把它上去有哪些安全策略 这些东西全部都是运维的事情

通过命令式的方式我们会发现维护成本是特别高的而且相对来说,它是偏命令式的就是说所有的东西在不同的场景里可能要写的命令是不一样的这种组合或者场景,它的复杂度就会非常高,所有就需要做很多检查。这个检查是否符合预期,然后根据不同的反馈,做不同的判断随着环境的种类越来越多复杂度越来越上升


三. 声明(配置)

Dev 和 Ops 的界限变得模糊,很多基础设施的定义向左移,基础设施的的维护工作由K8S(或其他工具)标准化

1. 声明式与命令式最大的差别是什么

命令式定义做什么比如说要配个ip地址,或者要把内存设为512G。

那么第三个阶段就是定义要什么或者是什么比如说这个服务有两个副本,每个副本需要两个 CPU然后可能其中一个对于内存还有网络有一些要求这个是我给他定义的所以我在这个第三个阶段所有的声明其实声明的是个终态是什么样子的

如果定义说需要三个节点并且三个节点成本是最低的么这个声明就很明确了这个就是声明优势

总之,命令式是把环境当做一个怎么样的东西操纵的。声明式的更多是站在环境或者站在应用服务本身来说需要什么运行时是什么样的状态,去把这个东西给定义声明。

2. 声明式的描述

提供了环境的确定性表达

这里其实是两种不同的思维方式,声明式的描述提供了环境的确定性表达描述是什么,那么环境是什么这是一个非常大的一个跨越

声明其实都是通过 k8s 来做前面的练习也都通过 k8s来K8s 整个体系是怎么做这个事情的呢?image.png

左上角的master 有好几个组件它有一个 etcd 存储各种各样的配置信息其实都是在 k8s 里面的下面的 node,就是真正的物理机或者虚拟机跟他们通信是通过 API 去通信的在每一个 node 上表示物理机物理机上其实会引起很多个 Pod,然后 Pod 上面会运行很多的容器这就是它的一个最简单的架构的样子

k8s 的那个最小单元是一个 Pod,Pod 里面会有容器也会有各种像网络或者存储这样的东西

Controller

#调用 APl server 的 list、watch 接口监听资源配置变化

for{

实际状态:=获取集群中对象X的实际状态

期望状态:=获取集群中对象X的期望状态

If {实际状态==期望状态}

{啥也不做}

else

{执行编排动作,将实际状态调整为期望状态}

}

这个其实监听一个变化比如说 API 里面我有一个变化这个变化,就是告诉我期望一个状态

那么controller那边就会去看我现在是什么状态比如我现在的那个节点是一个但是我希望有三个我就会想我是不是要去再扩两个他就会去逐步的去逼近这个目标状态那么等他达到目标状态的时候就不做了

所以整个过程其实是一个逐步逼近的过程我给他下发了一个声明然后他把这个声明慢慢的逼近声明的条件状态所以说其实环境的定义是面向终态的一个定义,这个是非常主要的一个特点就跟我们之前的各种运维的手段特点是很鲜明的就是面向终态去设计的

1.通过 sidecar 分离关注点

image.png

一般在一个应用开发的时候关注点是什么

如果写一个应用然后应用发到一个容器里容器就跑起来但是我们做开发大家都知道这个应用里面大量的代码其实不是应应用业务代码其实我们写了很多的比如说服务的相关的东西比如日志模拟监控熔断各种各样的代码是占了很大的比重的。无论是 sidecar  这样的框架其实也会有这样的问题就是有很多这样的代码而这代码维护者和升级节奏跟应用开发者其实不是一波人 通常情况下像阿里肯定会去做这些事情然后可能有些公司可能是自己有专门团队会去做这个事情那么他们有不同的节奏和关注点

传统情况下其实我们如果要遇到这样的问题,就需要整个升级应用本身才能达到这个效果但是云原生时代我们通常把它分离掉就是这个应用容器分离掉我们应用开发者关心的就是应用业务代码但这些服务相关是放到其他容器里的它会编排在同一个报道里面但容器的管理开发发布都跟开发者没关系这些就是属于 sidecar 容器是我们可以通过注入的方式或者在营业的行内来去配置的方式放到我们的 Pod 里面跑起来这样就实现了一个关注点的分离就是说我作为应用的开发者和我的中间件的开发者以及一些业务运维相关的一些开发者那我可以有自己的关注点而不需要互相之间有偶合性

如果你是一个业务的开发者的话你关注的是这个应用的容器所以说你的发布的节奏你的所有中心你的关注点都在发布容器这一块的应用容器

如果你是一个运维同学的话无论是应用运维或者是基础设施运维,那你的关注点基本上会在这一块你在这个 Pod 里头相应的会提供哪些服比如你对 Log Colletor 这样的一些东西有你自己的节奏这样的话大家的关注点就分离开了

而且分离开来还有一个好处我们中间下沉之后都会这种方式来去管理。这样一旦遇到相应的一些中间需要升级的时候这时你的业务代码是不需要做任何改变任何发布的,而只需要去做一个 sidecar 的发布就好了

通过这样可以去分离关注点前面我们提到了几点就是一致的环境需要有三个部分一个是相同的制品一个是相同的运行上下文还另外相同的编排规则其相同的运行上下文其本质就是这里有很多相应的一些配置

那刚才了解到传统的我们以前文档式的告诉我们应该怎么把环境弄起来到按脚本的这种方式。然后我们发现其实声明式不是特别完美的,它也有一些问题就是每一个新技术的引入都会带来好的地方之后同时带来一些成本问题。举一个很具体的例子就是声明式的话可能针对应用运行的时候,声明式需要相应的一些配置

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
编解码 自然语言处理
重磅!阿里巴巴开源最大参数规模大模型——高达720亿参数规模的Qwen-72B发布!还有一个的18亿参数的Qwen-1.8B
阿里巴巴开源了720亿参数规模的Qwen-72B大语言模型,是目前国内最大参数规模的开源模型。该模型在3万亿tokens数据上训练,支持多种语言和代码、数学等数据。Qwen-72B模型具有出色的评估效果,在数学逻辑和意图理解等方面超过了其他开源模型,并且支持多语言扩展。此外,阿里巴巴还开源了18亿参数规模的Qwen-1.8B模型,虽然规模较小但效果不错。Qwen-72B模型已对学术和个人完全开放,商用情况下月活低于100万可直接商用。有兴趣的用户可以通过相关链接获取模型地址和资源信息。
|
前端开发 JavaScript 异构计算
简述浏览器的渲染原理
浏览器渲染原理主要包括以下步骤:1)解析HTML文档生成DOM树;2)解析CSS生成CSSOM树;3)结合DOM与CSSOM生成渲染树;4)布局计算(回流)确定元素大小和位置;5)绘制(Paint)将节点转为图形内容;6)合成(Composite)多层图像。整个过程从文档解析到最终输出完整网页,并通过优化技术提升性能。
|
存储 搜索推荐 关系型数据库
实时数仓 Hologres产品使用合集之如何在新增列的时候将历史数据也补上默认值
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
PHP 数据安全/隐私保护
【PHP开发专栏】PHP魔术方法与对象操作
【4月更文挑战第30天】PHP 魔术方法是特殊方法,如`__construct`、`__get`等,在特定时刻自动调用,用于重写默认行为。本文分三部分介绍PHP魔术方法和对象操作:1) 魔术方法包括构造、析构、属性访问等,常用于控制访问权限、自动加载等;2) 对象操作涉及创建、访问属性和方法、克隆及序列化/反序列化;3) 案例展示如何在创建对象时设置默认值。
154 1
|
运维 监控 Cloud Native
阿里云云原生加速器成员企业袋鼠云创始人陈吉平:深耕国产自研数字化技术与服务,持续为客户创造价值
如今,袋鼠云已成功服务 5000 多家客户,涵盖金融、政务、教育、制造等 20+行业。11 月初,袋鼠云刚刚宣布完成过亿元 C+轮融资。袋鼠云秉承着“让数据产生价值”的使命,以科技创新驱动发展,不断迭代优化解决方案和生态结构,其中与阿里云的合作不得不说。
阿里云云原生加速器成员企业袋鼠云创始人陈吉平:深耕国产自研数字化技术与服务,持续为客户创造价值
|
图形学
Unity Particle System 制作刀光特效
Unity Particle System 制作刀光特效
803 1
Unity Particle System 制作刀光特效
|
前端开发
从头学前端-移动端布局
从头学前端-移动端布局
118 0
|
SQL 前端开发 Java
项目实战典型案例6——没有复用思想
项目实战典型案例6——没有复用思想
168 0
|
机器学习/深度学习 数据采集 人工智能
『航班乘客满意度』场景数据分析建模与业务归因解释 ⛵
本文结合航空出行的场景,使用机器学习建模,详细分析了航班乘客满意度的影响因素:机上Wi-Fi服务、在线登机、机上娱乐质量、餐饮、座椅舒适度、机舱清洁度和腿部空间等。
973 0
『航班乘客满意度』场景数据分析建模与业务归因解释 ⛵