Terraform管理云资源实践
背景
Terraform是一款开源的Cli工具,网上的很多文章都是单机安装一个然后创建个目录就去操作云资源;如果在高可用的前提,如何将Terraform cli变成一个嵌入运维流程的一个组件?不仅仅是人编写tf模板然后去apply?
自动化的驱动Terraform,无非包含这几个步骤:
- 初始化Terraform
- 填充资源模板
- apply资源
- show资源
初始化Terraform
创建一个云资源目录,如cloudxxx-test001
云资源的目录下需要有Terrafor的Provider信息,以及实例声明信息。
创建好了模板文件,就需要初始化Terraform,以及下载Provider插件,建议提前下载好插件到指定的目录,使用容器可以直接打到镜像里
这样初始化直接指定plugin地址:
/usr/local/bin/terraform init -plugin-dir=/Users/lixiangli/.terraform.d/plugins
注意:确保插件地址内有你声明的插件版本
由于Terraform apply是不支持选择apply哪个资源,因此上面的实现方式可以发现,一个目录是放一个云资源。为了让每次操作的影响范围是可控的。这种方式会带来一个问题,就是state的文件存储也必须是隔离的,否则出现的情况是apply 资源cloudxxx-test001时 cloudxxx-test002会被直接删除。
模板文件生成
通过代码的方式去驱动Terraform, 无法避免的一步就是生成所对应的云资源的模板文件,我们这边使用golang,所以找到需要对接的云的Provider的文档然后定义成如下:
resource "ucloud_disk" "ucloud_disk_{{ .ObjectMeta.UID }}" {
availability_zone = "{{ .Spec.Zone }}"
name = "{{ .Spec.InstanceName }}"
disk_size = "{{ .Spec.InstanceSize }}"
disk_type = "{{ .Spec.InstanceType }}"
charge_type = "{{ .Spec.ChargeType }}"
}
在程序运行时动态填充这些模板即可
选择合适的状态存储
Terraform是个有状态的组件,如果部署多个实例的话,官方默认的state文件的模式必然是无法满足需求的。
所以我们这边选择的是etcdv3
配置如下:
terraform {
required_providers {
ucloud = {
source = "ucloud/ucloud"
version = "~>1.23.0"
}
}
backend "etcdv3" {
endpoints = ["http://127.0.0.1:2379/"]
lock = true
prefix = "/terraform-state/clouddisk/77c2d636-7a59-11eb-9d32-12caef3c0b88"
cacert_path = ""
cert_path = ""
key_path = ""
}
}
provider "ucloud" {
public_key = "xxxxxxx"
private_key = "xxxxxx"
region = "cn-bj2"
project_id = ""
}
backend的prefix资源加了uuid,实际上是为了解决上面一个目录是放一个云资源锁带来的问题,也就是说那个uuid实际上是对应的单独资源id,每个资源都有单独的state文件
如何支持多云
支持多云是Terraform的强项,支持多云依然需要在上次软件做好一定的屏蔽工作。
Terraform需要做的就是准备好多套云的tf模板去填充
如腾讯云:
resource "tencentcloud_cbs_storage" "tencentcloud_disk_{{ .ObjectMeta.UID }}" {
storage_type = "{{ .Spec.InstanceType }}"
storage_name = "{{ .Spec.InstanceName }}"
storage_size = "{{ .Spec.InstanceSize }}"
availability_zone = "{{ .Spec.Zone }}"
project_id = "{{ .Spec.ProjectID }}"
}
如优刻得:
resource "ucloud_disk" "ucloud_disk_{{ .ObjectMeta.UID }}" {
availability_zone = "{{ .Spec.Zone }}"
name = "{{ .Spec.InstanceName }}"
disk_size = "{{ .Spec.InstanceSize }}"
disk_type = "{{ .Spec.InstanceType }}"
charge_type = "{{ .Spec.ChargeType }}"
}
上层的数据结构可以声明成一样的,所有的差异由tf模板来屏蔽
Terraform管理云资源实践的更多相关文章
- IaC云资源编排-Terraform
Terraform 2019/10/14 Chenxin 整理 转自: https://cloud.tencent.com/developer/article/1469162 IaC与资源编排 IaC ...
- 最佳实践丨使用Rancher轻松管理上万资源不是梦!
前 言 Rancher 作为一个开源的企业级 Kubernetes 集群管理平台.你可以导入现有集群,如 ACK.TKE.EKS.GKE,或者使用 RKE.RKE2.K3s 自定义部署集群. 作为业界 ...
- terraform 阿里云基本使用
1. 预备环境 安装了terraform 的软件的操作系统(windows linux mac 均可) 具有阿里云账户的 access_key secret_key 2. 配置 // terrafor ...
- 由浅入深SCF无服务器云函数实践
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:陈杰,腾讯云架构平台部技术专家 近年来,互联网服务从一开始的物理服务器托管,虚拟机,容器,发展到现在的云函数,逐步无服务器化,如下表所示. ...
- k8s管理存储资源
1. Kubernetes 如何管理存储资源 理解volume 首先我们学习 Volume,以及 Kubernetes 如何通过 Volume 为集群中的容器提供存储:然后我们会实践几种常用的 Vol ...
- k8s管理pod资源对象(上)
一.容器于pod资源对象 现代的容器技术被设计用来运行单个进程时,该进程在容器中pid名称空间中的进程号为1,可直接接收并处理信号,于是,在此进程终止时,容器即终止退出.若要在一个容器中运行多个进程, ...
- 云资源中的低成本战斗机——竞价实例,AWS、阿里云等六家云厂商完全用户使用指南
云端资源价格 预留实例:长期持有,批发路线,价格最便宜. 按需实例:即买即用,零售路线,价格最贵. 这两种资源,基于不同区域/价格的六家云厂商价格对比,连同原始数据文档我们已经打包成了一份电子文档,有 ...
- ServerLess之云函数实践-天气API
关注我的个人博客,发掘更多的内容 ServerLess之云函数实践-天气API 前言 云计算是大势所趋 Serverless 架构即"⽆服务器"架构,它是一种全新的架构方式,是云计 ...
- k8s 管理存储资源(10)
一.Kubernetes 如何管理存储资源 理解Volume 我们经常会说:容器和 Pod 是短暂的. 其含义是它们的生命周期可能很短,会被频繁地销毁和创建.容器销毁时,保存在容器内部文件系统中的数据 ...
- 宙斯盾 DDoS 防护系统“降本增效”的云原生实践
作者 tomdu,腾讯云高级工程师,主要负责宙斯盾安全防护系统管控中心架构设计和后台开发工作. 导语 宙斯盾 DDoS 防护系统作为公司级网络安全产品,为各类业务提供专业可靠的 DDoS/CC 攻击防 ...
随机推荐
- 【Hadoop报错】The directory item limit is exceeded: limit=1048576 items=1048576
问题描述: 调度系统执行hive任务失败,一直执行失败,报错如下: java.io.IOException: java.net.ConnectException: Call From #HostNam ...
- MFC基于对画框工程笔记->更改窗口图标以及生成的.exe图标
一.前言 继前一篇生成MFC基于对话框工程->新建MFC对话框后,开始改动对话框图标以及生成的.exe图标. 原对话框图标以及.exe图标: 在菜单栏中选择生成目录为Release 打开Rele ...
- Python 潮流周刊#59:Polars 1.0 发布了,PyCon US 2024 演讲视频也发布了(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 持久化技术Mybatis知识精讲【形成知识体系篇】
环境要求 JDK1.8及以上版本 MySQL数据库 Apache Maven 3.6.1构建工具 IDEA/VSCode/Eclipse开发工具任选其一 思维导图:Xmind ZEN 技术要求 熟悉J ...
- Git 奇幻之旅⌛️续集
第十二天:暂存未完成的修改 小明和小红在开发一个新功能时,他们需要切换到另一个分支去修复一个紧急的 bug .但是他们的当前分支上还有一些未完成的修改,他们不想提交这些修改,也不想丢弃这些修改.有一天 ...
- BS架构和CS架构应用
概述 B/S结构即浏览器和服务器结构.它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Br ...
- 折腾指南: 将光猫改造成你的NAS,WebDAV+网页文件管理器vList5+natmap
原文:https://hi.imzlh.top/2024/07/18.cgi (预发布) 很久没有写完全折腾类文章了,这还得追溯到上次折腾S905L3A那会. 这篇文章很长,但是是小白级包学会. 为什 ...
- [oeasy]python0048_注释_comment_设置默认编码格式
注释Comment 回忆上次内容 使用了版本控制 git 制作备份 进行回滚 尝试了 嵌套的控制结构 层层 控制 不过 除非 到不得以 尽量不要 太多层次的嵌套 这样 从顶到底 含义 明确 ...
- Ubuntu16.04升级openssh-9.8p1
7月1日OpenSSH官方发布安全更新,忙着处理的同时记录一下升级过程. 系统环境 root@NServer:~# cat /proc/version Linux version 3.4.113-su ...
- Less预处理器的使用
练习页面: <body> <div class="div1"> <div class="div2"></div> ...