Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial version of EKS terraform config #986

Merged
merged 2 commits into from
Jan 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions examples/terraform-submodules/eks/module.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// Copyright 2020 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


// Run:
// terraform apply [-var agones_version="1.2.0"]
// to install "1.2.0" version of agones

variable "agones_version" {
default = "1.2.0"
}

variable "cluster_name" {
default = "agones-cluster"
}

variable "region" {
default = "us-west-2"
}

variable "node_count" {
default = "4"
}

provider "aws" {
version = "~> 2.8"
region = var.region
}

variable "machine_type" { default = "t2.large" }

module "eks_cluster" {
source = "git::https://github.com/googleforgames/agones.git//install/terraform/modules/eks/?ref=master"

machine_type = "${var.machine_type}"
cluster_name = "${var.cluster_name}"
node_count = "${var.node_count}"
region = "${var.region}"
}

data "aws_eks_cluster_auth" "example" {
name = "${var.cluster_name}"
}

// Next Helm module cause "terraform destroy" timeout, unless helm release would be deleted first.
// Therefore "helm delete --purge agones" should be executed from the CLI before executing "terraform destroy".
module "helm_agones" {
source = "git::https://github.com/googleforgames/agones.git//install/terraform/modules/helm/?ref=master"

udp_expose = "false"
agones_version = "${var.agones_version}"
values_file = ""
chart = "agones"
host = "${module.eks_cluster.host}"
token = "${data.aws_eks_cluster_auth.example.token}"
cluster_ca_certificate = "${module.eks_cluster.cluster_ca_certificate}"
}

output "host" {
value = "${module.eks_cluster.host}"
}
output "cluster_ca_certificate" {
value = "${module.eks_cluster.cluster_ca_certificate}"
}
112 changes: 112 additions & 0 deletions install/terraform/modules/eks/eks.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# Copyright 2020 Google LLC All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


terraform {
required_version = ">= 0.12.6"
}

provider "aws" {
version = "~> 2.8"
region = var.region
}

data "aws_availability_zones" "available" {
}

resource "aws_security_group" "worker_group_mgmt_one" {
name_prefix = "worker_group_mgmt_one"
vpc_id = module.vpc.vpc_id

ingress {
from_port = 22
to_port = 22
protocol = "tcp"

cidr_blocks = [
"10.0.0.0/8",
]
}
ingress {
from_port = 7000
to_port = 8000
protocol = "udp"

cidr_blocks = [
"0.0.0.0/0",
]
}

egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}

module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "2.21.0"

name = "test-vpc-lt"
cidr = "10.0.0.0/16"
azs = data.aws_availability_zones.available.names
public_subnets = ["10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24"]
enable_dns_hostnames = false

tags = {
"kubernetes.io/cluster/${var.cluster_name}" = "shared"
}

public_subnet_tags = {
"kubernetes.io/cluster/${var.cluster_name}" = "shared"
"kubernetes.io/role/elb" = "1"
}
}

module "eks" {
source = "git::github.com/terraform-aws-modules/terraform-aws-eks.git?ref=v7.0.1"
cluster_name = "${var.cluster_name}"
subnets = module.vpc.public_subnets
vpc_id = module.vpc.vpc_id
cluster_version = "1.13"

worker_groups_launch_template = [
{
name = "default"
instance_type = "${var.machine_type}"
asg_desired_capacity = "${var.node_count}"
asg_min_size = "${var.node_count}"
asg_max_size = "${var.node_count}"
additional_security_group_ids = [aws_security_group.worker_group_mgmt_one.id]
public_ip = true
},
// Node Pools with taints for metrics and system
{
name = "agones-system"
instance_type = "${var.machine_type}"
asg_desired_capacity = 1
kubelet_extra_args = "--node-labels=agones.dev/agones-system=true --register-with-taints=agones.dev/agones-system=true:NoExecute"
public_ip = true
},
{
name = "agones-metrics"
instance_type = "${var.machine_type}"
asg_desired_capacity = 1
kubelet_extra_args = "--node-labels=agones.dev/agones-metrics=true --register-with-taints=agones.dev/agones-metrics=true:NoExecute"
public_ip = true
}
]
}
48 changes: 48 additions & 0 deletions install/terraform/modules/eks/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright 2020 Google LLC All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
output "cluster_endpoint" {
description = "Endpoint for EKS control plane."
value = module.eks.cluster_endpoint
}

output "cluster_security_group_id" {
description = "Security group ids attached to the cluster control plane."
value = module.eks.cluster_security_group_id
}

output "kubectl_config" {
description = "kubectl config as generated by the module."
value = module.eks.kubeconfig
}

output "config_map_aws_auth" {
description = "A kubernetes configuration to authenticate to this EKS cluster."
value = module.eks.config_map_aws_auth
}

output "region" {
description = "AWS region."
value = var.region
}



output "cluster_ca_certificate" {
value = "${base64decode(module.eks.cluster_certificate_authority_data)}"
}

output "host" {
depends_on = ["module.eks"]
value = "${module.eks.cluster_endpoint}"
}
70 changes: 70 additions & 0 deletions install/terraform/modules/eks/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Copyright 2020 Google LLC All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

variable "cluster_name" {
default = "test-cluster"
}

variable "region" {
default = "us-west-2"
}

variable "machine_type" {
default = "t2.large"
}

variable "node_count" {
default = "4"
}

variable "map_accounts" {
description = "Additional AWS account numbers to add to the aws-auth configmap."
type = list(string)

default = [
"777777777777",
"888888888888",
]
}

variable "map_roles" {
description = "Additional IAM roles to add to the aws-auth configmap."
type = list(map(string))

default = [
{
role_arn = "arn:aws:iam::66666666666:role/role1"
username = "role1"
group = "system:masters"
},
]
}

variable "map_users" {
description = "Additional IAM users to add to the aws-auth configmap."
type = list(map(string))

default = [
{
user_arn = "arn:aws:iam::66666666666:user/user1"
username = "user1"
group = "system:masters"
},
{
user_arn = "arn:aws:iam::66666666666:user/user2"
username = "user2"
group = "system:masters"
},
]
}
7 changes: 6 additions & 1 deletion install/terraform/modules/helm/helm.tf
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,15 @@ resource "helm_release" "agones" {
}

set {
name = " agones.ping.http.serviceType"
name = "agones.ping.http.serviceType"
value = "${var.ping_service_type}"
}

set {
name = "agones.ping.udp.expose"
value ="${var.udp_expose}"
}

set {
name = "agones.ping.udp.serviceType"
value = "${var.ping_service_type}"
Expand Down
4 changes: 4 additions & 0 deletions install/terraform/modules/helm/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ variable "agones_version" {
default = ""
}

variable "udp_expose" {
default = "true"
}

variable "host" {}

variable "token" {}
Expand Down
3 changes: 2 additions & 1 deletion site/content/en/docs/Installation/Terraform/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ description: >

- [Terraform](https://www.terraform.io/) v0.12.3
- [Helm](https://docs.helm.sh/helm/) package manager 2.10.0+
- Access to the the Kubernetes hosting provider you are using (e.g. `gcloud` or `az` utility installed)
- Access to the the Kubernetes hosting provider you are using (e.g. `gcloud`
{{% feature publishVersion="1.3.0" %}}, `awscli`{{% /feature %}} or `az` utility installed)
- Git
4 changes: 2 additions & 2 deletions site/content/en/docs/Installation/Terraform/aks.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: "Installing Agones on Azure Kubernetes Service using Terraform"
linkTitle: "Azure"
weight: 20
description: >
You can use Terraform to provision a AKS cluster and install Agones on it.
You can use Terraform to provision an AKS cluster and install Agones on it.
---

## Installation
Expand Down Expand Up @@ -35,7 +35,7 @@ Once you created all resources on AKS you can get the credentials so that you ca
az aks get-credentials --resource-group agonesRG --name test-cluster
```

Check that you have access to kubernetes cluster:
Check that you have access to the Kubernetes cluster:
```
kubectl get nodes
```
Expand Down
Loading