Terraform ์ œ๊ณต์—…์ฒด Selectel

Terraform ์ œ๊ณต์—…์ฒด Selectel

์šฐ๋ฆฌ๋Š” Selectel๊ณผ ํ˜‘๋ ฅํ•  ๊ณต์‹ Terraform ์ œ๊ณต์—…์ฒด๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์ฝ”๋“œํ˜• ์ธํ”„๋ผ ๋ฐฉ๋ฒ•๋ก ์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ธ‰์ž๋Š” ํ˜„์žฌ ์„œ๋น„์Šค ์ž์› ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. "๊ฐ€์ƒ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ" (์ดํ•˜ VPC๋ผ ์นญํ•จ) ํ–ฅํ›„์—๋Š” Selectel์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์—๋„ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋“ฏ์ด VPC ์„œ๋น„์Šค๋Š” OpenStack์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ OpenStack์€ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ ๋ณตํ•ฉ ๊ฐœ์ฒด์˜ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์ž‘์—…์„ ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ถ”๊ฐ€ API ์„ธํŠธ์— ๋ˆ„๋ฝ๋œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. OpenStack์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ผ๋ถ€ ๊ธฐ๋Šฅ์€ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ API.

์ด์ œ Selectel Terraform ์ œ๊ณต์ž์—๋Š” ๋‹ค์Œ VPC ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ ๋ฐ ํ• ๋‹น๋Ÿ‰
  • ์‚ฌ์šฉ์ž, ํ•ด๋‹น ์—ญํ•  ๋ฐ ํ† ํฐ
  • ์ง€์—ญ ๊ฐ„ ๋ฐ VRRP๋ฅผ ํฌํ•จํ•œ ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท
  • ์†Œํ”„ํŠธ์›จ์–ด ๋ผ์ด์„ผ์Šค.

๊ณต๊ธ‰์ž๋Š” ๊ณต๊ฐœ Go ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VPC API๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ณต๊ธ‰์ž ์ž์ฒด๋Š” ๋ชจ๋‘ ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ Github์—์„œ ๊ฐœ๋ฐœ์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์ƒ ๋จธ์‹ , ๋””์Šคํฌ, Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด OpenStack Terraform ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์ œ๊ณต์—…์ฒด์˜ ๊ณต์‹ ๋ฌธ์„œ๋Š” ๋‹ค์Œ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ

์‹œ์ž‘ํ•˜๋ ค๋ฉด Terraform์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ง€์นจ๊ณผ ๋งํฌ๋Š” ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์›น ์‚ฌ์ดํŠธ).

์ž‘๋™ํ•˜๋ ค๋ฉด ๊ณต๊ธ‰์ž๊ฐ€ ๋‹ค์Œ์—์„œ ์ƒ์„ฑ๋œ Selectel API ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์ • ์ œ์–ดํŒ.

Selectel ์ž‘์—…์„ ์œ„ํ•œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” Terraform์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Github ์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์˜ˆ์ œ ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ…Œ๋ผํผ ์˜ˆ์‹œ.

์˜ˆ์ œ๊ฐ€ ์žˆ๋Š” ์ €์žฅ์†Œ๋Š” ๋‘ ๊ฐœ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“ˆ, ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง‘ํ•ฉ์„ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ž‘์€ ๋ฆฌ์†Œ์Šค ์ง‘ํ•ฉ์„ ๊ด€๋ฆฌํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž‘์€ ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ, ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์ „์ฒด ๋ชจ๋“ˆ ์„ธํŠธ์˜ ์˜ˆ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Terraform์„ ์„ค์น˜ํ•˜๊ณ  Selectel API ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜ˆ์ œ๋ฅผ ์ˆ™์ง€ํ•œ ํ›„ ์‹ค์ œ ์˜ˆ์ œ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

๋กœ์ปฌ ๋””์Šคํฌ๋กœ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜ˆ

ํ”„๋กœ์ ํŠธ, ์—ญํ• ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž, ๋กœ์ปฌ ๋””์Šคํฌ๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ƒ์„ฑํ•˜๋Š” ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. terraform-์˜ˆ์ œ/์˜ˆ์ œ/vpc/server_local_root_disk.

ํŒŒ์ผ์—์„œ vars.tf ๋ชจ๋“ˆ์„ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€์—๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์˜์—ญ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฃจ-3a ๋‹ค์Œ ๊ตฌ์„ฑ์œผ๋กœ:

variable "server_vcpus" {
default = 4
}

variable "server_ram_mb" {
default = 8192
}

variable "server_root_disk_gb" {
default = 8
}

variable "server_image_name" {
default = "Ubuntu 18.04 LTS 64-bit"
}

ํŒŒ์ผ์—์„œ main.tf Selectel ๊ณต๊ธ‰์ž๊ฐ€ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

provider "selectel" {
token    = "${var.sel_token}"
}

์ด ํŒŒ์ผ์—๋Š” ์„œ๋ฒ„์— ์„ค์น˜๋  SSH ํ‚ค์˜ ๊ธฐ๋ณธ๊ฐ’๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

module "server_local_root_disk" {
...
server_ssh_key      = "${file("~/.ssh/id_rsa.pub")}"
}

ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•  ํ•„์š”๋Š” ์—†์œผ๋ฉฐ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ํŒŒ์ผ์—์„œ ๋ชจ๋“ˆ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ_with_์‚ฌ์šฉ์ž ะธ ์„œ๋ฒ„_๋กœ์ปฌ_๋ฃจํŠธ_๋””์Šคํฌ, ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“ˆ์„ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ฐ ์—ญํ• ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ƒ์„ฑ

์ฒซ ๋ฒˆ์งธ ๋ชจ๋“ˆ์€ ํ”„๋กœ์ ํŠธ์™€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. terraform-examples/modules/vpc/project_with_user.

์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž๋Š” OpenStack์— ๋กœ๊ทธ์ธํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ ๊ฐ„๋‹จํ•˜๋ฉฐ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์—”ํ„ฐํ‹ฐ๋งŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

๋กœ์ปฌ ๋””์Šคํฌ๋กœ ๊ฐ€์ƒ ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

๋‘ ๋ฒˆ์งธ ๋ชจ๋“ˆ์—์„œ๋Š” ๋กœ์ปฌ ๋””์Šคํฌ๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ OpenStack ๊ฐœ์ฒด ๊ด€๋ฆฌ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ด ๋ชจ๋“ˆ์— ์ง€์ •๋œ ์ผ๋ถ€ ์ธ์ˆ˜์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

๋…ผ์˜ ๋ฌด์‹œ_๋ณ€๊ฒฝ ์†์„ฑ ๋ณ€๊ฒฝ์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. id ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค. VPC ์„œ๋น„์Šค์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ณต๊ฐœ ์ด๋ฏธ์ง€๊ฐ€ ์ผ์ฃผ์ผ์— ํ•œ ๋ฒˆ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋ฉฐ ๋™์‹œ์— id ๋˜ํ•œ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋ถˆ๋ณ€ ์—”ํ„ฐํ‹ฐ๋กœ ๊ฐ„์ฃผ๋˜๋Š” OpenStack ๊ตฌ์„ฑ ์š”์†Œ์ธ Glance์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ธ์ˆ˜๋กœ ์žˆ๋Š” ๊ธฐ์กด ์„œ๋ฒ„๋‚˜ ๋””์Šคํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ์ง€_ID ์‚ฌ์šฉ ๋œ id ๊ณต๊ฐœ ์ด๋ฏธ์ง€์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ํ›„ Terraform ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ์„œ๋ฒ„ ๋˜๋Š” ๋””์Šคํฌ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ ์‚ฌ์šฉ ๋ฌด์‹œ_๋ณ€๊ฒฝ ๊ทธ๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ธ์ˆ˜ ๋ฌด์‹œ_๋ณ€๊ฒฝ ๊ฝค ์˜ค๋ž˜ ์ „์— Terraform์— ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น๊ฒจ#2525.

๋…ผ์˜ ๋ฌด์‹œ_ํฌ๊ธฐ ์กฐ์ •_ํ™•์ธ ๋กœ์ปฌ ๋””์Šคํฌ, ์ฝ”์–ด ๋˜๋Š” ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์กฐ์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์€ ์š”์ฒญ์„ ์‚ฌ์šฉํ•˜์—ฌ OpenStack Nova ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ํฌ๊ธฐ ์กฐ์ •. ์š”์ฒญ ํ›„ ๊ธฐ๋ณธ Nova ํฌ๊ธฐ ์กฐ์ • ์„œ๋ฒ„๋ฅผ ์ƒํƒœ๋กœ ์ „ํ™˜ verify_resize ์‚ฌ์šฉ์ž์˜ ์ถ”๊ฐ€ ํ™•์ธ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Nova๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ถ”๊ฐ€ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋„๋ก ์ด ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์ •๋œ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Terraform์ด ์ƒํƒœ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. verify_resize ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑ ์ƒํƒœ๊ฐ€ ๋˜๋„๋ก ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜๋Š” OpenStack Terraform ๊ณต๊ธ‰์ž ๋ฒ„์ „ 1.10.0์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น๊ฒจ#422.

๋ฆฌ์†Œ์Šค ์ƒ์„ฑ

๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ด ์˜ˆ์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณต๊ธ‰์ž๊ฐ€ ์‹œ์ž‘๋˜๊ณ  OpenStack ๊ณต๊ธ‰์ž๋Š” Selectel ๊ณต๊ธ‰์ž์˜ ๋ฆฌ์†Œ์Šค์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž์— ์†ํ•œ ๊ฐœ์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. . ๋ถˆํ–‰ํžˆ๋„ ๊ฐ™์€ ์ด์œ ๋กœ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ํ…Œ๋ผํผ ์ ์šฉ ์šฐ๋ฆฌ์˜ ์˜ˆ ์•ˆ์—. ์šฐ๋ฆฌ๋Š” ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ ๋Œ€๋‹ค ๋ชจ๋“ˆ์šฉ ํ”„๋กœ์ ํŠธ_with_์‚ฌ์šฉ์ž ๊ทธ ์ดํ›„์—๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ด ๋ฌธ์ œ๋Š” ์•„์ง Terraform์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Github์—์„œ ํ† ๋ก ์„ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ#2430 ะธ ๋ฌธ์ œ#4149.

๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•˜์„ธ์š”. terraform-์˜ˆ์ œ/์˜ˆ์ œ/vpc/server_local_root_disk, ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ ls
README.md	   main.tf		vars.tf

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

$ terraform init

์ถœ๋ ฅ์—๋Š” Terraform์ด ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ธ‰์ž์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์˜ˆ์‹œ์— ์„ค๋ช…๋œ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋จผ์ € ๋ชจ๋“ˆ์„ ์ ์šฉํ•ด๋ณด์ž ํ”„๋กœ์ ํŠธ_with_์‚ฌ์šฉ์ž. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์„ค์ •๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ’์„ ์ˆ˜๋™์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • sel_account ๊ท€ํ•˜์˜ Selectel ๊ณ„์ • ๋ฒˆํ˜ธ๋กœ
  • sel_token Selectel API์˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ์‚ฌ์šฉ์ž ์•”ํ˜ธ OpenStack ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ

์ฒ˜์Œ ๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ๋‹ค์Œ์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ์–ดํŒ.

๋งˆ์ง€๋ง‰ ๋ณ€์ˆ˜์—๋Š” ์–ด๋–ค ๋น„๋ฐ€๋ฒˆํ˜ธ๋ผ๋„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ’์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค. SEL_ACCOUNT, SEL_TOKEN ะธ ์‚ฌ์šฉ์ž ์•”ํ˜ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply -target=module.project_with_user

๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ Terraform์€ ์ƒ์„ฑํ•˜๋ ค๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ํ™•์ธ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

Plan: 3 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

Enter a value: yes

ํ”„๋กœ์ ํŠธ, ์‚ฌ์šฉ์ž ๋ฐ ์—ญํ• ์ด ์ƒ์„ฑ๋˜๋ฉด ๋‚˜๋จธ์ง€ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ๋œ ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋œ Terraform ์ถœ๋ ฅ์— ์ฃผ์˜ํ•˜์„ธ์š”.

module.server_local_root_disk.openstack_networking_floatingip_associate_v2.association_1: Creating...
  floating_ip: "" => "x.x.x.x"

์ง€์ •๋œ IP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSH๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค ํŽธ์ง‘

Terraform์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์„œ๋ฒ„์˜ ์ฝ”์–ด ์ˆ˜์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Š˜๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. server_vcpus ะธ server_ram_mb ํŒŒ์ผ์— ์˜ˆ์ œ/vpc/server_local_root_disk/main.tf:

-  server_vcpus        = "${var.server_vcpus}"
-  server_ram_mb       = "${var.server_ram_mb}"
+  server_vcpus        = 8
+  server_ram_mb       = 10240

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform plan

๊ฒฐ๊ณผ์ ์œผ๋กœ Terraform์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. openstack_compute_instance_v2 ะธ openstack_compute_flavor_v2.

์ƒ์„ฑ๋œ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์žฌ๋ถ€ํŒ…ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

์ƒˆ ๊ฐ€์ƒ ๋จธ์‹  ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ํ…Œ๋ผํผ ์ ์šฉ, ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด์ „์— ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ๋ชจ๋“  ๊ฐœ์ฒด๋Š” ๋‹ค์Œ ์œ„์น˜์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. VPC ์ œ์–ดํŒ:

Terraform ์ œ๊ณต์—…์ฒด Selectel

์šฐ๋ฆฌ์˜ ์˜ˆ์ œ ์ €์žฅ์†Œ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ธŒ๊ฐ€ ์žˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ์˜ˆ์‹œ

๋‹ค์Œ ์˜ˆ์‹œ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ์•ž์„œ ๋งŒ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด terraform-์˜ˆ์ œ/์˜ˆ์ œ/vpc/server_local_root_disk OpenStack ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform destroy -target=module.server_local_root_disk

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ Selectel VPC API ๊ฐ์ฒด๋ฅผ ์ง€์›๋‹ˆ๋‹ค.

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform destroy -target=module.project_with_user

๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ๋ชจ๋“  ๊ฐ์ฒด ์‚ญ์ œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.

Enter a value: yes

๋‹ค์Œ ์˜ˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค. terraform-์˜ˆ์ œ/์˜ˆ์ œ/vpc/kubernetes_cluster.

์ด ์˜ˆ์—์„œ๋Š” ํ”„๋กœ์ ํŠธ, ์ฆ‰ ํ”„๋กœ์ ํŠธ์—์„œ ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•˜๋‚˜์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์— ์žˆ์Œ vars.tf ๋…ธ๋“œ ์ˆ˜, ํŠน์„ฑ, Kubernetes ๋ฒ„์ „ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ๊ฐ’์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์˜ˆ์™€ ์œ ์‚ฌํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™” ๋ฐ ๋ชจ๋“ˆ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ_with_์‚ฌ์šฉ์ž๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

$ terraform init

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply -target=module.project_with_user

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

OpenStack Magnum ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ†ตํ•ด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ด์ „ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๊ธฐ์‚ฌ,๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ง€์‹ ๊ธฐ๋ฐ˜.

ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค€๋น„ํ•  ๋•Œ ๋””์Šคํฌ์™€ ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ƒ์„ฑ๋˜๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ์ค€๋น„์—๋Š” ์•ฝ 4๋ถ„์ด ์†Œ์š”๋˜๋ฉฐ, ์ด ์‹œ๊ฐ„ ๋™์•ˆ Terraform์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Terraform์€ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ค€๋น„๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๊ณ  ํ•ด๋‹น ID๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...)

Apply complete! Resources: 6 added, 0 changed, 0 destroyed.

์ƒ์„ฑ๋œ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์ฟ  ๋ฒ ํ‹€ ํด๋Ÿฌ์Šคํ„ฐ ์•ก์„ธ์Šค ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๊ณ„์ •์˜ ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก์—์„œ Terraform์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ํ•˜์„ธ์š”.

Terraform ์ œ๊ณต์—…์ฒด Selectel

๋‹ค์Œ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งํฌ๋ฅผ ๋”ฐ๋ฅด์‹ญ์‹œ์˜ค. xxxxxx.selvpc.ruํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์•„๋ž˜์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Terraform ์ œ๊ณต์—…์ฒด Selectel

๋กœ๊ทธ์ธ ์ •๋ณด๋Š” Terraform์„ ํ†ตํ•ด ์ƒ์„ฑํ•œ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์†์ด์ง€ ์•Š์•˜๋‹ค๋ฉด vars.tf ๋˜๋Š” main.tf ์ด ์˜ˆ์—์„œ ์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. tf_user. ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. TF_VAR_user_password, ์‹œ์ž‘ ์‹œ ์ง€์ •๋จ ํ…Œ๋ผํผ ์ ์šฉ ์ผ์ฐ.

ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ ํƒญ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes:

Terraform ์ œ๊ณต์—…์ฒด Selectel

Terraform์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์— ๋Œ€ํ•œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์ฟ  ๋ฒ ํ‹€ "์•ก์„ธ์Šค" ํƒญ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Terraform ์ œ๊ณต์—…์ฒด Selectel

์„ค์น˜ ์ง€์นจ์€ ๊ฐ™์€ ํƒญ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟ  ๋ฒ ํ‹€ ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์˜ ์‚ฌ์šฉ config.yaml.

์ถœ์‹œ ํ›„ ์ฟ  ๋ฒ ํ‹€ ๊ทธ๋ฆฌ๊ณ  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • KUBECONFIG Kubernetes๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubectl get pods --all-namespaces

NAMESPACE        NAME                                    READY  STATUS  RESTARTS AGE
kube-system   coredns-9578f5c87-g6bjf                      1/1   Running   0 8m
kube-system   coredns-9578f5c87-rvkgd                     1/1   Running   0 6m
kube-system   heapster-866fcbc879-b6998                 1/1   Running   0 8m
kube-system   kube-dns-autoscaler-689688988f-8cxhf             1/1   Running   0 8m
kube-system   kubernetes-dashboard-7bdb5d4cd7-jcjq9          1/1   Running   0 8m
kube-system   monitoring-grafana-84c97bb64d-tc64b               1/1   Running   0 8m
kube-system   monitoring-influxdb-7c8ccc75c6-dzk5f                1/1   Running   0 8m
kube-system   node-exporter-tf-cluster-rz6nggvs4va7-minion-0 1/1   Running   0 8m
kube-system   node-exporter-tf-cluster-rz6nggvs4va7-minion-1 1/1   Running   0 8m
kube-system   openstack-cloud-controller-manager-8vrmp        1/1   Running   3 8m
prometeus-monitoring   grafana-76bcb7ffb8-4tm7t       1/1   Running   0 8m
prometeus-monitoring   prometheus-75cdd77c5c-w29gb           1/1   Running   0 8m

ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ์ˆ˜๋Š” Terraform์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒŒ์ผ์—์„œ main.tf ๋‹ค์Œ ๊ฐ’์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

cluster_node_count = "${var.cluster_node_count}"

์ด ๊ฐ’์€ ๋‹ค์Œ์—์„œ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. vars.tf:

variable "cluster_node_count" {
default = 2
}

๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์—์„œ ๊ธฐ๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. vars.tf, ๋˜๋Š” ์ง์ ‘ ํ•„์š”ํ•œ ๊ฐ’์„ ์ง€์ • main.tf:

-  cluster_node_count = "${var.cluster_node_count}"
+  cluster_node_count = 3

์ฒซ ๋ฒˆ์งธ ์˜ˆ์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ํ…Œ๋ผํผ ์ ์šฉ:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

๋…ธ๋“œ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๊ณ„์† ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Terraform์„ ํ†ตํ•ด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„์—๋Š” ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubectl get nodes
NAME                               STATUS                     ROLES     AGE   VERSION
tf-cluster-rz6nggvs4va7-master-0   Ready,SchedulingDisabled   master    8m    v1.12.4
tf-cluster-rz6nggvs4va7-minion-0   Ready                      <none>    8m    v1.12.4
tf-cluster-rz6nggvs4va7-minion-1   Ready                      <none>    8m    v1.12.4
tf-cluster-rz6nggvs4va7-minion-2   Ready                      <none>    3m    v1.12.4

๊ฒฐ๋ก 

์ด ๊ธฐ์‚ฌ์—์„œ ์šฐ๋ฆฌ๋Š” ์ž‘์—…ํ•˜๋Š” ์ฃผ์š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๊ฐ€์ƒ ํ”„๋ผ์ด๋น— ํด๋ผ์šฐ๋“œ" Terraform์„ ํ†ตํ•ด. ๊ณต์‹ Selectel Terraform ์ œ๊ณต์—…์ฒด๋ฅผ ์ด์šฉํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Selectel Terraform ์ œ๊ณต์ž์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Github ๋ฌธ์ œ.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€