草庐IT

Terraform系列二腾讯云CVM进一步相关玩法

对你无可奈何 2023-03-28 原文

背景:

紧接[Terraform系列一腾讯云CVM相关简单创建]。准备围绕着cvm先熟悉一下基本的流程。比如:系统盘扩容,挂载数据盘,帐号密钥ssh-key,绑定公网ip.研究一下官方文档体验一下!

Terraform系列二腾讯云CVM进一步相关玩法

1.关于硬盘的操作

参照:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/instance 默认的系统盘是50G ,设置system_disk_size = 100。修改系统盘为100G,并增加了数据盘data_disks配置(50G)

1. 修改cvm.tf配置文件

[root@zhangpeng terraform]# cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 100 hostname = "cvm-almalinux" data_disks { data_disk_type = "CLOUD_PREMIUM" data_disk_size = 50 encrypt = false } security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" internet_max_bandwidth_out = 10 count = 1 } 当然了我这里看文档的时候看到了hostname配置这里也添加了hostname!恩 反正现在还没有公网Ip一步一步操作!

2. terraform plan

3. terraform apply

4. 验证

登陆腾讯云后台找到对应cvm查看系统盘与数据盘 目测是正常的但是仔细看了一眼信息,系统盘更换服务器密码也重新进行了初始化 故:到这里系统盘的扩容与数据盘的挂载实现了。但是没有能确认系统盘是直接扩容还是进行了系统盘硬盘的直接更换!这个后面再去研究!

2. 创建公网ip并绑定cvm

公网ip打开腾讯云控制台云服务器有个公网IP的选项看了下url叫eip?官网搜索一下eip:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/eip?但是没有看到这里有配置的阿....网上搜索了一下发现可以通过allocate_public_ip = true开启公网IP!参照:http://www.panooo.com/Terraform_On_TencentCloud! 先这样搞一下吧!后面研究一下如何新建一个EIP 然后绑定CVM?具体步骤如下:

1. 修改cvm.tf

cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 100 hostname = "cvm-almalinux" allocate_public_ip = true data_disks { data_disk_type = "CLOUD_PREMIUM" data_disk_size = 50 encrypt = false } security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" internet_max_bandwidth_out = 10 count = 1 } 增加了allocate_public_ip = true。另外也明白了 internet_max_bandwidth_out = 10是限制带宽的配置

2. terraform plan

3. terraform apply

4. 验证

登陆后台验证确实有了公网ip了 但是.....这鬼东西每次都是新建吗?又收到了服务器创建,生成密码的短信提示.......请看下面的分析测试!

3.cvm重建得到的结论

在上面步骤中cvm拥有了公网的Ip。ssh登陆服务器先看一下: 系统盘 数据盘创建成功,主机名hostname也设置成功了! 先随便生成一个文件,然后更改cvm. tf相关配置。确认一下在什么环境下cvm会重建!

touch zhangpeng.txt

1. 修改一下公网ip出口带宽测试一下?

将internet_max_bandwidth_out = 10修改为internet_max_bandwidth_out = 15 cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 100 hostname = "cvm-almalinux" allocate_public_ip = true data_disks { data_disk_type = "CLOUD_PREMIUM" data_disk_size = 50 encrypt = false } security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" internet_max_bandwidth_out = 15 count = 1 } 依旧是terraform plan and terraform apply 未收到CVM重建信息,原密码正常登陆。登陆服务器查看zhangpeng.txt存在!所以确认修改带宽配置不会触发cvm重建!

2. 修改系统盘与数据盘大小

两个的测试都放在一起了,首先是修改数据盘的大小: data_disk_size = 50 修改为** data_disk_size = 100** cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 100 hostname = "cvm-almalinux" allocate_public_ip = true data_disks { data_disk_type = "CLOUD_PREMIUM" data_disk_size = 100 encrypt = false } security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" internet_max_bandwidth_out = 15 count = 1 } 依旧是terraform plan and terraform apply 服务没有重建。数据盘扩容成功,zhangpeng.txt还在 然后再试一下修改系统盘: ** system_disk_size = 100 **修改为 system_disk_size = 150 cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 150 hostname = "cvm-almalinux" allocate_public_ip = true data_disks { data_disk_type = "CLOUD_PREMIUM" data_disk_size = 100 encrypt = false } security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" internet_max_bandwidth_out = 15 count = 1 }

依旧是terraform plan and terraform apply 依然没有重建CVM,什么原因呢?这里的所有操作都是针对与已有的配置进行修改大小,没有新增或者删除。那就试一下继续增加一块数据盘吧!

3. 增加一块新的数据盘

cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 150 hostname = "cvm-almalinux" allocate_public_ip = true data_disks { data_disk_type = "CLOUD_PREMIUM" data_disk_size = 100 encrypt = false } data_disks { data_disk_type = "CLOUD_PREMIUM" data_disk_size = 50 encrypt = false } security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" internet_max_bandwidth_out = 15 count = 1 } 依旧是terraform plan and terraform apply

目测带replaced的都会重建......

4.结论

貌似在进行新增或者删除相关配置的时候都会重建?找泽阳大佬确认了一下有什么方式可以避免。貌似是我理解错了:写在cvm.tf这里貌似算是修改了cvm初始化,应该最好把数据盘 负载均衡单独创建,然后将其绑定到对应cvm!

4. 特别强调

1. terraform destroy

正好顺便体验一下删除配置然后重新创建一下应用:

terraform destroy

2. 单独创建vpc subset route and cvm

保持其他配置文件(vpc subset route and cvm)不变,修改cvm.tf如下: cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 50 hostname = "cvm-almalinux" security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] lifecycle { create_before_destroy = false } vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" }

3. terraform plan and terraform apply

4. 单独增加一个eip并绑定

1. 创建eip 公网ip

参照:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/eip [root@zhangpeng terraform]# cat eip.tf

resource "tencentcloud_eip" "cvm_almalinux_eip" { name = "cvm_almalinux_eip" internet_max_bandwidth_out = 10 internet_service_provider = "BGP" type = "EIP" internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" }

2. eip绑定cvm

参照:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/eip_association [root@zhangpeng terraform]# cat eip_association.tf

resource "tencentcloud_eip_association" "cvm_almalinux_association" { eip_id = "${tencentcloud_eip.cvm_almalinux_eip.id}" instance_id = "${tencentcloud_instance.cvm_almalinux.id}" }

3. terraform plan and terraform apply

这里截图就忽略了!直接看结果!!

不知道带宽为什么显示0呢这里? 然后ssh登陆服务器测试一下:

[root@zhangpeng terraform]# ssh root@xxx.xxx.xxx.xxx kex_exchange_identification: Connection closed by remote host [root@zhangpeng terraform]# ssh root@xxx.xxx.xxx.xxx ssh: connect to host root@xxx.xxx.xxx.xxx port 22: Connection timed out [root@zhangpeng terraform]# ssh root@xxx.xxx.xxx.xxx 不出所料 带宽没有设置生效! 可是我这里应该三设置成功了阿......先手动设置一下验证一下单独设置EIP绑定CVM! 继续ssh登陆: 登陆成功没有重建......当然了这里也体验到了还是 allocate_public_ip = true的方式简单!

5. 继续体验一下单独创建数据盘绑定cvm

1. 创建数据盘

参照:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/cbs_storage [root@zhangpeng terraform]# cat cbs.tf

resource "tencentcloud_cbs_storage" "cvm_almalinux_storage" { storage_name = "cvm_almalinux" storage_type = "CLOUD_PREMIUM" storage_size = 100 availability_zone = "ap-beijing-2" project_id = 0 encrypt = false tags = { abc = "tf" } }

2. 数据盘绑定cvm

参照:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/cbs_storage_attachment [root@zhangpeng terraform]# cat cbs_attachment.tf

resource "tencentcloud_cbs_storage_attachment" "cvm_almalinux_attachment" { storage_id = "${tencentcloud_cbs_storage.cvm_almalinux_storage.id}" instance_id = "${tencentcloud_instance.cvm_almalinux.id}" }

3. terraform plan and terraform apply

恩服务器没有重建.....登陆服务器查看disk数据盘

5.进一步的体验绑定ssh-key密钥方式登陆服务器

有了前面的失败案例,现在准备单独创建一个密钥文件然后绑定CVM 参照:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/key_pair

1. 创建key_pair

resource "tencentcloud_key_pair" "ssh-key" { key_name = "ssh-key" public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDjd8fTnp7Dcuj4mLaQxf9Zs/ORgUL9fQxRCNKkPgP1paTy1I513maMX126i36Lxxl3+FUB52oVbo/FgwlIfX8hyCnv8MCxqnuSDozf1CD0/wRYHcTWAtgHQHBPCC2nJtod6cVC3kB18KeV4U7zsxmwFeBIxojMOOmcOBuh7+trRw==" } 注意:我这里使用了我本地环境的id_rsa.pub!以上为官网例子

2. cvm增加key_pair配置

增加key_name配置! [root@zhangpeng terraform]# cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" { instance_name = "cvm-almalinux" availability_zone = "ap-beijing-2" image_id = "img-q95tlc25" instance_type = "S2.MEDIUM2" system_disk_type = "CLOUD_PREMIUM" system_disk_size = 50 hostname = "cvm-almalinux" security_groups = [ "${tencentcloud_security_group.sg_bj.id}" ] lifecycle { create_before_destroy = false } key_name= "${tencentcloud_key_pair.ssh_key.id}" vpc_id = "${tencentcloud_vpc.vpc_bj.id}" subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}" }

3. terraform plan and terraform apply

ssh登陆验证:由于我的ssh-key是zhangpeng用户的故root用户登陆失败!切换到zhangpeng用户ssh免密登陆成功! cvm也没有重建......初步目的达到!

题外话:

总结一下:

  1. 公网ip还是在创建CVM的时候直接设置allocate_public_ip = true比较方便
  2. 数据盘的添加 还有如果需要额外公网ip的绑定。可以单独创建组件,然后参照attachment相关将其绑定到cvm。
  3. ssh-key的绑定服务器不会重建

下一步的计划

  1. 配置文件如何管理的更优雅?
  2. 使用Terraform在cvm中安装软件管理CVM
  3. Terraform体验管理其他应用
注:错别字请原谅......rocky中文输入法太摧残了......硬盘的扩容也测试了具体过程就不写了!

有关Terraform系列二腾讯云CVM进一步相关玩法的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  3. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  4. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  5. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  6. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

  7. ruby - 从结束值创建一系列字符串 - 2

    我使用irb。下面是我写的代码。“斧头”..“bc”我期待"ax""ay""az""ba"bb""bc"但结果只是“斧头”..“bc”我该如何纠正?谢谢。 最佳答案 >puts("ax".."bc").to_aaxayazbabbbc 关于ruby-从结束值创建一系列字符串,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7617092/

  8. ruby - 使用指向 ruby​​ 可执行文件的符号链接(symbolic link)时查找相关库 - 2

    假设您有一个可执行文件foo.rb,其库bar.rb的布局如下:/bin/foo.rb/lib/bar.rb在foo.rb的header中放置以下要求以在bar.rb中引入功能:requireFile.dirname(__FILE__)+"../lib/bar.rb"只要对foo.rb的所有调用都是直接的,这就可以正常工作。如果你把$HOME/project和符号链接(symboliclink)foo.rb放入$HOME/usr/bin,然后__FILE__解析为$HOME/usr/bin/foo.rb,因此无法找到bar.rb关于foo.rb的目录名.我意识到像ruby​​gems这

  9. HarmonyOS原子化服务开发相关术语 - 2

    术语中文解释Ability原子化服务帮助用户完成任务的原子化服务,和用户的意图进行关联。Fulfillment服务履行通过图标,卡片,语音等形式呈现用户意图。开发者通过接口的方式,处理用户意图,返回内容。Intent意图用于表达用户想要达成的目标或完成的任务。HUAWEIAssistant智能助手“无微不智”的个人助手,通过不断的学习用户的使用习惯,不断的为用户提供贴心的精准的便捷的个性化服务。AISearch全局搜索用户可快速搜索关键词,与之匹配的原子化服务则会出现在搜索结果中。SmartService智慧服务用户订阅原子化服务,在到达特定触发条件(时间、地点、事件)后,卡片推送至用户智能助

  10. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

随机推荐