261 lines
5.7 KiB
HCL
Executable file
261 lines
5.7 KiB
HCL
Executable file
variable "deploymentName" {
|
|
type = "string"
|
|
description = "The desired name of your deployment."
|
|
}
|
|
|
|
variable "numControllers"{
|
|
type = "string"
|
|
description = "Desired # of controllers."
|
|
}
|
|
|
|
variable "numEtcd" {
|
|
type = "string"
|
|
description = "Desired # of etcd nodes. Should be an odd number."
|
|
}
|
|
|
|
variable "numNodes" {
|
|
type = "string"
|
|
description = "Desired # of nodes."
|
|
}
|
|
|
|
variable "volSizeController" {
|
|
type = "string"
|
|
description = "Volume size for the controllers (GB)."
|
|
}
|
|
|
|
variable "volSizeEtcd" {
|
|
type = "string"
|
|
description = "Volume size for etcd (GB)."
|
|
}
|
|
|
|
variable "volSizeNodes" {
|
|
type = "string"
|
|
description = "Volume size for nodes (GB)."
|
|
}
|
|
|
|
variable "subnet" {
|
|
type = "string"
|
|
description = "The subnet in which to put your cluster."
|
|
}
|
|
|
|
variable "securityGroups" {
|
|
type = "string"
|
|
description = "The sec. groups in which to put your cluster."
|
|
}
|
|
|
|
variable "ami"{
|
|
type = "string"
|
|
description = "AMI to use for all VMs in cluster."
|
|
}
|
|
|
|
variable "SSHKey" {
|
|
type = "string"
|
|
description = "SSH key to use for VMs."
|
|
}
|
|
|
|
variable "master_instance_type" {
|
|
type = "string"
|
|
description = "Size of VM to use for masters."
|
|
}
|
|
|
|
variable "etcd_instance_type" {
|
|
type = "string"
|
|
description = "Size of VM to use for etcd."
|
|
}
|
|
|
|
variable "node_instance_type" {
|
|
type = "string"
|
|
description = "Size of VM to use for nodes."
|
|
}
|
|
|
|
variable "terminate_protect" {
|
|
type = "string"
|
|
default = "false"
|
|
}
|
|
|
|
variable "awsRegion" {
|
|
type = "string"
|
|
}
|
|
|
|
provider "aws" {
|
|
region = "${var.awsRegion}"
|
|
}
|
|
|
|
variable "iam_prefix" {
|
|
type = "string"
|
|
description = "Prefix name for IAM profiles"
|
|
}
|
|
|
|
resource "aws_iam_instance_profile" "kubernetes_master_profile" {
|
|
name = "${var.iam_prefix}_kubernetes_master_profile"
|
|
roles = ["${aws_iam_role.kubernetes_master_role.name}"]
|
|
}
|
|
|
|
resource "aws_iam_role" "kubernetes_master_role" {
|
|
name = "${var.iam_prefix}_kubernetes_master_role"
|
|
assume_role_policy = <<EOF
|
|
{
|
|
"Version": "2012-10-17",
|
|
"Statement": [
|
|
{
|
|
"Effect": "Allow",
|
|
"Principal": { "Service": "ec2.amazonaws.com"},
|
|
"Action": "sts:AssumeRole"
|
|
}
|
|
]
|
|
}
|
|
EOF
|
|
}
|
|
|
|
resource "aws_iam_role_policy" "kubernetes_master_policy" {
|
|
name = "${var.iam_prefix}_kubernetes_master_policy"
|
|
role = "${aws_iam_role.kubernetes_master_role.id}"
|
|
policy = <<EOF
|
|
{
|
|
"Version": "2012-10-17",
|
|
"Statement": [
|
|
{
|
|
"Effect": "Allow",
|
|
"Action": ["ec2:*"],
|
|
"Resource": ["*"]
|
|
},
|
|
{
|
|
"Effect": "Allow",
|
|
"Action": ["elasticloadbalancing:*"],
|
|
"Resource": ["*"]
|
|
},
|
|
{
|
|
"Effect": "Allow",
|
|
"Action": "s3:*",
|
|
"Resource": "*"
|
|
}
|
|
]
|
|
}
|
|
EOF
|
|
}
|
|
|
|
resource "aws_iam_instance_profile" "kubernetes_node_profile" {
|
|
name = "${var.iam_prefix}_kubernetes_node_profile"
|
|
roles = ["${aws_iam_role.kubernetes_node_role.name}"]
|
|
}
|
|
|
|
resource "aws_iam_role" "kubernetes_node_role" {
|
|
name = "${var.iam_prefix}_kubernetes_node_role"
|
|
assume_role_policy = <<EOF
|
|
{
|
|
"Version": "2012-10-17",
|
|
"Statement": [
|
|
{
|
|
"Effect": "Allow",
|
|
"Principal": { "Service": "ec2.amazonaws.com"},
|
|
"Action": "sts:AssumeRole"
|
|
}
|
|
]
|
|
}
|
|
EOF
|
|
}
|
|
|
|
resource "aws_iam_role_policy" "kubernetes_node_policy" {
|
|
name = "${var.iam_prefix}_kubernetes_node_policy"
|
|
role = "${aws_iam_role.kubernetes_node_role.id}"
|
|
policy = <<EOF
|
|
{
|
|
"Version": "2012-10-17",
|
|
"Statement": [
|
|
{
|
|
"Effect": "Allow",
|
|
"Action": "s3:*",
|
|
"Resource": "*"
|
|
},
|
|
{
|
|
"Effect": "Allow",
|
|
"Action": "ec2:Describe*",
|
|
"Resource": "*"
|
|
},
|
|
{
|
|
"Effect": "Allow",
|
|
"Action": "ec2:AttachVolume",
|
|
"Resource": "*"
|
|
},
|
|
{
|
|
"Effect": "Allow",
|
|
"Action": "ec2:DetachVolume",
|
|
"Resource": "*"
|
|
}
|
|
]
|
|
}
|
|
EOF
|
|
}
|
|
|
|
resource "aws_instance" "master" {
|
|
count = "${var.numControllers}"
|
|
ami = "${var.ami}"
|
|
instance_type = "${var.master_instance_type}"
|
|
subnet_id = "${var.subnet}"
|
|
vpc_security_group_ids = ["${var.securityGroups}"]
|
|
key_name = "${var.SSHKey}"
|
|
disable_api_termination = "${var.terminate_protect}"
|
|
iam_instance_profile = "${aws_iam_instance_profile.kubernetes_master_profile.id}"
|
|
root_block_device {
|
|
volume_size = "${var.volSizeController}"
|
|
}
|
|
tags {
|
|
Name = "${var.deploymentName}-master-${count.index + 1}"
|
|
}
|
|
}
|
|
|
|
resource "aws_instance" "etcd" {
|
|
count = "${var.numEtcd}"
|
|
ami = "${var.ami}"
|
|
instance_type = "${var.etcd_instance_type}"
|
|
subnet_id = "${var.subnet}"
|
|
vpc_security_group_ids = ["${var.securityGroups}"]
|
|
key_name = "${var.SSHKey}"
|
|
disable_api_termination = "${var.terminate_protect}"
|
|
root_block_device {
|
|
volume_size = "${var.volSizeEtcd}"
|
|
}
|
|
tags {
|
|
Name = "${var.deploymentName}-etcd-${count.index + 1}"
|
|
}
|
|
}
|
|
|
|
|
|
resource "aws_instance" "minion" {
|
|
count = "${var.numNodes}"
|
|
ami = "${var.ami}"
|
|
instance_type = "${var.node_instance_type}"
|
|
subnet_id = "${var.subnet}"
|
|
vpc_security_group_ids = ["${var.securityGroups}"]
|
|
key_name = "${var.SSHKey}"
|
|
disable_api_termination = "${var.terminate_protect}"
|
|
iam_instance_profile = "${aws_iam_instance_profile.kubernetes_node_profile.id}"
|
|
root_block_device {
|
|
volume_size = "${var.volSizeNodes}"
|
|
}
|
|
tags {
|
|
Name = "${var.deploymentName}-minion-${count.index + 1}"
|
|
}
|
|
}
|
|
|
|
output "kubernetes_master_profile" {
|
|
value = "${aws_iam_instance_profile.kubernetes_master_profile.id}"
|
|
}
|
|
|
|
output "kubernetes_node_profile" {
|
|
value = "${aws_iam_instance_profile.kubernetes_node_profile.id}"
|
|
}
|
|
|
|
output "master-ip" {
|
|
value = "${join(", ", aws_instance.master.*.private_ip)}"
|
|
}
|
|
|
|
output "etcd-ip" {
|
|
value = "${join(", ", aws_instance.etcd.*.private_ip)}"
|
|
}
|
|
|
|
output "minion-ip" {
|
|
value = "${join(", ", aws_instance.minion.*.private_ip)}"
|
|
}
|
|
|
|
|