Terraform 集成Ansible 实战(local)
前言
Terraform 和 Ansible 是两个独立的工具,有各自的用途,但它们可以集成以解决典型用例以及它们相互补充的方式,这使得它们更加受欢迎。
一 工具简介
1.1 Terraform
它是作为代码(IaC)软件工具的基础设施,用于构建、更改和版本控制基础设施。它与500多个供应商合作,这些供应商的资源可用于提供基础设施。
1.2 Ansible
它是一种配置管理工具,可在已设置的基础架构上配置和部署应用程序时派上用场。在本文中,我们使用 Ansible 配置了 terraform 部署的基础设施。
本文将使用Terraform对腾讯云基础设施资源进行编排管理,使用Ansible对主机实例进行配置管理。
二 架构及流程
总体方案使用terraform来进行云上基础设施编排,使用ansible进行主机或其他设施的配置管理。
通过在执行基础设施和配置管理节点上安装terraform 和ansible 进行对目标云资源进行编排。
三 实战
3.1 编排node节点
- 利用本地密钥编排多台node节点
- 从ansible_manager 的 terraform_remote_state 获取ansible manger的ip地址信息,用于传输node节点的IP.txt 列表文件至ansible
- 将本地编排node节点的ansible playbook脚本上次至目标服务器。
- 将创建node节点的私钥传输到ansible,供后续ansible免密登录node节点执行ansible playbook
生成inventory可以使用该项目:https://github.com/adammck/terraform-inventory
在对node节点编排出来后,使用以下ansible playbook进行对服务器执行配置管理,主要内容为安装http,git并启动http服务,对数据盘/dev/vdb进行格式化挂在,并在其写入html文件
- name: integration of terraform and ansible
hosts: all
tasks:
- name: installing httpd
package:
name: httpd
state: present
- name: installing php
package:
name: php
state: present
- name: starting httpd service
service:
name: httpd
state: started
- name: installing git
package:
name: git
state: present
- name: formatting storage
filesystem:
fstype: ext4
dev : /dev/vdb
- name: making folder
file:
path: /var/www/html/web
state: directory
- name: mounting storage
mount:
fstype: ext4
src: /dev/vdb
path: /var/www/html
state: mounted
- name: create html file
ansible.builtin.shell:
cmd: echo "xuel tf ansible page" > index.html
chdir: /var/www/html
四 测试
本实战将backend存储在腾讯云cos中,workspace使用default
4.1 编排node节点
编排三台node节点。
查看云资源编排结果
查看存储在cos中的state状态文件
登录任意服务器进行查看情况,http已经启动,并且磁盘已经格式化并挂载,index静态文件也已ok。
其他
- 在写入多个ip列表时
content = join("\n", tencentcloud_instance.xuel_tf_ansible_node.*.public_ip)
- ansible 的配置文件中定义了inventory 和 private_key_file 的路径
[defaults]
inventory = /opt/ansibleworkspace/ip.txt
host_key_checking= False
private_key_file=/opt/ansibleworkspace/id_rsa
remote_user=root
[privilege_escalation]
become=true
become_method=sudo
become_user=root
become_ask_pass=false
后期可以结合将编排出的主机进行分组,并配合git流程实现基于Gitlab 的DevOPS流程。
- 需要注意编排的顺序,基础设施编排完后执行配置管理。
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)