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  }