vsphere initial support.

This commit is contained in:
SandeepPissay 2017-03-03 16:26:11 -08:00 committed by Miao Luo
parent 4f71f49e71
commit 82f9f0668d
10 changed files with 80 additions and 0 deletions

View File

@ -208,6 +208,8 @@ func (t *ProtokubeBuilder) ProtokubeFlags(k8sVersion semver.Version) *ProtokubeF
f.DNSProvider = fi.String("aws-route53")
case fi.CloudProviderGCE:
f.DNSProvider = fi.String("google-clouddns")
case fi.CloudProviderVSphere:
f.DNSProvider = fi.String("aws-route53")
default:
glog.Warningf("Unknown cloudprovider %q; won't set DNS provider")
}

View File

@ -104,6 +104,9 @@ func (b *KubeControllerManagerOptionsBuilder) BuildOptions(o interface{}) error
kcm.CloudProvider = "gce"
kcm.ClusterName = gce.SafeClusterName(b.Context.ClusterName)
case fi.CloudProviderVSphere:
kcm.CloudProvider = "vsphere"
default:
return fmt.Errorf("unknown cloud provider %q", clusterSpec.CloudProvider)
}

View File

@ -21,6 +21,7 @@ import (
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/loader"
"strings"
"github.com/golang/glog"
)
// KubeletOptionsBuilder adds options for kubelets
@ -156,6 +157,19 @@ func (b *KubeletOptionsBuilder) BuildOptions(o interface{}) error {
clusterSpec.CloudConfig.NodeTags = fi.String(GCETagForRole(b.Context.ClusterName, kops.InstanceGroupRoleNode))
}
if cloudProvider == fi.CloudProviderVSphere {
glog.Info("In kubenet for vsphere cloud provider")
clusterSpec.Kubelet.CloudProvider = "vsphere"
clusterSpec.Kubelet.HairpinMode = "vmw-bridge"
if clusterSpec.CloudConfig == nil {
clusterSpec.CloudConfig = &kops.CloudConfiguration{}
}
clusterSpec.CloudConfig.Multizone = fi.Bool(true)
var vsphere_node_tag = "vsphere_node_tag"
clusterSpec.CloudConfig.NodeTags = &vsphere_node_tag
}
usesKubenet, err := UsesKubenet(clusterSpec)
if err != nil {
return err

View File

@ -22,6 +22,7 @@ type CloudProviderID string
const CloudProviderAWS CloudProviderID = "aws"
const CloudProviderGCE CloudProviderID = "gce"
const CloudProviderVSphere CloudProviderID = "vsphere"
type Cloud interface {
ProviderID() CloudProviderID

View File

@ -37,6 +37,7 @@ import (
"k8s.io/kops/pkg/model/awsmodel"
"k8s.io/kops/pkg/model/components"
"k8s.io/kops/pkg/model/gcemodel"
"k8s.io/kops/pkg/model/vspheremodel"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/awstasks"
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
@ -44,6 +45,8 @@ import (
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
"k8s.io/kops/upup/pkg/fi/cloudup/gcetasks"
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
"k8s.io/kops/upup/pkg/fi/cloudup/vsphere"
"k8s.io/kops/upup/pkg/fi/cloudup/vspheretasks"
"k8s.io/kops/upup/pkg/fi/fitasks"
"k8s.io/kops/util/pkg/hashing"
"k8s.io/kops/util/pkg/vfs"
@ -359,6 +362,20 @@ func (c *ApplyClusterCmd) Run() error {
l.TemplateFunctions["MachineTypeInfo"] = awsup.GetMachineTypeInfo
}
case fi.CloudProviderVSphere:
{
vsphereCloud := cloud.(*vsphere.VSphereCloud)
region = vsphereCloud.Region
//if !AlphaAllowGCE.Enabled() {
// return fmt.Errorf("GCE support is currently alpha, and is feature-gated. export KOPS_FEATURE_FLAGS=AlphaAllowGCE")
//}
l.AddTypes(map[string]interface{}{
"instance": &vspheretasks.VirtualMachine{},
})
}
default:
return fmt.Errorf("unknown CloudProvider %q", cluster.Spec.CloudProvider)
}
@ -441,6 +458,13 @@ func (c *ApplyClusterCmd) Run() error {
&gcemodel.NetworkModelBuilder{GCEModelContext: gceModelContext},
//&model.SSHKeyModelBuilder{KopsModelContext: modelContext},
)
case fi.CloudProviderVSphere:
vsphereModelContext := &vspheremodel.VSphereModelContext{
KopsModelContext: modelContext,
}
l.Builders = append(l.Builders,
&vspheremodel.VirtualMachineModelBuilder{VSphereModelContext: vsphereModelContext})
default:
return fmt.Errorf("unknown cloudprovider %q", cluster.Spec.CloudProvider)
@ -565,6 +589,17 @@ func (c *ApplyClusterCmd) Run() error {
BootstrapScript: bootstrapScriptBuilder,
})
}
case fi.CloudProviderVSphere:
{
vsphereModelContext := &vspheremodel.VSphereModelContext{
KopsModelContext: modelContext,
}
l.Builders = append(l.Builders, &vspheremodel.AutoscalingGroupModelBuilder{
VSphereModelContext: vsphereModelContext,
BootstrapScript: bootstrapScriptBuilder,
})
}
default:
return fmt.Errorf("unknown cloudprovider %q", cluster.Spec.CloudProvider)

View File

@ -33,12 +33,15 @@ import (
const (
defaultNodeMachineTypeAWS = "t2.medium"
defaultNodeMachineTypeGCE = "n1-standard-2"
defaultNodeMachineTypeVSphere = "vsphere_node"
defaultBastionMachineTypeAWS = "t2.micro"
defaultBastionMachineTypeGCE = "f1-micro"
defaultBastionMachineTypeVSphere = "vsphere_bastion"
defaultMasterMachineTypeGCE = "n1-standard-1"
defaultMasterMachineTypeAWS = "m3.medium"
defaultMasterMachineTypeVSphere = "vsphere_master"
)
var masterMachineTypeExceptions = map[string]string{
@ -153,6 +156,8 @@ func defaultNodeMachineType(cluster *api.Cluster) string {
return defaultNodeMachineTypeAWS
case fi.CloudProviderGCE:
return defaultNodeMachineTypeGCE
case fi.CloudProviderVSphere:
return defaultNodeMachineTypeVSphere
default:
glog.V(2).Infof("Cannot set default MachineType for CloudProvider=%q", cluster.Spec.CloudProvider)
return ""
@ -205,6 +210,8 @@ func defaultMasterMachineType(cluster *api.Cluster) string {
return defaultMasterMachineTypeAWS
case fi.CloudProviderGCE:
return defaultMasterMachineTypeGCE
case fi.CloudProviderVSphere:
return defaultMasterMachineTypeVSphere
default:
glog.V(2).Infof("Cannot set default MachineType for CloudProvider=%q", cluster.Spec.CloudProvider)
return ""
@ -218,6 +225,8 @@ func defaultBastionMachineType(cluster *api.Cluster) string {
return defaultBastionMachineTypeAWS
case fi.CloudProviderGCE:
return defaultBastionMachineTypeGCE
case fi.CloudProviderVSphere:
return defaultBastionMachineTypeVSphere
default:
glog.V(2).Infof("Cannot set default MachineType for CloudProvider=%q", cluster.Spec.CloudProvider)
return ""

View File

@ -66,6 +66,10 @@ func buildCloudupTags(cluster *api.Cluster) (sets.String, error) {
{
tags.Insert("_aws")
}
case "vsphere":
{
tags.Insert("_vsphere")
}
default:
return nil, fmt.Errorf("unknown CloudProvider %q", cluster.Spec.CloudProvider)

View File

@ -135,6 +135,8 @@ func (tf *TemplateFunctions) DnsControllerArgv() ([]string, error) {
argv = append(argv, "--dns=aws-route53")
case fi.CloudProviderGCE:
argv = append(argv, "--dns=google-clouddns")
case fi.CloudProviderVSphere:
argv = append(argv, "--dns=aws-route53")
default:
return nil, fmt.Errorf("unhandled cloudprovider %q", tf.cluster.Spec.CloudProvider)

View File

@ -185,6 +185,10 @@ func (t *TerraformTarget) Finish(taskMap map[string]fi.Task) error {
providerAWS := make(map[string]interface{})
providerAWS["region"] = t.Region
providersByName["aws"] = providerAWS
} else if t.Cloud.ProviderID() == fi.CloudProviderVSphere {
providerVSphere := make(map[string]interface{})
providerVSphere["region"] = t.Region
providersByName["vsphere"] = providerVSphere
}
outputVariables := make(map[string]interface{})

View File

@ -25,6 +25,7 @@ import (
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
"k8s.io/kubernetes/federation/pkg/dnsprovider"
"strings"
"k8s.io/kops/upup/pkg/fi/cloudup/vsphere"
)
func BuildCloud(cluster *api.Cluster) (fi.Cloud, error) {
@ -96,6 +97,11 @@ func BuildCloud(cluster *api.Cluster) (fi.Cloud, error) {
}
cloud = awsCloud
}
case "vsphere":
{
cloud = &vsphere.VSphereCloud{}
fmt.Println("VSphere: In VSphere cloud provider")
}
default:
return nil, fmt.Errorf("unknown CloudProvider %q", cluster.Spec.CloudProvider)