github.com/kubernetes-incubator/kube-aws@v0.16.4/pkg/api/amazon_vpc.go (about) 1 package api 2 3 import ( 4 "fmt" 5 "github.com/aws/amazon-vpc-cni-k8s/pkg/awsutils" 6 "github.com/kubernetes-incubator/kube-aws/provisioner" 7 ) 8 9 type AmazonVPC struct { 10 Enabled bool `yaml:"enabled"` 11 } 12 13 func (a AmazonVPC) MaxPodsScript() provisioner.Content { 14 script := `#!/usr/bin/env bash 15 16 set -e 17 18 declare -A instance_eni_available 19 ` 20 21 for it, num := range awsutils.InstanceENIsAvailable { 22 script = script + fmt.Sprintf(`instance_eni_available["%s"]=%d 23 `, it, num) 24 } 25 26 script = script + ` 27 declare -A instance_ip_available 28 ` 29 for it, num := range awsutils.InstanceIPsAvailable { 30 script = script + fmt.Sprintf(`instance_ip_available["%s"]=%d 31 `, it, num) 32 } 33 34 script = script + ` 35 36 instance_type=$(curl http://169.254.169.254/latest/meta-data/instance-type) 37 38 enis=${instance_eni_available["$instance_type"]} 39 40 if [ "" == "$enis" ]; then 41 echo "unsupported instance type: no enis_per_eni defined: $instance_type" 1>&2 42 exit 1 43 fi 44 45 # According to https://github.com/aws/amazon-vpc-cni-k8s#eni-allocation 46 ips_per_eni=${instance_ip_available["$instance_type"]} 47 48 if [ "" == "$ips_per_eni" ]; then 49 echo "unsupported instance type: no ips_per_eni defined: $instance_type" 1>&2 50 exit 1 51 fi 52 53 max_pods=$(( (enis * (ips_per_eni - 1)) + 2 )) 54 55 printf $max_pods 56 ` 57 return provisioner.NewBinaryContent([]byte(script)) 58 }