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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 快速学习环境管理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 的发布就好了

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

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 SQL 缓存
【软件开发规范二】《禁止项开发规范》
文章详细阐述java开发中的禁止项内容
【软件开发规范二】《禁止项开发规范》
|
2月前
|
安全 网络安全 API
什么是软件定义安全SDSec
软件定义安全(Software Defined Security,SDSec)是一种从软件定义网络(SDN)引申而来的概念,其核心原理是将网络安全设备与其接入模式、部署方式、实现功能进行解耦。这种解耦使得底层的网络安全设备可以抽象为安全资源池中的资源,而顶层则通过软件编程的方式进行智能化、自动化的业务编排和管理,以完成相应的安全功能,实现灵活的安全防护 。
40 1
|
2月前
|
存储 Kubernetes 监控
软件环境管理问题之不可变环境的定义如何解决
软件环境管理问题之不可变环境的定义如何解决
交易所系统开发详细项目丨案例规则丨方案设计丨步骤需求丨逻辑功能丨源码程序
Requirement analysis and planning: Collaborate with customers to clarify the requirements and goals of the coin exchange system. Understand the customer's business model, target user group, and currencies to be supported by the exchange, and develop a detailed demand plan.
|
运维 测试技术 数据库
测试思想-流程规范 关于预发布环境的一些看法
测试思想-流程规范 关于预发布环境的一些看法
502 0
|
存储 运维 Kubernetes
环境管理3阶段:从说明书到命令到说明式|学习笔记
快速学习环境管理3阶段:从说明书到命令到说明式
环境管理3阶段:从说明书到命令到说明式|学习笔记
|
运维 监控 Cloud Native
声明式环境管理最佳实践|学习笔记
快速学习声明式环境管理最佳实践
137 0
声明式环境管理最佳实践|学习笔记
|
存储 运维 监控
声明式环境管理最佳实践 | 学习笔记
快速学习声明式环境管理最佳实践
声明式环境管理最佳实践 | 学习笔记
|
前端开发 测试技术
|
运维 负载均衡 安全
SecDevOps,软件定义安全来了吗?
SecDevOps,软件定义安全来了吗?
296 0
SecDevOps,软件定义安全来了吗?
下一篇
无影云桌面