本文的主线 DevOps => IaC => Terraform
DevOps = Dev + Ops
- 现有开发&运维的问题
扔过墙头(toss it over the wall)
配置漂移(configuration drift)
雪花服务器(snowflake server)
- 开发&运维更亲密合作
DevOps不应该只是团队名称、职称或特定技术 更应该代表过程、思想、技术
DevOps的目标是极大地提高软件交付效率
- DevOps四大核心价值
文化(culture)
自动化(automation)
度量(measurement)
共享(sharing)
- 达成DevOps九大途径
1 CI(Continuous Integration)
2 CD(Continuous Delivery)
3 Version Control
4 Agile planning and lean project management
5 Monitoring and Logging
6 Public and Hybrid Clouds
7 Infrastructure as Code
8 Microservices
9 Containers
IaC = Infrastructure as Code
- 通过编写和执行代码来: 定义、部署、更新和销毁基础设施 包括但不限于以下方面
1 服务器
2 数据库
3 网络
4 日志文件
5 应用程序配置
6 文档
7 自动测试
8 部署过程 等
- IaC七大好处
1 自动服务
2 速度和安全性
3 文档
4 版本控制
5 验证
6 重用
7 幸福感
- IaC五大类工具
1 专项脚本 Shell、Python、Ruby
2 配置管理工具 Ansible、SaltStack、Chef、Puppet
3 服务器模板工具 Vagrant、Docker Packer
4 编排工具 Kubernetes、AWS ECS
5 服务开通工具 Terraform、AWS CloudFormation、OpenStack Heat
- IaC工具比较和组合
开源 | 类型 | 基础设施 | 语言 | 主控 | |
---|---|---|---|---|---|
Ansible | 开源 | 配置管理 | 可变 | 过程性 | 无 |
Terraform | 开源 | 服务开通 | 不可变 | 声明性 | 无 |
What Is Immutable Infrastructure? = 生产环境中仅通过替换组件而不是修改组件来更改基础设施
Terraform
brew install terraform
terraform -v
# Terraform v0.14.2
export ALICLOUD_ACCESS_KEY="*"
export ALICLOUD_SECRET_KEY="*"
vim main.tf
provider "alicloud" {
profile = "terraform"
region = "cn-hangzhou"
}
terraform init
vim main.tf
# 省略了未修改代码
resource "alicloud_vpc" "vpc" {
name = "tf_vpc"
cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vsw" {
name = "tf_vsw"
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/21"
availability_zone = "cn-hangzhou-f"
}
resource "alicloud_security_group" "default" {
name = "default"
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "1/65535"
priority = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_instance" "instance" {
availability_zone = "cn-hangzhou-f"
security_groups = alicloud_security_group.default.*.id
instance_type = "ecs.n2.small"
system_disk_category = "cloud_efficiency"
image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
instance_name = "tf_vm"
vswitch_id = alicloud_vswitch.vsw.id
internet_max_bandwidth_out = 10
password = "Hellotf!@#"
}
terraform plan
terraform apply