@@ -58,7 +58,7 @@ func NewDefaultCluster() *Cluster {
5858 AwsNodeLabels : AwsNodeLabels {
5959 Enabled : false ,
6060 },
61- ClusterAutoscalerSupport : ClusterAutoscalerSupport {
61+ ClusterAutoscalerSupport : model. ClusterAutoscalerSupport {
6262 Enabled : false ,
6363 },
6464 TLSBootstrap : TLSBootstrap {
@@ -81,7 +81,7 @@ func NewDefaultCluster() *Cluster {
8181 NodeDrainer : NodeDrainer {
8282 Enabled : false ,
8383 },
84- NodeLabels : NodeLabels {},
84+ NodeLabels : model. NodeLabels {},
8585 Plugins : Plugins {
8686 Rbac : Rbac {
8787 Enabled : false ,
@@ -104,34 +104,35 @@ func NewDefaultCluster() *Cluster {
104104
105105 return & Cluster {
106106 DeploymentSettings : DeploymentSettings {
107- ClusterName : "kubernetes" ,
108- VPCCIDR : "10.0.0.0/16" ,
109- ReleaseChannel : "stable" ,
110- K8sVer : k8sVer ,
111- ContainerRuntime : "docker" ,
112- Subnets : []model.Subnet {},
113- EIPAllocationIDs : []string {},
114- MapPublicIPs : true ,
115- Experimental : experimental ,
116- ManageCertificates : true ,
117- HyperkubeImage : model.Image {Repo : "quay.io/coreos/hyperkube" , Tag : k8sVer , RktPullDocker : false },
118- AWSCliImage : model.Image {Repo : "quay.io/coreos/awscli" , Tag : "master" , RktPullDocker : false },
119- CalicoNodeImage : model.Image {Repo : "quay.io/calico/node" , Tag : "v1.2.1" , RktPullDocker : false },
120- CalicoCniImage : model.Image {Repo : "quay.io/calico/cni" , Tag : "v1.8.3" , RktPullDocker : false },
121- CalicoPolicyControllerImage : model.Image {Repo : "quay.io/calico/kube-policy-controller" , Tag : "v0.6.0" , RktPullDocker : false },
122- CalicoCtlImage : model.Image {Repo : "quay.io/calico/ctl" , Tag : "v1.2.1" , RktPullDocker : false },
123- ClusterAutoscalerImage : model.Image {Repo : "gcr.io/google_containers/cluster-proportional-autoscaler-amd64" , Tag : "1.1.1" , RktPullDocker : false },
124- KubeDnsImage : model.Image {Repo : "gcr.io/google_containers/k8s-dns-kube-dns-amd64" , Tag : "1.14.2" , RktPullDocker : false },
125- KubeDnsMasqImage : model.Image {Repo : "gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64" , Tag : "1.14.2" , RktPullDocker : false },
126- KubeReschedulerImage : model.Image {Repo : "gcr.io/google-containers/rescheduler" , Tag : "v0.3.0" , RktPullDocker : false },
127- DnsMasqMetricsImage : model.Image {Repo : "gcr.io/google_containers/k8s-dns-sidecar-amd64" , Tag : "1.14.2" , RktPullDocker : false },
128- ExecHealthzImage : model.Image {Repo : "gcr.io/google_containers/exechealthz-amd64" , Tag : "1.2" , RktPullDocker : false },
129- HeapsterImage : model.Image {Repo : "gcr.io/google_containers/heapster" , Tag : "v1.3.0" , RktPullDocker : false },
130- AddonResizerImage : model.Image {Repo : "gcr.io/google_containers/addon-resizer" , Tag : "1.7" , RktPullDocker : false },
131- KubeDashboardImage : model.Image {Repo : "gcr.io/google_containers/kubernetes-dashboard-amd64" , Tag : "v1.6.1" , RktPullDocker : false },
132- PauseImage : model.Image {Repo : "gcr.io/google_containers/pause-amd64" , Tag : "3.0" , RktPullDocker : false },
133- FlannelImage : model.Image {Repo : "quay.io/coreos/flannel" , Tag : "v0.7.1" , RktPullDocker : false },
134- DexImage : model.Image {Repo : "quay.io/coreos/dex" , Tag : "v2.4.1" , RktPullDocker : false },
107+ ClusterName : "kubernetes" ,
108+ VPCCIDR : "10.0.0.0/16" ,
109+ ReleaseChannel : "stable" ,
110+ K8sVer : k8sVer ,
111+ ContainerRuntime : "docker" ,
112+ Subnets : []model.Subnet {},
113+ EIPAllocationIDs : []string {},
114+ MapPublicIPs : true ,
115+ Experimental : experimental ,
116+ ManageCertificates : true ,
117+ HyperkubeImage : model.Image {Repo : "quay.io/coreos/hyperkube" , Tag : k8sVer , RktPullDocker : false },
118+ AWSCliImage : model.Image {Repo : "quay.io/coreos/awscli" , Tag : "master" , RktPullDocker : false },
119+ CalicoNodeImage : model.Image {Repo : "quay.io/calico/node" , Tag : "v1.2.1" , RktPullDocker : false },
120+ CalicoCniImage : model.Image {Repo : "quay.io/calico/cni" , Tag : "v1.8.3" , RktPullDocker : false },
121+ CalicoPolicyControllerImage : model.Image {Repo : "quay.io/calico/kube-policy-controller" , Tag : "v0.6.0" , RktPullDocker : false },
122+ CalicoCtlImage : model.Image {Repo : "quay.io/calico/ctl" , Tag : "v1.2.1" , RktPullDocker : false },
123+ ClusterAutoscalerImage : model.Image {Repo : "quay.io/kube-aws/cluster-autoscaler" , Tag : "b432362a70f925d94240fe0bb772bd05fb8ad8d6" , RktPullDocker : false },
124+ ClusterProportionalAutoscalerImage : model.Image {Repo : "gcr.io/google_containers/cluster-proportional-autoscaler-amd64" , Tag : "1.1.1" , RktPullDocker : false },
125+ KubeDnsImage : model.Image {Repo : "gcr.io/google_containers/k8s-dns-kube-dns-amd64" , Tag : "1.14.2" , RktPullDocker : false },
126+ KubeDnsMasqImage : model.Image {Repo : "gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64" , Tag : "1.14.2" , RktPullDocker : false },
127+ KubeReschedulerImage : model.Image {Repo : "gcr.io/google-containers/rescheduler" , Tag : "v0.3.0" , RktPullDocker : false },
128+ DnsMasqMetricsImage : model.Image {Repo : "gcr.io/google_containers/k8s-dns-sidecar-amd64" , Tag : "1.14.2" , RktPullDocker : false },
129+ ExecHealthzImage : model.Image {Repo : "gcr.io/google_containers/exechealthz-amd64" , Tag : "1.2" , RktPullDocker : false },
130+ HeapsterImage : model.Image {Repo : "gcr.io/google_containers/heapster" , Tag : "v1.3.0" , RktPullDocker : false },
131+ AddonResizerImage : model.Image {Repo : "gcr.io/google_containers/addon-resizer" , Tag : "1.7" , RktPullDocker : false },
132+ KubeDashboardImage : model.Image {Repo : "gcr.io/google_containers/kubernetes-dashboard-amd64" , Tag : "v1.6.1" , RktPullDocker : false },
133+ PauseImage : model.Image {Repo : "gcr.io/google_containers/pause-amd64" , Tag : "3.0" , RktPullDocker : false },
134+ FlannelImage : model.Image {Repo : "quay.io/coreos/flannel" , Tag : "v0.7.1" , RktPullDocker : false },
135+ DexImage : model.Image {Repo : "quay.io/coreos/dex" , Tag : "v2.4.1" , RktPullDocker : false },
135136 },
136137 KubeClusterSettings : KubeClusterSettings {
137138 DNSServiceIP : "10.3.0.10" ,
@@ -494,24 +495,25 @@ type DeploymentSettings struct {
494495 WaitSignal WaitSignal `yaml:"waitSignal"`
495496
496497 // Images repository
497- HyperkubeImage model.Image `yaml:"hyperkubeImage,omitempty"`
498- AWSCliImage model.Image `yaml:"awsCliImage,omitempty"`
499- CalicoNodeImage model.Image `yaml:"calicoNodeImage,omitempty"`
500- CalicoCniImage model.Image `yaml:"calicoCniImage,omitempty"`
501- CalicoCtlImage model.Image `yaml:"calicoCtlImage,omitempty"`
502- CalicoPolicyControllerImage model.Image `yaml:"calicoPolicyControllerImage,omitempty"`
503- ClusterAutoscalerImage model.Image `yaml:"clusterAutoscalerImage,omitempty"`
504- KubeDnsImage model.Image `yaml:"kubeDnsImage,omitempty"`
505- KubeDnsMasqImage model.Image `yaml:"kubeDnsMasqImage,omitempty"`
506- KubeReschedulerImage model.Image `yaml:"kubeReschedulerImage,omitempty"`
507- DnsMasqMetricsImage model.Image `yaml:"dnsMasqMetricsImage,omitempty"`
508- ExecHealthzImage model.Image `yaml:"execHealthzImage,omitempty"`
509- HeapsterImage model.Image `yaml:"heapsterImage,omitempty"`
510- AddonResizerImage model.Image `yaml:"addonResizerImage,omitempty"`
511- KubeDashboardImage model.Image `yaml:"kubeDashboardImage,omitempty"`
512- PauseImage model.Image `yaml:"pauseImage,omitempty"`
513- FlannelImage model.Image `yaml:"flannelImage,omitempty"`
514- DexImage model.Image `yaml:"dexImage,omitempty"`
498+ HyperkubeImage model.Image `yaml:"hyperkubeImage,omitempty"`
499+ AWSCliImage model.Image `yaml:"awsCliImage,omitempty"`
500+ CalicoNodeImage model.Image `yaml:"calicoNodeImage,omitempty"`
501+ CalicoCniImage model.Image `yaml:"calicoCniImage,omitempty"`
502+ CalicoCtlImage model.Image `yaml:"calicoCtlImage,omitempty"`
503+ CalicoPolicyControllerImage model.Image `yaml:"calicoPolicyControllerImage,omitempty"`
504+ ClusterAutoscalerImage model.Image `yaml:"clusterAutoscalerImage,omitempty"`
505+ ClusterProportionalAutoscalerImage model.Image `yaml:"clusterProportionalAutoscalerImage,omitempty"`
506+ KubeDnsImage model.Image `yaml:"kubeDnsImage,omitempty"`
507+ KubeDnsMasqImage model.Image `yaml:"kubeDnsMasqImage,omitempty"`
508+ KubeReschedulerImage model.Image `yaml:"kubeReschedulerImage,omitempty"`
509+ DnsMasqMetricsImage model.Image `yaml:"dnsMasqMetricsImage,omitempty"`
510+ ExecHealthzImage model.Image `yaml:"execHealthzImage,omitempty"`
511+ HeapsterImage model.Image `yaml:"heapsterImage,omitempty"`
512+ AddonResizerImage model.Image `yaml:"addonResizerImage,omitempty"`
513+ KubeDashboardImage model.Image `yaml:"kubeDashboardImage,omitempty"`
514+ PauseImage model.Image `yaml:"pauseImage,omitempty"`
515+ FlannelImage model.Image `yaml:"flannelImage,omitempty"`
516+ DexImage model.Image `yaml:"dexImage,omitempty"`
515517}
516518
517519// Part of configuration which is specific to worker nodes
@@ -673,24 +675,26 @@ type Cluster struct {
673675}
674676
675677type Experimental struct {
676- Admission Admission `yaml:"admission"`
677- AuditLog AuditLog `yaml:"auditLog"`
678- Authentication Authentication `yaml:"authentication"`
679- AwsEnvironment AwsEnvironment `yaml:"awsEnvironment"`
680- AwsNodeLabels AwsNodeLabels `yaml:"awsNodeLabels"`
681- ClusterAutoscalerSupport ClusterAutoscalerSupport `yaml:"clusterAutoscalerSupport"`
682- TLSBootstrap TLSBootstrap `yaml:"tlsBootstrap"`
683- EphemeralImageStorage EphemeralImageStorage `yaml:"ephemeralImageStorage"`
684- Kube2IamSupport Kube2IamSupport `yaml:"kube2IamSupport,omitempty"`
685- LoadBalancer LoadBalancer `yaml:"loadBalancer"`
686- TargetGroup TargetGroup `yaml:"targetGroup"`
687- NodeDrainer NodeDrainer `yaml:"nodeDrainer"`
688- NodeLabels NodeLabels `yaml:"nodeLabels"`
689- Plugins Plugins `yaml:"plugins"`
690- Dex model.Dex `yaml:"dex"`
691- DisableSecurityGroupIngress bool `yaml:"disableSecurityGroupIngress"`
692- NodeMonitorGracePeriod string `yaml:"nodeMonitorGracePeriod"`
693- Taints model.Taints `yaml:"taints"`
678+ Admission Admission `yaml:"admission"`
679+ AuditLog AuditLog `yaml:"auditLog"`
680+ Authentication Authentication `yaml:"authentication"`
681+ AwsEnvironment AwsEnvironment `yaml:"awsEnvironment"`
682+ AwsNodeLabels AwsNodeLabels `yaml:"awsNodeLabels"`
683+ // When cluster-autoscaler support is enabled, not only controller nodes but this node pool is also given
684+ // a node label and IAM permissions to run cluster-autoscaler
685+ ClusterAutoscalerSupport model.ClusterAutoscalerSupport `yaml:"clusterAutoscalerSupport"`
686+ TLSBootstrap TLSBootstrap `yaml:"tlsBootstrap"`
687+ EphemeralImageStorage EphemeralImageStorage `yaml:"ephemeralImageStorage"`
688+ Kube2IamSupport Kube2IamSupport `yaml:"kube2IamSupport,omitempty"`
689+ LoadBalancer LoadBalancer `yaml:"loadBalancer"`
690+ TargetGroup TargetGroup `yaml:"targetGroup"`
691+ NodeDrainer NodeDrainer `yaml:"nodeDrainer"`
692+ NodeLabels model.NodeLabels `yaml:"nodeLabels"`
693+ Plugins Plugins `yaml:"plugins"`
694+ Dex model.Dex `yaml:"dex"`
695+ DisableSecurityGroupIngress bool `yaml:"disableSecurityGroupIngress"`
696+ NodeMonitorGracePeriod string `yaml:"nodeMonitorGracePeriod"`
697+ Taints model.Taints `yaml:"taints"`
694698 model.UnknownKeys `yaml:",inline"`
695699}
696700
@@ -727,10 +731,6 @@ type AwsNodeLabels struct {
727731 Enabled bool `yaml:"enabled"`
728732}
729733
730- type ClusterAutoscalerSupport struct {
731- Enabled bool `yaml:"enabled"`
732- }
733-
734734type TLSBootstrap struct {
735735 Enabled bool `yaml:"enabled"`
736736}
@@ -754,27 +754,6 @@ type NodeDrainer struct {
754754 Enabled bool `yaml:"enabled"`
755755}
756756
757- type NodeLabels map [string ]string
758-
759- func (l NodeLabels ) Enabled () bool {
760- return len (l ) > 0
761- }
762-
763- // Returns key=value pairs separated by ',' to be passed to kubelet's `--node-labels` flag
764- func (l NodeLabels ) String () string {
765- labels := []string {}
766- keys := []string {}
767- for k , _ := range l {
768- keys = append (keys , k )
769- }
770- sort .Strings (keys )
771- for _ , k := range keys {
772- v := l [k ]
773- labels = append (labels , fmt .Sprintf ("%s=%s" , k , v ))
774- }
775- return strings .Join (labels , "," )
776- }
777-
778757type LoadBalancer struct {
779758 Enabled bool `yaml:"enabled"`
780759 Names []string `yaml:"names"`
@@ -1105,6 +1084,14 @@ func (c Cluster) NestedStackName() string {
11051084 return strings .Title (strings .Replace (c .StackName (), "-" , "" , - 1 ))
11061085}
11071086
1087+ func (c Cluster ) NodeLabels () model.NodeLabels {
1088+ labels := c .Experimental .NodeLabels
1089+ if c .Addons .ClusterAutoscaler .Enabled {
1090+ labels ["kube-aws.coreos.com/cluster-autoscaler-supported" ] = "true"
1091+ }
1092+ return labels
1093+ }
1094+
11081095// Etcdadm returns the content of the etcdadm script to be embedded into cloud-config-etcd
11091096func (c * Config ) Etcdadm () (string , error ) {
11101097 return gzipcompressor .CompressData (Etcdadm )
0 commit comments