* Fix issue where worker firewall rules didn't apply to additional workers attached to a GCP cluster using the new "worker pools" feature (unreleased, #148). Solves host connection timeouts and pods not being scheduled to attached worker pools. * Add `name` field to GCP internal worker module to represent the unique name of of the worker pool * Use `cluster_name` field of GCP internal worker module for passing the name of the cluster to which workers should be attached
5.5 KiB
Worker Pools
Typhoon AWS and Google Cloud allow additional groups of workers to be defined and joined to a cluster. For example, add worker pools of instances with different types, disk sizes, Container Linux channels, or preemptibility modes.
Internal Terraform Modules:
aws/container-linux/kubernetes/workers
google-cloud/container-linux/kubernetes/workers
AWS
Create a cluster following the AWS tutorial. Define a worker pool using the AWS internal workers
module.
module "tempest-worker-pool" {
source = "git::https://github.com/poseidon/typhoon//aws/container-linux/kubernetes/workers?ref=v1.9.4"
providers = {
aws = "aws.default"
}
# AWS
vpc_id = "${module.aws-tempest.vpc_id}"
subnet_ids = "${module.aws-tempest.subnet_ids}"
security_groups = "${module.aws-tempest.worker_security_groups}"
# configuration
cluster_name = "tempest-worker-pool"
kubeconfig = "${module.aws-tempest.kubeconfig}"
ssh_authorized_key = "${var.ssh_authorized_key}"
count = 2
instance_type = "m5.large"
os_channel = "beta"
}
Apply the change.
terraform apply
Verify an auto-scaling group of workers join the cluster within a few minutes.
Variables
The AWS internal workers
module supports a number of variables.
Required
Name | Description | Example |
---|---|---|
vpc_id | Must be set to vpc_id output by cluster |
"${module.cluster.vpc_id}" |
subnet_ids | Must be set to subnet_ids output by cluster |
"${module.cluster.subnet_ids}" |
security_groups | Must be set to worker_security_groups output by cluster |
"${module.cluster.worker_security_groups}" |
cluster_name | Unique name | "tempest-worker-pool" |
kubeconfig | Must be set to kubeconfig output by cluster |
"${module.cluster.kubeconfig}" |
ssh_authorized_key | SSH public key for ~/.ssh_authorized_keys | "ssh-rsa AAAAB3NZ..." |
Optional
Name | Description | Default | Example |
---|---|---|---|
count | Number of instances | 1 | 3 |
instance_type | EC2 instance type | "t2.small" | "t2.medium" |
os_channel | Container Linux AMI channel | stable | "beta", "alpha" |
disk_size | Size of the disk in GB | 40 | 100 |
service_cidr | Must match service_cidr of cluster |
"10.3.0.0/16" | "10.3.0.0/24" |
cluster_domain_suffix | Must match cluster_domain_suffix of cluster |
"cluster.local" | "k8s.example.com" |
Check the list of valid instance types.
Google Cloud
Create a cluster following the Google Cloud tutorial. Define a worker pool using the Google Cloud internal workers
module.
module "yavin-worker-pool" {
source = "git::https://github.com/poseidon/typhoon//google-cloud/container-linux/kubernetes/workers?ref=v1.9.4"
providers = {
google = "google.default"
}
# Google Cloud
region = "us-central1"
network = "${module.google-cloud-yavin.network_name}"
cluster_name = "yavin"
# configuration
name = "yavin-16x"
kubeconfig = "${module.google-cloud-yavin.kubeconfig}"
ssh_authorized_key = "${var.ssh_authorized_key}"
count = 2
machine_type = "n1-standard-16"
os_image = "coreos-beta"
preemptible = true
}
Apply the change.
terraform apply
Verify a managed instance group of workers joins the cluster within a few minutes.
$ kubectl get nodes
NAME STATUS AGE VERSION
yavin-controller-0.c.example-com.internal Ready 6m v1.9.3
yavin-worker-jrbf.c.example-com.internal Ready 5m v1.9.3
yavin-worker-mzdm.c.example-com.internal Ready 5m v1.9.3
yavin-16x-worker-jrbf.c.example-com.internal Ready 3m v1.9.3
yavin-16x-worker-mzdm.c.example-com.internal Ready 3m v1.9.3
Variables
The Google Cloud internal workers
module supports a number of variables.
Required
Name | Description | Example |
---|---|---|
region | Must be set to region of cluster |
"us-central1" |
network | Must be set to network_name output by cluster |
"${module.cluster.network_name}" |
name | Unique name (distinct from cluster name) | "yavin-16x" |
cluster_name | Must be set to cluster_name of cluster |
"yavin" |
kubeconfig | Must be set to kubeconfig output by cluster |
"${module.cluster.kubeconfig}" |
ssh_authorized_key | SSH public key for ~/.ssh_authorized_keys | "ssh-rsa AAAAB3NZ..." |
Optional
Name | Description | Default | Example |
---|---|---|---|
count | Number of instances | 1 | 3 |
machine_type | Compute instance machine type | "n1-standard-1" | See below |
os_image | OS image for compute instances | "coreos-stable" | "coreos-alpha", "coreos-beta" |
disk_size | Size of the disk in GB | 40 | 100 |
preemptible | If true, Compute Engine will terminate instances randomly within 24 hours | false | true |
service_cidr | Must match service_cidr of cluster |
"10.3.0.0/16" | "10.3.0.0/24" |
cluster_domain_suffix | Must match cluster_domain_suffix of cluster |
"cluster.local" | "k8s.example.com" |
Check the list of valid machine types.