概要
担当项目里面,使用chef进行着自动部署。
然后因为下面的问题,决定转移到别的pf上。
就顺便学习了terraform
(学了第一课就发现,因为功能上的不同,terraform并不能用来代替chef,嘛,都开始了学完吧。。)
解決したい問題
社内的chef有一个很致命的问题:管理者权限付与が複雑かつ管理しにくい
- 利用者ごとで権限管理があるし、更に細かいDataBagの管理がある
- DataBagの権限付与は元Adminしかできない
实际运用上,因为组内人员变动和笔记本的更新带来的私有钥匙丢失。
最后组内只有一个人还保留着权限。
冷汗之后,请最后剩下的组员把权限给了当前组的所有人之后,
决心放弃chef,移行到别的pf上
正文
Terraform和各PF(chef)的关系和作用范围
视频链接:https://www.udemy.com/course/terraform-cn/learn/lecture/20925020#overview
看到这里有点小失落,原本是希望terraform可以一站式地把部署也一块做了的。
想要完美替代chef,需要terraform+ansible或者单纯用ansible的样子了。
2-6 配置开发环境
概要
- 这里用vagrant来部署terraform, aws等课程上用的东西
- vagrant背后用visualbox来开启虚拟机
代码
# 先来到Vagrantfile所在文件夹
❯ pwd
/Users/syao/git/terraform_devops_env
# 开启terraform
vagrant up
# 登陆到开发环境
vagrant ssh
# 关掉虚拟机(不会删掉,想删用destroy)
vagrant halt
2-7 SFTP
概要
这里解释了怎么用vscode的SFTP插件来实现本地Mac的编辑内容实时反映到Docker的Container里面。
这其实有很多的应用场景,譬如在本地IDE编辑一个文件,实时反映到我的服务器上。
很久没有做インフラの相关配置了,这不失为一个很好的工具。
做密匙
如果还没的话,ssh-keygen
来生成密匙,把公有钥匙放到container的.ssh下面
# 本地Mac
❯ ll
total 24
8 -rw------- 1 syao staff 2622 2 14 16:05 id_rsa
8 -rw-r--r-- 1 syao staff 582 2 14 16:05 id_rsa.pub
8 -rw-r--r-- 1 syao staff 1117 2 14 16:16 known_hosts
# authorized_keys就是本地过去的id_rsa.pub
$ vagrant ssh
$ ll .ssh
vagrant@devops-box:~$ ll .ssh
total 16
-rw------- 1 vagrant vagrant 971 Feb 14 07:14 authorized_keys
-rw-r--r-- 1 vagrant vagrant 222 Feb 14 07:15 known_hosts
配置SFTP
SFTP的说明都在EXTENSION里面可以看
- 打开VSCODE
- CMD+SHIFT+P 打开RUN界面
- 输入SFTP: Config
{
"name": "My Server",
"context": "sftp_test",
"host": "devops-box",
"protocol": "sftp",
"port": 22,
"username": "vagrant",
"remotePath": "/home/vagrant/terraform_study",
"uploadOnSave": true,
"privateKeyPath": "~/.ssh/id_rsa"
}
手动发送(一般不需要)
- 打开VSCODE
- CMD+SHIFT+P 打开RUN界面
- 输入SFTP: Syn Local->Remote
2-9
复习一下2-8里vagrant做的事情,他装了一个OS然后装了一个terraform。
现在我们要在这个terrafrom上面搞事情了
重新设置SFTP
- 打开VSCODE
- CMD+SHIFT+P 打开RUN界面
- 输入SFTP: Config
config文件只改一行
"context": "terraform_test"
登陆虚拟机check
如下tf文件都被发过来了的话OK
$ vagrant ssh
vagrant@devops-box> cd terraform_study
vagrant@devops-box> ll
total 16
drwxrwxr-x 2 vagrant vagrant 4096 May 7 08:06 ./
drwxr-xr-x 6 vagrant vagrant 4096 Feb 14 07:27 ../
-rw-rw-r-- 1 vagrant vagrant 224 May 7 08:05 instance.tf
-rw-rw-r-- 1 vagrant vagrant 46 May 7 08:06 versions.tf
开始Terraform
下面的代码执行之前
- 先更新
instance.tf
里面的AWS密匙 - AMI(amazon machine image)设定(跑到AWS上自己新建一个看看就知道)
- 新建
- AWS确认。发现的确有个新建的instance在跑
- 删除(不然会被收钱的)
- AWS确认。发现新建的instance被删除了Terminated, OK
# 新建代码
## 初始化。下载provider的包啊之类
vagrant@devops-box> terraform init
## 执行plan。有点类似dry-run,这时候如果密匙没有更新的话出error
vagrant@devops-box> terraform plan
## 应用
vagrant@devops-box> terraform apply
# 删除代码
vagrant@devops-box> terraform destroy
2-10 使用变量
- tf文件可以拆分,然后通过变量的方式来被读取
- .tfvars 秘密情報可以放到这个文件里来防止被上传到GIT
2-15 state和backend
- terraform的状态文件会自动生成到文件terraform.tfstate
- 为了保证协同开发的顺利进行,我们可以将tfstate文件放到backend上去
- 这里的backend不用理解的很复杂,单纯看成是一个放状态文件的数据库即可
2-22 data source
- 动态变量.根据设定计算出特定的值,然后输出json给terrafrom其他的程序来读取
3-34
- 服务器压力测试工具: stress
- CloudWatch: AWS的监控工具
3-36
- Packer
- 定制Machine Image.好处是事先download和install一些软件,节约时间
- Packer的位置(本页面最上面),在Terraform的上游
4-39
- Terraform Cloud。在VCS上的修改会自动反映到环境
- Github的UI,做着CICD的事。
感想
- Terraform在功能上和AWS的CloudFormation一样。用哪个仁者见仁。这里有个比较可以参考:https://qiita.com/answer_d/items/74c3d317058d48394d21 (补充一点,因为Terraform是有GUI的,所以GUI不算是Terraform的缺点)
- 现状Y使用私有云而且自成一派,所以Terrafrom的支持上和使用上比较局限。provider选择Kubernetus的话,自动架构(注意:架构)部署应该是Y社内目前的最大应用场景