Allow Flatcar Linux os_image on AWS, rename os_channel

* Replace os_channel variable with os_image to align naming
across clouds. Users who set this option to stable, beta, or
alpha should now set os_image to coreos-stable, coreos-beta,
or coreos-alpha.
* Default os_image to coreos-stable. This continues to use
the most recent image from the stable channel as always.
* Allow Container Linux derivative Flatcar Linux by setting
os_image to `flatcar-stable`, `flatcar-beta`, `flatcar-alpha`
This commit is contained in:
Dalton Hubble 2018-05-08 22:38:05 -07:00
parent f2ee75ac98
commit 5eb11f5104
10 changed files with 79 additions and 17 deletions

View File

@ -9,10 +9,12 @@ Notable changes between versions.
#### AWS #### AWS
* Allow "preemptible" workers via spot instances ([#202](https://github.com/poseidon/typhoon/pull/202)) * Allow preemptible workers via spot instances ([#202](https://github.com/poseidon/typhoon/pull/202))
* Add `worker_price` to allow worker spot instances. Defaults to empty string for the worker autoscaling group to use regular on-demand instances. * Add `worker_price` to allow worker spot instances. Default to empty string for the worker autoscaling group to use regular on-demand instances.
* Add `spot_price` to internal `workers` module for spot [worker pools](https://typhoon.psdn.io/advanced/worker-pools/) * Add `spot_price` to internal `workers` module for spot [worker pools](https://typhoon.psdn.io/advanced/worker-pools/)
* Note: Unlike GCP `preemptible` workers, spot instances require you to pick a bid price. * Allow Container Linux derivative [Flatcar Linux](https://docs.flatcar-linux.org/) by setting `os_image` to `flatcar-stable`, `flatcar-beta`, `flatcar-alpha`.
* Replace `os_channel` variable with `os_image` to align naming across clouds
* Please change values `stable`, `beta`, or `alpha` to `coreos-stable` (default), `coreos-beta`, `coreos-alpha` (action required!)
#### Addons #### Addons

View File

@ -1,3 +1,12 @@
locals {
# Pick a CoreOS Container Linux derivative
# coreos-stable -> Container Linux AMI
# flatcar-stable -> Flatcar Linux AMI
ami_id = "${local.flavor == "flatcar" ? data.aws_ami.flatcar.image_id : data.aws_ami.coreos.image_id}"
flavor = "${element(split("-", var.os_image), 0)}"
channel = "${element(split("-", var.os_image), 1)}"
}
data "aws_ami" "coreos" { data "aws_ami" "coreos" {
most_recent = true most_recent = true
owners = ["595879546273"] owners = ["595879546273"]
@ -14,6 +23,27 @@ data "aws_ami" "coreos" {
filter { filter {
name = "name" name = "name"
values = ["CoreOS-${var.os_channel}-*"] values = ["CoreOS-${local.channel}-*"]
} }
} }
data "aws_ami" "flatcar" {
most_recent = true
owners = ["075585003325"]
filter {
name = "architecture"
values = ["x86_64"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
filter {
name = "name"
values = ["Flatcar-${local.channel}-*"]
}
}

View File

@ -23,7 +23,7 @@ resource "aws_instance" "controllers" {
instance_type = "${var.controller_type}" instance_type = "${var.controller_type}"
ami = "${data.aws_ami.coreos.image_id}" ami = "${local.ami_id}"
user_data = "${element(data.ct_config.controller_ign.*.rendered, count.index)}" user_data = "${element(data.ct_config.controller_ign.*.rendered, count.index)}"
# storage # storage

View File

@ -41,10 +41,10 @@ variable "worker_type" {
description = "EC2 instance type for workers" description = "EC2 instance type for workers"
} }
variable "os_channel" { variable "os_image" {
type = "string" type = "string"
default = "stable" default = "coreos-stable"
description = "Container Linux AMI channel (stable, beta, alpha)" description = "AMI channel for a Container Linux derivative (coreos-stable, coreos-beta, coreos-alpha, flatcar-stable, flatcar-beta, flatcar-alpha)"
} }
variable "disk_size" { variable "disk_size" {

View File

@ -8,7 +8,7 @@ module "workers" {
security_groups = ["${aws_security_group.worker.id}"] security_groups = ["${aws_security_group.worker.id}"]
count = "${var.worker_count}" count = "${var.worker_count}"
instance_type = "${var.worker_type}" instance_type = "${var.worker_type}"
os_channel = "${var.os_channel}" os_image = "${var.os_image}"
disk_size = "${var.disk_size}" disk_size = "${var.disk_size}"
spot_price = "${var.worker_price}" spot_price = "${var.worker_price}"

View File

@ -1,3 +1,12 @@
locals {
# Pick a CoreOS Container Linux derivative
# coreos-stable -> Container Linux AMI
# flatcar-stable -> Flatcar Linux AMI
ami_id = "${local.flavor == "flatcar" ? data.aws_ami.flatcar.image_id : data.aws_ami.coreos.image_id}"
flavor = "${element(split("-", var.os_image), 0)}"
channel = "${element(split("-", var.os_image), 1)}"
}
data "aws_ami" "coreos" { data "aws_ami" "coreos" {
most_recent = true most_recent = true
owners = ["595879546273"] owners = ["595879546273"]
@ -14,6 +23,27 @@ data "aws_ami" "coreos" {
filter { filter {
name = "name" name = "name"
values = ["CoreOS-${var.os_channel}-*"] values = ["CoreOS-${local.channel}-*"]
} }
} }
data "aws_ami" "flatcar" {
most_recent = true
owners = ["075585003325"]
filter {
name = "architecture"
values = ["x86_64"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
filter {
name = "name"
values = ["Flatcar-${local.channel}-*"]
}
}

View File

@ -34,10 +34,10 @@ variable "instance_type" {
description = "EC2 instance type" description = "EC2 instance type"
} }
variable "os_channel" { variable "os_image" {
type = "string" type = "string"
default = "stable" default = "coreos-stable"
description = "Container Linux AMI channel (stable, beta, alpha)" description = "AMI channel for a Container Linux derivative (coreos-stable, coreos-beta, coreos-alpha, flatcar-stable, flatcar-beta, flatcar-alpha)"
} }
variable "disk_size" { variable "disk_size" {

View File

@ -41,7 +41,7 @@ resource "aws_autoscaling_group" "workers" {
# Worker template # Worker template
resource "aws_launch_configuration" "worker" { resource "aws_launch_configuration" "worker" {
image_id = "${data.aws_ami.coreos.image_id}" image_id = "${local.ami_id}"
instance_type = "${var.instance_type}" instance_type = "${var.instance_type}"
spot_price = "${var.spot_price}" spot_price = "${var.spot_price}"

View File

@ -33,7 +33,7 @@ module "tempest-worker-pool" {
count = 2 count = 2
instance_type = "m5.large" instance_type = "m5.large"
os_channel = "beta" os_image = "coreos-beta"
} }
``` ```
@ -66,7 +66,7 @@ The AWS internal `workers` module supports a number of [variables](https://githu
|:-----|:------------|:--------|:--------| |:-----|:------------|:--------|:--------|
| count | Number of instances | 1 | 3 | | count | Number of instances | 1 | 3 |
| instance_type | EC2 instance type | "t2.small" | "t2.medium" | | instance_type | EC2 instance type | "t2.small" | "t2.medium" |
| os_channel | Container Linux AMI channel | stable| "beta", "alpha" | | os_image | AMI channel for a Container Linux derivative | coreos-stable | coreos-stable, coreos-beta, coreos-alpha, flatcar-stable, flatcar-beta, flatcar-alpha |
| disk_size | Size of the disk in GB | 40 | 100 | | disk_size | Size of the disk in GB | 40 | 100 |
| spot_price | Spot price in USD for workers. Leave as default empty string for regular on-demand instances | "" | "0.10" | | spot_price | Spot price in USD for workers. Leave as default empty string for regular on-demand instances | "" | "0.10" |
| service_cidr | Must match `service_cidr` of cluster | "10.3.0.0/16" | "10.3.0.0/24" | | service_cidr | Must match `service_cidr` of cluster | "10.3.0.0/16" | "10.3.0.0/24" |

View File

@ -241,7 +241,7 @@ Reference the DNS zone id with `"${aws_route53_zone.zone-for-clusters.zone_id}"`
| worker_count | Number of workers | 1 | 3 | | worker_count | Number of workers | 1 | 3 |
| controller_type | EC2 instance type for controllers | "t2.small" | See below | | controller_type | EC2 instance type for controllers | "t2.small" | See below |
| worker_type | EC2 instance type for workers | "t2.small" | See below | | worker_type | EC2 instance type for workers | "t2.small" | See below |
| os_channel | Container Linux AMI channel | stable | stable, beta, alpha | | os_image | AMI channel for a Container Linux derivative | coreos-stable | coreos-stable, coreos-beta, coreos-alpha, flatcar-stable, flatcar-beta, flatcar-alpha |
| disk_size | Size of the EBS volume in GB | "40" | "100" | | disk_size | Size of the EBS volume in GB | "40" | "100" |
| disk_type | Type of the EBS volume | "gp2" | standard, gp2, io1 | | disk_type | Type of the EBS volume | "gp2" | standard, gp2, io1 |
| worker_price | Spot price in USD for workers. Leave as default empty string for regular on-demand instances | "" | "0.10" | | worker_price | Spot price in USD for workers. Leave as default empty string for regular on-demand instances | "" | "0.10" |