aws: introduce maximum instance lifetime in cluster

The maximum instance lifetime is an AWS only feature and specifies the
maximum amount of time (in seconds) that an instance can be in service
before it is terminated and replaced.
A common use case might be a requirement to replace your instances on a
schedule because of internal security policies or external compliance
controls.
This commit is contained in:
Nicolas Sterchele 2022-06-27 20:48:55 +02:00
parent 34490d07cf
commit 73b6ed4150
No known key found for this signature in database
GPG Key ID: 80C21B5FED523B0B
69 changed files with 271 additions and 18 deletions

View File

@ -74,6 +74,7 @@ func (m *MockAutoscaling) CreateAutoScalingGroup(input *autoscaling.CreateAutoSc
TargetGroupARNs: input.TargetGroupARNs,
TerminationPolicies: input.TerminationPolicies,
VPCZoneIdentifier: input.VPCZoneIdentifier,
MaxInstanceLifetime: input.MaxInstanceLifetime,
}
if input.LaunchTemplate != nil {

View File

@ -320,3 +320,19 @@ spec:
httpPutResponseHopLimit: 1
httpTokens: required
```
## maxInstanceLifetime (AWS Only)
{{ kops_feature_table(kops_added_default='1.24') }}
The maximum instance lifetime specifies the maximum amount of time (in go duration [format](https://pkg.go.dev/time#ParseDuration)) that an instance can be in service before it is terminated and replaced.
A common use case might be a requirement to replace your instances on a schedule because of internal security policies or external compliance controls.
In other words, this feature helps you to put a bit of ephemerality in your cluster.
You must specify a value of at least 24h (86,400 seconds). To clear a previously set value, specify a new value of 0.
The following configuration enables a maximum instance lifetime to two days.
```yaml
spec:
maxInstanceLifetime: "48h"
```

View File

@ -754,6 +754,11 @@ spec:
manager:
description: Manager determines what is managing the node lifecycle
type: string
maxInstanceLifetime:
description: MaxInstanceLifetime to the maximum amount of time, in
seconds, that an instance can be in service. Value expected must
be in form of duration ("ms", "s", "m", "h")
type: string
maxPrice:
description: MaxPrice indicates this is a spot-pricing group, with
the specified value as our max-price bid

View File

@ -196,6 +196,9 @@ type InstanceGroupSpec struct {
Packages []string `json:"packages,omitempty"`
// GuestAccelerators configures additional accelerators
GuestAccelerators []AcceleratorConfig `json:"guestAccelerators,omitempty"`
// MaxInstanceLifetime to the maximum amount of time, in seconds, that an instance can be in service.
// Value expected must be in form of duration ("ms", "s", "m", "h")
MaxInstanceLifetime *metav1.Duration `json:"maxInstanceLifetime,omitempty"`
}
const (

View File

@ -162,6 +162,9 @@ type InstanceGroupSpec struct {
Packages []string `json:"packages,omitempty"`
// GuestAccelerators configures additional accelerators
GuestAccelerators []AcceleratorConfig `json:"guestAccelerators,omitempty"`
// MaxInstanceLifetime to the maximum amount of time, in seconds, that an instance can be in service.
// Value expected must be in form of duration ("ms", "s", "m", "h")
MaxInstanceLifetime *metav1.Duration `json:"maxInstanceLifetime,omitempty"`
}
// InstanceMetadataOptions defines the EC2 instance metadata service options (AWS Only)

View File

@ -4471,6 +4471,7 @@ func autoConvert_v1alpha2_InstanceGroupSpec_To_kops_InstanceGroupSpec(in *Instan
} else {
out.GuestAccelerators = nil
}
out.MaxInstanceLifetime = in.MaxInstanceLifetime
return nil
}
@ -4654,6 +4655,7 @@ func autoConvert_kops_InstanceGroupSpec_To_v1alpha2_InstanceGroupSpec(in *kops.I
} else {
out.GuestAccelerators = nil
}
out.MaxInstanceLifetime = in.MaxInstanceLifetime
return nil
}

View File

@ -2534,6 +2534,11 @@ func (in *InstanceGroupSpec) DeepCopyInto(out *InstanceGroupSpec) {
*out = make([]AcceleratorConfig, len(*in))
copy(*out, *in)
}
if in.MaxInstanceLifetime != nil {
in, out := &in.MaxInstanceLifetime, &out.MaxInstanceLifetime
*out = new(v1.Duration)
**out = **in
}
return
}

View File

@ -159,6 +159,9 @@ type InstanceGroupSpec struct {
Packages []string `json:"packages,omitempty"`
// GuestAccelerators configures additional accelerators
GuestAccelerators []AcceleratorConfig `json:"guestAccelerators,omitempty"`
// MaxInstanceLifetime to the maximum amount of time, in seconds, that an instance can be in service.
// Value expected must be in form of duration ("ms", "s", "m", "h")
MaxInstanceLifetime *metav1.Duration `json:"maxInstanceLifetime,omitempty"`
}
// InstanceMetadataOptions defines the EC2 instance metadata service options (AWS Only)

View File

@ -4610,6 +4610,7 @@ func autoConvert_v1alpha3_InstanceGroupSpec_To_kops_InstanceGroupSpec(in *Instan
} else {
out.GuestAccelerators = nil
}
out.MaxInstanceLifetime = in.MaxInstanceLifetime
return nil
}
@ -4793,6 +4794,7 @@ func autoConvert_kops_InstanceGroupSpec_To_v1alpha3_InstanceGroupSpec(in *kops.I
} else {
out.GuestAccelerators = nil
}
out.MaxInstanceLifetime = in.MaxInstanceLifetime
return nil
}

View File

@ -2540,6 +2540,11 @@ func (in *InstanceGroupSpec) DeepCopyInto(out *InstanceGroupSpec) {
*out = make([]AcceleratorConfig, len(*in))
copy(*out, *in)
}
if in.MaxInstanceLifetime != nil {
in, out := &in.MaxInstanceLifetime, &out.MaxInstanceLifetime
*out = new(v1.Duration)
**out = **in
}
return
}

View File

@ -24,6 +24,7 @@ import (
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/service/ec2"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/kops/pkg/apis/kops"
@ -100,6 +101,21 @@ func awsValidateInstanceGroup(ig *kops.InstanceGroup, cloud awsup.AWSCloud) fiel
allErrs = append(allErrs, awsValidateCPUCredits(field.NewPath("spec"), &ig.Spec, cloud)...)
}
if ig.Spec.MaxInstanceLifetime != nil {
allErrs = append(allErrs, awsValidateMaximumInstanceLifetime(field.NewPath(ig.GetName(), "spec"), ig.Spec.MaxInstanceLifetime)...)
}
return allErrs
}
func awsValidateMaximumInstanceLifetime(fieldPath *field.Path, maxInstanceLifetime *metav1.Duration) field.ErrorList {
allErrs := field.ErrorList{}
const minMaxInstanceLifetime = 86400
lifetimeSec := int64(maxInstanceLifetime.Seconds())
if lifetimeSec != 0 && lifetimeSec < minMaxInstanceLifetime {
allErrs = append(allErrs, field.Invalid(fieldPath.Child("maxInstanceLifetime"), maxInstanceLifetime, fmt.Sprintf("max instance lifetime must be greater than %d or equal to 0", int64(minMaxInstanceLifetime))))
}
return allErrs
}

View File

@ -18,6 +18,7 @@ package validation
import (
"testing"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ec2"
@ -26,6 +27,7 @@ import (
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kops/pkg/apis/kops"
)
@ -204,6 +206,26 @@ func TestValidateInstanceGroupSpec(t *testing.T) {
},
ExpectedErrors: []string{},
},
{
Input: kops.InstanceGroupSpec{
MaxInstanceLifetime: &metav1.Duration{Duration: time.Duration(100 * float64(time.Second))},
},
ExpectedErrors: []string{
"Invalid value::test-nodes.spec.maxInstanceLifetime",
},
},
{
Input: kops.InstanceGroupSpec{
MaxInstanceLifetime: &metav1.Duration{Duration: time.Duration(86400 * float64(time.Second))},
},
ExpectedErrors: []string{},
},
{
Input: kops.InstanceGroupSpec{
MaxInstanceLifetime: &metav1.Duration{Duration: time.Duration(0 * float64(time.Second))},
},
ExpectedErrors: []string{},
},
}
cloud := awsup.BuildMockAWSCloud("us-east-1", "abc")
mockEC2 := &mockec2.MockEC2{}

View File

@ -2703,6 +2703,11 @@ func (in *InstanceGroupSpec) DeepCopyInto(out *InstanceGroupSpec) {
*out = make([]AcceleratorConfig, len(*in))
copy(*out, *in)
}
if in.MaxInstanceLifetime != nil {
in, out := &in.MaxInstanceLifetime, &out.MaxInstanceLifetime
*out = new(v1.Duration)
**out = **in
}
return
}

View File

@ -547,5 +547,11 @@ func (b *AutoscalingGroupModelBuilder) buildAutoScalingGroupTask(c *fi.ModelBuil
}
}
if ig.Spec.MaxInstanceLifetime != nil {
lifetimeSec := int64(ig.Spec.MaxInstanceLifetime.Seconds())
t.MaxInstanceLifetime = fi.Int64(lifetimeSec)
} else {
t.MaxInstanceLifetime = fi.Int64(0)
}
return t, nil
}

View File

@ -111,6 +111,7 @@ resource "aws_autoscaling_group" "apiserver-apiservers-minimal-example-com" {
id = aws_launch_template.apiserver-apiservers-minimal-example-com.id
version = aws_launch_template.apiserver-apiservers-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2
@ -160,6 +161,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -229,6 +231,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -121,6 +121,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -185,6 +186,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-bastionuserdata-example-com" {
version = aws_launch_template.bastion-bastionuserdata-example-com.latest_version
}
load_balancers = [aws_elb.bastion-bastionuserdata-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -172,6 +173,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-bastionuserdata-exam
version = aws_launch_template.master-us-test-1a-masters-bastionuserdata-example-com.latest_version
}
load_balancers = [aws_elb.api-bastionuserdata-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -236,6 +238,7 @@ resource "aws_autoscaling_group" "nodes-bastionuserdata-example-com" {
id = aws_launch_template.nodes-bastionuserdata-example-com.id
version = aws_launch_template.nodes-bastionuserdata-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -109,6 +109,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-complex-example-com"
version = aws_launch_template.master-us-test-1a-masters-complex-example-com.latest_version
}
load_balancers = ["my-external-lb-1"]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -185,6 +186,7 @@ resource "aws_autoscaling_group" "nodes-complex-example-com" {
version = aws_launch_template.nodes-complex-example-com.latest_version
}
load_balancers = ["my-external-lb-1"]
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-compress-example-com
id = aws_launch_template.master-us-test-1a-masters-compress-example-com.id
version = aws_launch_template.master-us-test-1a-masters-compress-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-compress-example-com" {
id = aws_launch_template.nodes-compress-example-com.id
version = aws_launch_template.nodes-compress-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -121,6 +121,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-123-example-com" {
id = aws_launch_template.master-us-test-1a-masters-123-example-com.id
version = aws_launch_template.master-us-test-1a-masters-123-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -185,6 +186,7 @@ resource "aws_autoscaling_group" "nodes-123-example-com" {
id = aws_launch_template.nodes-123-example-com.id
version = aws_launch_template.nodes-123-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -81,6 +81,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-existing-iam-example
id = aws_launch_template.master-us-test-1a-masters-existing-iam-example-com.id
version = aws_launch_template.master-us-test-1a-masters-existing-iam-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -145,6 +146,7 @@ resource "aws_autoscaling_group" "master-us-test-1b-masters-existing-iam-example
id = aws_launch_template.master-us-test-1b-masters-existing-iam-example-com.id
version = aws_launch_template.master-us-test-1b-masters-existing-iam-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -209,6 +211,7 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-existing-iam-example
id = aws_launch_template.master-us-test-1c-masters-existing-iam-example-com.id
version = aws_launch_template.master-us-test-1c-masters-existing-iam-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -273,6 +276,7 @@ resource "aws_autoscaling_group" "nodes-existing-iam-example-com" {
id = aws_launch_template.nodes-existing-iam-example-com.id
version = aws_launch_template.nodes-existing-iam-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -102,6 +102,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-existingsg-example-c
version = aws_launch_template.master-us-test-1a-masters-existingsg-example-com.latest_version
}
load_balancers = [aws_elb.api-existingsg-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -167,6 +168,7 @@ resource "aws_autoscaling_group" "master-us-test-1b-masters-existingsg-example-c
version = aws_launch_template.master-us-test-1b-masters-existingsg-example-com.latest_version
}
load_balancers = [aws_elb.api-existingsg-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -232,6 +234,7 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-existingsg-example-c
version = aws_launch_template.master-us-test-1c-masters-existingsg-example-com.latest_version
}
load_balancers = [aws_elb.api-existingsg-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -296,6 +299,7 @@ resource "aws_autoscaling_group" "nodes-existingsg-example-com" {
id = aws_launch_template.nodes-existingsg-example-com.id
version = aws_launch_template.nodes-existingsg-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -111,6 +111,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -175,6 +176,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -92,6 +92,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-externallb-example-c
version = aws_launch_template.master-us-test-1a-masters-externallb-example-com.latest_version
}
load_balancers = ["my-external-elb-1", "my-external-elb-2", "my-external-elb-3"]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -158,6 +159,7 @@ resource "aws_autoscaling_group" "nodes-externallb-example-com" {
version = aws_launch_template.nodes-externallb-example-com.latest_version
}
load_balancers = ["my-external-elb-1"]
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -92,6 +92,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-externalpolicies-exa
version = aws_launch_template.master-us-test-1a-masters-externalpolicies-example-com.latest_version
}
load_balancers = [aws_elb.api-externalpolicies-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -166,6 +167,7 @@ resource "aws_autoscaling_group" "nodes-externalpolicies-example-com" {
id = aws_launch_template.nodes-externalpolicies-example-com.id
version = aws_launch_template.nodes-externalpolicies-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -101,6 +101,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-ha-example-com" {
id = aws_launch_template.master-us-test-1a-masters-ha-example-com.id
version = aws_launch_template.master-us-test-1a-masters-ha-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -165,6 +166,7 @@ resource "aws_autoscaling_group" "master-us-test-1b-masters-ha-example-com" {
id = aws_launch_template.master-us-test-1b-masters-ha-example-com.id
version = aws_launch_template.master-us-test-1b-masters-ha-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -229,6 +231,7 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-ha-example-com" {
id = aws_launch_template.master-us-test-1c-masters-ha-example-com.id
version = aws_launch_template.master-us-test-1c-masters-ha-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -293,6 +296,7 @@ resource "aws_autoscaling_group" "nodes-ha-example-com" {
id = aws_launch_template.nodes-ha-example-com.id
version = aws_launch_template.nodes-ha-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -131,6 +131,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -195,6 +196,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -121,6 +121,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -185,6 +186,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -161,6 +161,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -225,6 +226,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -161,6 +161,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -225,6 +226,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -161,6 +161,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -215,6 +216,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -160,6 +161,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -150,6 +151,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -96,6 +96,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-ipv6-example
id = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -156,6 +157,7 @@ resource "aws_autoscaling_group" "nodes-minimal-ipv6-example-com" {
id = aws_launch_template.nodes-minimal-ipv6-example-com.id
version = aws_launch_template.nodes-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1

View File

@ -96,6 +96,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-ipv6-example
id = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -161,6 +162,7 @@ resource "aws_autoscaling_group" "nodes-minimal-ipv6-example-com" {
id = aws_launch_template.nodes-minimal-ipv6-example-com.id
version = aws_launch_template.nodes-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -126,6 +126,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-ipv6-example
id = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -191,6 +192,7 @@ resource "aws_autoscaling_group" "nodes-minimal-ipv6-example-com" {
id = aws_launch_template.nodes-minimal-ipv6-example-com.id
version = aws_launch_template.nodes-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -96,6 +96,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-ipv6-example
id = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -161,6 +162,7 @@ resource "aws_autoscaling_group" "nodes-minimal-ipv6-example-com" {
id = aws_launch_template.nodes-minimal-ipv6-example-com.id
version = aws_launch_template.nodes-minimal-ipv6-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-this-is-truly-a-real
id = aws_launch_template.master-us-test-1a-masters-this-is-truly-a-really-really-long-cluster-name-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-this-is-truly-a-really-really-long-cluster-name-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-this-is-truly-a-really-really-long-clust
id = aws_launch_template.nodes-this-is-truly-a-really-really-long-cluster-name-minimal-example-com.id
version = aws_launch_template.nodes-this-is-truly-a-really-really-long-cluster-name-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-warmpool-exa
id = aws_launch_template.master-us-test-1a-masters-minimal-warmpool-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-warmpool-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-warmpool-example-com" {
id = aws_launch_template.nodes-minimal-warmpool-example-com.id
version = aws_launch_template.nodes-minimal-warmpool-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -51,6 +51,7 @@ spec:
machineType: t2.medium
maxSize: 2
minSize: 2
maxInstanceLifetime: 48h20m
role: Node
subnets:
- us-test-1a
@ -70,6 +71,7 @@ spec:
machineType: m3.medium
maxSize: 1
minSize: 1
maxInstanceLifetime: "0"
role: Master
subnets:
- us-test-1a

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 174000
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-k8s-local" {
id = aws_launch_template.master-us-test-1a-masters-minimal-k8s-local.id
version = aws_launch_template.master-us-test-1a-masters-minimal-k8s-local.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-k8s-local" {
id = aws_launch_template.nodes-minimal-k8s-local.id
version = aws_launch_template.nodes-minimal-k8s-local.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -101,6 +101,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-k8s-local" {
id = aws_launch_template.master-us-test-1a-masters-minimal-k8s-local.id
version = aws_launch_template.master-us-test-1a-masters-minimal-k8s-local.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -165,6 +166,7 @@ resource "aws_autoscaling_group" "nodes-minimal-k8s-local" {
id = aws_launch_template.nodes-minimal-k8s-local.id
version = aws_launch_template.nodes-minimal-k8s-local.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -101,6 +101,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-mixedinstances-examp
id = aws_launch_template.master-us-test-1a-masters-mixedinstances-example-com.id
version = aws_launch_template.master-us-test-1a-masters-mixedinstances-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -165,6 +166,7 @@ resource "aws_autoscaling_group" "master-us-test-1b-masters-mixedinstances-examp
id = aws_launch_template.master-us-test-1b-masters-mixedinstances-example-com.id
version = aws_launch_template.master-us-test-1b-masters-mixedinstances-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -229,6 +231,7 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-mixedinstances-examp
id = aws_launch_template.master-us-test-1c-masters-mixedinstances-example-com.id
version = aws_launch_template.master-us-test-1c-masters-mixedinstances-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -288,10 +291,11 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-mixedinstances-examp
}
resource "aws_autoscaling_group" "nodes-mixedinstances-example-com" {
enabled_metrics = ["GroupDesiredCapacity", "GroupInServiceInstances", "GroupMaxSize", "GroupMinSize", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"]
max_size = 2
metrics_granularity = "1Minute"
min_size = 2
enabled_metrics = ["GroupDesiredCapacity", "GroupInServiceInstances", "GroupMaxSize", "GroupMinSize", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"]
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2
mixed_instances_policy {
instances_distribution {
on_demand_percentage_above_base_capacity = 5

View File

@ -101,6 +101,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-mixedinstances-examp
id = aws_launch_template.master-us-test-1a-masters-mixedinstances-example-com.id
version = aws_launch_template.master-us-test-1a-masters-mixedinstances-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -165,6 +166,7 @@ resource "aws_autoscaling_group" "master-us-test-1b-masters-mixedinstances-examp
id = aws_launch_template.master-us-test-1b-masters-mixedinstances-example-com.id
version = aws_launch_template.master-us-test-1b-masters-mixedinstances-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -229,6 +231,7 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-mixedinstances-examp
id = aws_launch_template.master-us-test-1c-masters-mixedinstances-example-com.id
version = aws_launch_template.master-us-test-1c-masters-mixedinstances-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -288,10 +291,11 @@ resource "aws_autoscaling_group" "master-us-test-1c-masters-mixedinstances-examp
}
resource "aws_autoscaling_group" "nodes-mixedinstances-example-com" {
enabled_metrics = ["GroupDesiredCapacity", "GroupInServiceInstances", "GroupMaxSize", "GroupMinSize", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"]
max_size = 2
metrics_granularity = "1Minute"
min_size = 2
enabled_metrics = ["GroupDesiredCapacity", "GroupInServiceInstances", "GroupMaxSize", "GroupMinSize", "GroupPendingInstances", "GroupStandbyInstances", "GroupTerminatingInstances", "GroupTotalInstances"]
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2
mixed_instances_policy {
instances_distribution {
on_demand_percentage_above_base_capacity = 5

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-nthsqsresources-long
id = aws_launch_template.master-us-test-1a-masters-nthsqsresources-longclustername-example-com.id
version = aws_launch_template.master-us-test-1a-masters-nthsqsresources-longclustername-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -160,6 +161,7 @@ resource "aws_autoscaling_group" "nodes-nthsqsresources-longclustername-example-
id = aws_launch_template.nodes-nthsqsresources-longclustername-example-com.id
version = aws_launch_template.nodes-nthsqsresources-longclustername-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -91,6 +91,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -155,6 +156,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -117,6 +117,7 @@ resource "aws_autoscaling_group" "bastion-private-shared-ip-example-com" {
version = aws_launch_template.bastion-private-shared-ip-example-com.latest_version
}
load_balancers = [aws_elb.bastion-private-shared-ip-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -167,6 +168,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-private-shared-ip-ex
version = aws_launch_template.master-us-test-1a-masters-private-shared-ip-example-com.latest_version
}
load_balancers = [aws_elb.api-private-shared-ip-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -231,6 +233,7 @@ resource "aws_autoscaling_group" "nodes-private-shared-ip-example-com" {
id = aws_launch_template.nodes-private-shared-ip-example-com.id
version = aws_launch_template.nodes-private-shared-ip-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -112,6 +112,7 @@ resource "aws_autoscaling_group" "bastion-private-shared-subnet-example-com" {
version = aws_launch_template.bastion-private-shared-subnet-example-com.latest_version
}
load_balancers = [aws_elb.bastion-private-shared-subnet-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -162,6 +163,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-private-shared-subne
version = aws_launch_template.master-us-test-1a-masters-private-shared-subnet-example-com.latest_version
}
load_balancers = [aws_elb.api-private-shared-subnet-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -226,6 +228,7 @@ resource "aws_autoscaling_group" "nodes-private-shared-subnet-example-com" {
id = aws_launch_template.nodes-private-shared-subnet-example-com.id
version = aws_launch_template.nodes-private-shared-subnet-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privatecalico-example-com" {
version = aws_launch_template.bastion-privatecalico-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privatecalico-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -167,6 +168,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecalico-exampl
version = aws_launch_template.master-us-test-1a-masters-privatecalico-example-com.latest_version
}
load_balancers = [aws_elb.api-privatecalico-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -221,6 +223,7 @@ resource "aws_autoscaling_group" "nodes-privatecalico-example-com" {
id = aws_launch_template.nodes-privatecalico-example-com.id
version = aws_launch_template.nodes-privatecalico-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privatecanal-example-com" {
version = aws_launch_template.bastion-privatecanal-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privatecanal-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -172,6 +173,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecanal-example
version = aws_launch_template.master-us-test-1a-masters-privatecanal-example-com.latest_version
}
load_balancers = [aws_elb.api-privatecanal-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -236,6 +238,7 @@ resource "aws_autoscaling_group" "nodes-privatecanal-example-com" {
id = aws_launch_template.nodes-privatecanal-example-com.id
version = aws_launch_template.nodes-privatecanal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privatecilium-example-com" {
version = aws_launch_template.bastion-privatecilium-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privatecilium-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -172,6 +173,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecilium-exampl
version = aws_launch_template.master-us-test-1a-masters-privatecilium-example-com.latest_version
}
load_balancers = [aws_elb.api-privatecilium-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -236,6 +238,7 @@ resource "aws_autoscaling_group" "nodes-privatecilium-example-com" {
id = aws_launch_template.nodes-privatecilium-example-com.id
version = aws_launch_template.nodes-privatecilium-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privatecilium-example-com" {
version = aws_launch_template.bastion-privatecilium-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privatecilium-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -167,6 +168,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatecilium-exampl
version = aws_launch_template.master-us-test-1a-masters-privatecilium-example-com.latest_version
}
load_balancers = [aws_elb.api-privatecilium-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -221,6 +223,7 @@ resource "aws_autoscaling_group" "nodes-privatecilium-example-com" {
id = aws_launch_template.nodes-privatecilium-example-com.id
version = aws_launch_template.nodes-privatecilium-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privateciliumadvanced-example-com" {
version = aws_launch_template.bastion-privateciliumadvanced-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privateciliumadvanced-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -172,6 +173,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privateciliumadvance
version = aws_launch_template.master-us-test-1a-masters-privateciliumadvanced-example-com.latest_version
}
load_balancers = [aws_elb.api-privateciliumadvanced-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -236,6 +238,7 @@ resource "aws_autoscaling_group" "nodes-privateciliumadvanced-example-com" {
id = aws_launch_template.nodes-privateciliumadvanced-example-com.id
version = aws_launch_template.nodes-privateciliumadvanced-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privatedns1-example-com" {
version = aws_launch_template.bastion-privatedns1-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privatedns1-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -182,6 +183,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatedns1-example-
version = aws_launch_template.master-us-test-1a-masters-privatedns1-example-com.latest_version
}
load_balancers = [aws_elb.api-privatedns1-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -256,6 +258,7 @@ resource "aws_autoscaling_group" "nodes-privatedns1-example-com" {
id = aws_launch_template.nodes-privatedns1-example-com.id
version = aws_launch_template.nodes-privatedns1-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -117,6 +117,7 @@ resource "aws_autoscaling_group" "bastion-privatedns2-example-com" {
version = aws_launch_template.bastion-privatedns2-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privatedns2-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -167,6 +168,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatedns2-example-
version = aws_launch_template.master-us-test-1a-masters-privatedns2-example-com.latest_version
}
load_balancers = [aws_elb.api-privatedns2-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -231,6 +233,7 @@ resource "aws_autoscaling_group" "nodes-privatedns2-example-com" {
id = aws_launch_template.nodes-privatedns2-example-com.id
version = aws_launch_template.nodes-privatedns2-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privateflannel-example-com" {
version = aws_launch_template.bastion-privateflannel-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privateflannel-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -172,6 +173,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privateflannel-examp
version = aws_launch_template.master-us-test-1a-masters-privateflannel-example-com.latest_version
}
load_balancers = [aws_elb.api-privateflannel-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -236,6 +238,7 @@ resource "aws_autoscaling_group" "nodes-privateflannel-example-com" {
id = aws_launch_template.nodes-privateflannel-example-com.id
version = aws_launch_template.nodes-privateflannel-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -137,6 +137,7 @@ resource "aws_autoscaling_group" "bastion-privatekopeio-example-com" {
version = aws_launch_template.bastion-privatekopeio-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privatekopeio-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -187,6 +188,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privatekopeio-exampl
version = aws_launch_template.master-us-test-1a-masters-privatekopeio-example-com.latest_version
}
load_balancers = [aws_elb.api-privatekopeio-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -251,6 +253,7 @@ resource "aws_autoscaling_group" "nodes-privatekopeio-example-com" {
id = aws_launch_template.nodes-privatekopeio-example-com.id
version = aws_launch_template.nodes-privatekopeio-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -122,6 +122,7 @@ resource "aws_autoscaling_group" "bastion-privateweave-example-com" {
version = aws_launch_template.bastion-privateweave-example-com.latest_version
}
load_balancers = [aws_elb.bastion-privateweave-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -172,6 +173,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-privateweave-example
version = aws_launch_template.master-us-test-1a-masters-privateweave-example-com.latest_version
}
load_balancers = [aws_elb.api-privateweave-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -236,6 +238,7 @@ resource "aws_autoscaling_group" "nodes-privateweave-example-com" {
id = aws_launch_template.nodes-privateweave-example-com.id
version = aws_launch_template.nodes-privateweave-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -131,6 +131,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -185,6 +186,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -86,6 +86,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-sharedsubnet-example
id = aws_launch_template.master-us-test-1a-masters-sharedsubnet-example-com.id
version = aws_launch_template.master-us-test-1a-masters-sharedsubnet-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -150,6 +151,7 @@ resource "aws_autoscaling_group" "nodes-sharedsubnet-example-com" {
id = aws_launch_template.nodes-sharedsubnet-example-com.id
version = aws_launch_template.nodes-sharedsubnet-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -86,6 +86,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-sharedvpc-example-co
id = aws_launch_template.master-us-test-1a-masters-sharedvpc-example-com.id
version = aws_launch_template.master-us-test-1a-masters-sharedvpc-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -150,6 +151,7 @@ resource "aws_autoscaling_group" "nodes-sharedvpc-example-com" {
id = aws_launch_template.nodes-sharedvpc-example-com.id
version = aws_launch_template.nodes-sharedvpc-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -117,6 +117,7 @@ resource "aws_autoscaling_group" "bastion-unmanaged-example-com" {
version = aws_launch_template.bastion-unmanaged-example-com.latest_version
}
load_balancers = [aws_elb.bastion-unmanaged-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -167,6 +168,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-unmanaged-example-co
version = aws_launch_template.master-us-test-1a-masters-unmanaged-example-com.latest_version
}
load_balancers = [aws_elb.api-unmanaged-example-com.id]
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -231,6 +233,7 @@ resource "aws_autoscaling_group" "nodes-unmanaged-example-com" {
id = aws_launch_template.nodes-unmanaged-example-com.id
version = aws_launch_template.nodes-unmanaged-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -101,6 +101,7 @@ resource "aws_autoscaling_group" "master-us-test-1a-masters-minimal-example-com"
id = aws_launch_template.master-us-test-1a-masters-minimal-example-com.id
version = aws_launch_template.master-us-test-1a-masters-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 1
metrics_granularity = "1Minute"
min_size = 1
@ -165,6 +166,7 @@ resource "aws_autoscaling_group" "nodes-minimal-example-com" {
id = aws_launch_template.nodes-minimal-example-com.id
version = aws_launch_template.nodes-minimal-example-com.latest_version
}
max_instance_lifetime = 0
max_size = 2
metrics_granularity = "1Minute"
min_size = 2

View File

@ -37,7 +37,7 @@ import (
// CloudTagInstanceGroupRolePrefix is a cloud tag that defines the instance role
const CloudTagInstanceGroupRolePrefix = "k8s.io/role/"
// AutoscalingGroup provdes the definition for a autoscaling group in aws
// AutoscalingGroup provides the definition for a autoscaling group in aws
// +kops:fitask
type AutoscalingGroup struct {
// Name is the name of the ASG
@ -53,6 +53,8 @@ type AutoscalingGroup struct {
LaunchTemplate *LaunchTemplate
// LoadBalancers is a list of elastic load balancer names to add to the autoscaling group
LoadBalancers []*ClassicLoadBalancer
// MaxInstanceLifetime is the maximum amount of time, in seconds, that an instance can be in service.
MaxInstanceLifetime *int64
// MaxSize is the max number of nodes in asg
MaxSize *int64
// Metrics is a collection of metrics to monitor
@ -110,9 +112,17 @@ func (e *AutoscalingGroup) Find(c *fi.Context) (*AutoscalingGroup, error) {
}
actual := &AutoscalingGroup{
Name: g.AutoScalingGroupName,
MaxSize: g.MaxSize,
MinSize: g.MinSize,
Name: g.AutoScalingGroupName,
MaxSize: g.MaxSize,
MinSize: g.MinSize,
MaxInstanceLifetime: g.MaxInstanceLifetime,
}
// Use 0 as default value when api returns nil (same as model)
if g.MaxInstanceLifetime == nil {
actual.MaxInstanceLifetime = fi.Int64(0)
} else {
actual.MaxInstanceLifetime = g.MaxInstanceLifetime
}
actual.LoadBalancers = []*ClassicLoadBalancer{}
@ -344,6 +354,13 @@ func (v *AutoscalingGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Autos
VPCZoneIdentifier: fi.String(strings.Join(e.AutoscalingGroupSubnets(), ",")),
}
//On ASG creation 0 value is forbidden
if fi.Int64Value(e.MaxInstanceLifetime) == 0 {
request.MaxInstanceLifetime = nil
} else {
request.MaxInstanceLifetime = e.MaxInstanceLifetime
}
for _, k := range e.LoadBalancers {
if k.LoadBalancerName == nil {
lbDesc, err := t.Cloud.FindELBByNameTag(fi.StringValue(k.GetName()))
@ -523,6 +540,13 @@ func (v *AutoscalingGroup) RenderAWS(t *awsup.AWSAPITarget, a, e, changes *Autos
changes.Subnets = nil
}
if changes.MaxInstanceLifetime != nil {
request.MaxInstanceLifetime = e.MaxInstanceLifetime
changes.MaxInstanceLifetime = nil
} else {
request.MaxInstanceLifetime = fi.Int64(0)
}
var updateTagsRequest *autoscaling.CreateOrUpdateTagsInput
var deleteTagsRequest *autoscaling.DeleteTagsInput
if changes.Tags != nil {
@ -891,17 +915,19 @@ type terraformAutoscalingGroup struct {
InstanceProtection *bool `cty:"protect_from_scale_in"`
LoadBalancers []*terraformWriter.Literal `cty:"load_balancers"`
TargetGroupARNs []*terraformWriter.Literal `cty:"target_group_arns"`
MaxInstanceLifetime *int64 `cty:"max_instance_lifetime"`
}
// RenderTerraform is responsible for rendering the terraform codebase
func (_ *AutoscalingGroup) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *AutoscalingGroup) error {
tf := &terraformAutoscalingGroup{
Name: e.Name,
MinSize: e.MinSize,
MaxSize: e.MaxSize,
MetricsGranularity: e.Granularity,
EnabledMetrics: aws.StringSlice(e.Metrics),
InstanceProtection: e.InstanceProtection,
Name: e.Name,
MinSize: e.MinSize,
MaxSize: e.MaxSize,
MetricsGranularity: e.Granularity,
EnabledMetrics: aws.StringSlice(e.Metrics),
InstanceProtection: e.InstanceProtection,
MaxInstanceLifetime: e.MaxInstanceLifetime,
}
for _, s := range e.Subnets {