如何高效的管理云资源

296 阅读4分钟

开始前,先介绍一下自己的工作内容,我是后端开发,不擅长运维,只是以前负责过一些服务器运维的事,所以略懂一些

管理资源的几种方式

  1. 手动管理
  2. 半自动管理
  3. ?管理

手动管理

上家公司因为是中小企业,人员工作分配不像大公司分的那么细,所以运维的活也是开发负责人干了,我就是其中一个,用的也是非常土鳖的手动管理方式,如果你说为什么?因为我也不知道有啥其它更好的方式,毕竟运维不是我擅长的事,手动管理最麻烦的事是啥呢?太容易忘记一些步骤了,比如创建云主机的时候,设置安全组或VPC的时候,选错了什么的,而且你会发现,等创建过程标准化以后,创建资源就像是后端写CRUD代码一样了,很枯燥,因为是手动操作,所以完全没有复用一说了,交接全靠文档和嘴

有想法的开发可能会想了,这些CRUD代码能不能用代码来生成呢?创建资源其实也可以想下,这些资源的CRUD能不能用代码来生成呢?

半自动

这种管理方式也是来了西厂后来了解到的一种方式,ansible(没用过)有一些云厂商的一些模块,比如阿里的

现在可以这样来创建云资源了,开始向IaC迈出一小步了,现在创建资源,只要按要求传入一些数据就好了,流程都已经用playbook标准化了,相比于手动管理,这已经是非常大的进步了

image.png

这样就好了吗?我觉得还能更好一些,比如:

  1. count是用来指定要创建的实例数量,假如一开始我写的是2,创建了2台服务器,没有问题,但是明天有一个活动,我想将服务器数量加到5台,此时我们要怎么做呢,先去云厂商那里查下现在有几台服务器了,然后再用5减去这个数量,就是现在count的值,缺少了一个文件来存储资源的状态
  2. 能不能用一种声明式的方式来管理资源呢,我要多少资源,就要这个配置文件上声明一下就好了呢,不要再让我去记那么多东西了,比如像 k8sdeployment一样,这里replicas写的是3,在资源充足的情况下,绝对不会小于3

image.png

Terraform

这个就是我们接下来要说的一个东西了,先看下这玩意大家是怎么定义的

TerraformHashicorp 公司开源的一种多云资源编排工具。使用者通过一种特定的配置语言 HCL 来描述基础设施,由 Terraform 工具统一解析,构建资源之间的关系,生成执行计划,并通过调用各家云厂商的具体实现来完成整个基础设施生命周期的管理。

简而言之就是用一种特殊的文本格式来描述基础设施,之后对基础设施进行 CRUD 的一种工具。

ansible创建阿里云资源的playbook,我们改造一下

image.png

然后执行一下 terraform apply,就马上开始创建2台服务器了

image.png

此时我们要将服务器加到5台,只要将count改成5就好了,还要用小学数学5 - 2 = 3

image.png

image.png

从图中可以发现,现在服务器数量变为5了,做的是增量操作,因为之前创建过2台了,我们期望最终是有5terraform会对比状态文件,发现还缺3台,所以又创建了3

terraform.tfstate 这个就是状态文件,生产环境切记要保管好,不然会比较麻烦

image.png

此时你可能会问了,状态文件没有了,会怎么样?不好意思,terraform会认为你没有执行过,所以会再创建5台服务器,此时应该会有 2 + 5 = 7服务器

你又会再问,如果我直接从云厂商界面删除了2台服务器,这里再执行apply会怎么样?没怎么样,因为你的状态文件没有变,这种行为也尽量避免,不然后续操作资源可能会出现一些意想不到的情况。

terraform我们可以很简单的创建多可用区部署异地部署

多可用区部署

在深圳的A,C可用区共创建4台服务器

image.png

image.png

异地部署

image.png

image.png

image.png

image.png

image.png


一些有用的链接:

www.infoq.cn/article/rgw…

lonegunmanb.github.io/introductio…