1. 실습, 구축 환경
![[그림 1] OpenStack Terraform 실습, 구축 환경](/blog-old/images/record/OpenStack_Terraform_Practice_Kubernetes/Environment.PNG)
[그림 1]은 Terraform을 이용하여 OpenStack 위에 구축하려는 Kubernetes 환경을 나타내고 있다. External Network, externel-router, Ubuntu 18.04 Image는 미리 생성되어 있는 환경에서 진행하였다.
- Terraform : 0.12.5
- Node : Ubuntu 18.04
- OpenStack : Stein
- User, Tenant, Password : admin
- Auth URL :
- Network :
- Internal Network : Kubernetes Network, 30.0.0.0/24
- Flavor :
- Standard : 4vCPU, 4GB RAM, 30GB Disk
(Deploy)# apt-get update
(Deploy)# apt-get install wget unzip
(Deploy)# wget https://releases.hashicorp.com/terraform/0.12.5/terraform_0.12.5_linux_amd64.zip
(Deploy)# unzip ./terraform_0.12.5_linux_amd64.zip -d /usr/local/bin/
Terraform을 설치한다.
1
2
3
4
5
6
| provider "openstack" {
user_name = "admin"
tenant_name = "admin"
password = "admin"
auth_url = "http://192.168.0.40:5000/v3"
}
|
[파일 1] ~/terraform/provider.tf
1
2
3
4
5
6
7
8
9
10
11
| variable "router-external" {
default = "[external-router ID]"
}
variable "secgroup-default" {
default = "[default Security Group ID]"
}
variable "image-ubuntu" {
default = "[ubuntu-18.04 Image ID]"
}
|
[파일 2] ~/terraform/00-params.tf
1
2
3
4
5
6
| resource "openstack_compute_flavor_v2" "flavor" {
name = "m1.standard"
ram = "4096"
vcpus = "4"
disk = "30"
}
|
[파일 3] ~/terraform/010-flavor.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| resource "openstack_networking_network_v2" "network" {
name = "internal-net"
}
resource "openstack_networking_subnet_v2" "subnet" {
name = "internal-sub"
network_id = "${openstack_networking_network_v2.network.id}"
cidr = "30.0.0.0/24"
dns_nameservers = ["8.8.8.8"]
}
resource "openstack_networking_router_interface_v2" "interface" {
router_id = "${var.router-external}"
subnet_id = "${openstack_networking_subnet_v2.subnet.id}"
}
|
[파일 4] ~/terraform/020-network.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| resource "openstack_networking_secgroup_rule_v2" "secgroup_tcp" {
direction = "ingress"
ethertype = "IPv4"
protocol = "tcp"
port_range_min = 1
port_range_max = 65535
remote_ip_prefix = "0.0.0.0/0"
security_group_id = "${var.secgroup-default}"
}
resource "openstack_networking_secgroup_rule_v2" "secgroup_udp" {
direction = "ingress"
ethertype = "IPv4"
protocol = "upd"
port_range_min = 1
port_range_max = 65535
remote_ip_prefix = "0.0.0.0/0"
security_group_id = "${var.secgroup-default}"
}
|
[파일 5] ~/terraform/030-secgroup.tf
1
2
3
| resource "openstack_networking_floatingip_v2" "fip" {
pool = "external-net"
}
|
[파일 6] ~/terraform/040-floating.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
| resource "openstack_compute_instance_v2" "vm01" {
depends_on = ["openstack_networking_subnet_v2.subnet"]
name = "vm01"
flavor_id = "${openstack_compute_flavor_v2.flavor.id}"
network {
name = "${openstack_networking_network_v2.network.name}"
}
block_device {
uuid = "${var.image-ubuntu}"
source_type = "image"
volume_size = 30
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
}
resource "openstack_compute_instance_v2" "vm02" {
depends_on = ["openstack_networking_subnet_v2.subnet"]
name = "vm02"
flavor_id = "${openstack_compute_flavor_v2.flavor.id}"
network {
name = "${openstack_networking_network_v2.network.name}"
}
block_device {
uuid = "${var.image-ubuntu}"
source_type = "image"
volume_size = 30
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
}
resource "openstack_compute_instance_v2" "vm03" {
depends_on = ["openstack_networking_subnet_v2.subnet"]
name = "vm03"
flavor_id = "${openstack_compute_flavor_v2.flavor.id}"
network {
name = "${openstack_networking_network_v2.network.name}"
}
block_device {
uuid = "${var.image-ubuntu}"
source_type = "image"
volume_size = 30
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
}
resource "openstack_compute_instance_v2" "vm09" {
depends_on = ["openstack_networking_subnet_v2.subnet"]
name = "vm09"
flavor_id = "${openstack_compute_flavor_v2.flavor.id}"
network {
name = "${openstack_networking_network_v2.network.name}"
}
block_device {
uuid = "${var.image-ubuntu}"
source_type = "image"
volume_size = 30
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
}
resource "openstack_compute_floatingip_associate_v2" "fip" {
floating_ip = "${openstack_networking_floatingip_v2.fip.address}"
instance_id = "${openstack_compute_instance_v2.vm09.id}"
}
|
[파일 7] ~/terraform/050-instance.tf
[파일 1 ~ 7]을 작성한다. [파일 1,2]는 OpenStack 환경에 맞게 변경해야한다.
(Deploy)# cd ~/terraform
(Deploy)# terraform init
(Deploy)# terraform apply
Terraform을 적용한다.
(Deploy)# cd ~/terraform
(Deploy)# terraform destroy
Terraform을 초기화 한다.
5. 참조