mirror of https://github.com/kubernetes/kops.git
				
				
				
			Merge pull request #7221 from srikiz/DO-7148-legacyetcdSupport
[Issue-7148] Legacyetcd support for Digital Ocean
This commit is contained in:
		
						commit
						039cee170f
					
				|  | @ -24,8 +24,9 @@ export S3_ENDPOINT=nyc3.digitaloceanspaces.com # this can also be ams3.digitaloc | ||||||
| export S3_ACCESS_KEY_ID=<access-key-id>  # where <access-key-id> is the Spaces API Access Key for your bucket | export S3_ACCESS_KEY_ID=<access-key-id>  # where <access-key-id> is the Spaces API Access Key for your bucket | ||||||
| export S3_SECRET_ACCESS_KEY=<secret-key>  # where <secret-key> is the Spaces API Secret Key for your bucket | export S3_SECRET_ACCESS_KEY=<secret-key>  # where <secret-key> is the Spaces API Secret Key for your bucket | ||||||
| 
 | 
 | ||||||
| # this is required since DigitalOcean support is currently in alpha so it is feature gated | # this is required since DigitalOcean support is currently in alpha so it is feature gated, also need Override flag to use legacy etcd. | ||||||
| export KOPS_FEATURE_FLAGS="AlphaAllowDO" | # we will eventually support etcdmanager, but until then, we need to specify this flag. | ||||||
|  | export KOPS_FEATURE_FLAGS="AlphaAllowDO,+SpecOverrideFlag" | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## Creating a Cluster | ## Creating a Cluster | ||||||
|  | @ -35,15 +36,15 @@ Note that you kops will only be able to successfully provision clusters in regio | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| # coreos (the default) + flannel overlay cluster in tor1 | # coreos (the default) + flannel overlay cluster in tor1 | ||||||
| kops create cluster --cloud=digitalocean --name=my-cluster.example.com --networking=flannel --zones=tor1 --ssh-public-key=~/.ssh/id_rsa.pub | kops create cluster --cloud=digitalocean --name=my-cluster.example.com --networking=flannel --zones=tor1 --ssh-public-key=~/.ssh/id_rsa.pub --override cluster.spec.etcdClusters[*].provider=Legacy | ||||||
| kops update cluster my-cluster.example.com --yes | kops update cluster my-cluster.example.com --yes | ||||||
| 
 | 
 | ||||||
| # ubuntu + weave overlay cluster in nyc1 using larger droplets | # ubuntu + weave overlay cluster in nyc1 using larger droplets | ||||||
| kops create cluster --cloud=digitalocean --name=my-cluster.example.com --image=ubuntu-16-04-x64 --networking=weave --zones=nyc1 --ssh-public-key=~/.ssh/id_rsa.pub --node-size=s-8vcpu-32gb | kops create cluster --cloud=digitalocean --name=my-cluster.example.com --image=ubuntu-16-04-x64 --networking=weave --zones=nyc1 --ssh-public-key=~/.ssh/id_rsa.pub --node-size=s-8vcpu-32gb --override cluster.spec.etcdClusters[*].provider=Legacy | ||||||
| kops update cluster my-cluster.example.com --yes | kops update cluster my-cluster.example.com --yes | ||||||
| 
 | 
 | ||||||
| # debian + flannel overlay cluster in ams3 using optimized droplets | # debian + flannel overlay cluster in ams3 using optimized droplets | ||||||
| kops create cluster --cloud=digitalocean --name=my-cluster.example.com --image=debian-9-x64 --networking=flannel --zones=ams3 --ssh-public-key=~/.ssh/id_rsa.pub --node-size=c-4 | kops create cluster --cloud=digitalocean --name=my-cluster.example.com --image=debian-9-x64 --networking=flannel --zones=ams3 --ssh-public-key=~/.ssh/id_rsa.pub --node-size=c-4 --override cluster.spec.etcdClusters[*].provider=Legacy | ||||||
| kops update cluster my-cluster.example.com --yes | kops update cluster my-cluster.example.com --yes | ||||||
| 
 | 
 | ||||||
| # to delete a cluster | # to delete a cluster | ||||||
|  |  | ||||||
|  | @ -20,6 +20,7 @@ go_library( | ||||||
|         "//pkg/urls:go_default_library", |         "//pkg/urls:go_default_library", | ||||||
|         "//upup/pkg/fi:go_default_library", |         "//upup/pkg/fi:go_default_library", | ||||||
|         "//upup/pkg/fi/cloudup/awsup:go_default_library", |         "//upup/pkg/fi/cloudup/awsup:go_default_library", | ||||||
|  |         "//upup/pkg/fi/cloudup/do:go_default_library", | ||||||
|         "//upup/pkg/fi/cloudup/gce:go_default_library", |         "//upup/pkg/fi/cloudup/gce:go_default_library", | ||||||
|         "//upup/pkg/fi/fitasks:go_default_library", |         "//upup/pkg/fi/fitasks:go_default_library", | ||||||
|         "//upup/pkg/fi/loader:go_default_library", |         "//upup/pkg/fi/loader:go_default_library", | ||||||
|  |  | ||||||
|  | @ -39,6 +39,7 @@ import ( | ||||||
| 	"k8s.io/kops/pkg/model" | 	"k8s.io/kops/pkg/model" | ||||||
| 	"k8s.io/kops/upup/pkg/fi" | 	"k8s.io/kops/upup/pkg/fi" | ||||||
| 	"k8s.io/kops/upup/pkg/fi/cloudup/awsup" | 	"k8s.io/kops/upup/pkg/fi/cloudup/awsup" | ||||||
|  | 	"k8s.io/kops/upup/pkg/fi/cloudup/do" | ||||||
| 	"k8s.io/kops/upup/pkg/fi/cloudup/gce" | 	"k8s.io/kops/upup/pkg/fi/cloudup/gce" | ||||||
| 	"k8s.io/kops/upup/pkg/fi/fitasks" | 	"k8s.io/kops/upup/pkg/fi/fitasks" | ||||||
| 	"k8s.io/kops/util/pkg/exec" | 	"k8s.io/kops/util/pkg/exec" | ||||||
|  | @ -380,6 +381,16 @@ func (b *EtcdManagerBuilder) buildPod(etcdCluster *kops.EtcdClusterSpec) (*v1.Po | ||||||
| 			} | 			} | ||||||
| 			config.VolumeNameTag = gce.GceLabelNameEtcdClusterPrefix + etcdCluster.Name | 			config.VolumeNameTag = gce.GceLabelNameEtcdClusterPrefix + etcdCluster.Name | ||||||
| 
 | 
 | ||||||
|  | 		case kops.CloudProviderDO: | ||||||
|  | 			config.VolumeProvider = "do" | ||||||
|  | 
 | ||||||
|  | 			config.VolumeTag = []string{ | ||||||
|  | 				fmt.Sprintf("kubernetes.io/cluster/%s=owned", b.Cluster.Name), | ||||||
|  | 				do.TagNameEtcdClusterPrefix + etcdCluster.Name, | ||||||
|  | 				do.TagNameRolePrefix + "master=1", | ||||||
|  | 			} | ||||||
|  | 			config.VolumeNameTag = do.TagNameEtcdClusterPrefix + etcdCluster.Name | ||||||
|  | 
 | ||||||
| 		default: | 		default: | ||||||
| 			return nil, fmt.Errorf("CloudProvider %q not supported with etcd-manager", b.Cluster.Spec.CloudProvider) | 			return nil, fmt.Errorf("CloudProvider %q not supported with etcd-manager", b.Cluster.Spec.CloudProvider) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -47,11 +47,10 @@ spec: | ||||||
|           operator: Exists |           operator: Exists | ||||||
|           tolerationSeconds: 300 |           tolerationSeconds: 300 | ||||||
|       containers: |       containers: | ||||||
|       - image: digitalocean/digitalocean-cloud-controller-manager:v0.1.7 |       - image: digitalocean/digitalocean-cloud-controller-manager:v0.1.15 | ||||||
|         name: digitalocean-cloud-controller-manager |         name: digitalocean-cloud-controller-manager | ||||||
|         command: |         command: | ||||||
|           - "/bin/digitalocean-cloud-controller-manager" |           - "/bin/digitalocean-cloud-controller-manager" | ||||||
|           - "--cloud-provider=digitalocean" |  | ||||||
|           - "--leader-elect=true" |           - "--leader-elect=true" | ||||||
|         resources: |         resources: | ||||||
|           requests: |           requests: | ||||||
|  |  | ||||||
|  | @ -38,6 +38,8 @@ const ( | ||||||
| 	// https://en.wikipedia.org/wiki/Reserved_IP_addresses
 | 	// https://en.wikipedia.org/wiki/Reserved_IP_addresses
 | ||||||
| 	PlaceholderIP  = "203.0.113.123" | 	PlaceholderIP  = "203.0.113.123" | ||||||
| 	PlaceholderTTL = 10 | 	PlaceholderTTL = 10 | ||||||
|  | 	// DigitalOcean's DNS servers require a certain minimum TTL (it's 30), keeping 60 here.
 | ||||||
|  | 	PlaceholderTTLDigitialOcean = 60 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func findZone(cluster *kops.Cluster, cloud fi.Cloud) (dnsprovider.Zone, error) { | func findZone(cluster *kops.Cluster, cloud fi.Cloud) (dnsprovider.Zone, error) { | ||||||
|  | @ -228,7 +230,12 @@ func precreateDNS(cluster *kops.Cluster, cloud fi.Cloud) error { | ||||||
| 
 | 
 | ||||||
| 		klog.V(2).Infof("Pre-creating DNS record %s => %s", dnsHostname, PlaceholderIP) | 		klog.V(2).Infof("Pre-creating DNS record %s => %s", dnsHostname, PlaceholderIP) | ||||||
| 
 | 
 | ||||||
| 		changeset.Add(rrs.New(dnsHostname, []string{PlaceholderIP}, PlaceholderTTL, rrstype.A)) | 		if cloud.ProviderID() == kops.CloudProviderDO { | ||||||
|  | 			changeset.Add(rrs.New(dnsHostname, []string{PlaceholderIP}, PlaceholderTTLDigitialOcean, rrstype.A)) | ||||||
|  | 		} else { | ||||||
|  | 			changeset.Add(rrs.New(dnsHostname, []string{PlaceholderIP}, PlaceholderTTL, rrstype.A)) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		created = append(created, dnsHostname) | 		created = append(created, dnsHostname) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -21,6 +21,9 @@ import ( | ||||||
| 	"k8s.io/kops/upup/pkg/fi" | 	"k8s.io/kops/upup/pkg/fi" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | const TagNameEtcdClusterPrefix = "k8s.io/etcd/" | ||||||
|  | const TagNameRolePrefix = "k8s.io/role/" | ||||||
|  | 
 | ||||||
| func NewDOCloud(region string) (fi.Cloud, error) { | func NewDOCloud(region string) (fi.Cloud, error) { | ||||||
| 	return digitalocean.NewCloud(region) | 	return digitalocean.NewCloud(region) | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue