mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #41710 from luxas/kubeadm_remove_cloudprovider_arg
Automatic merge from submit-queue (batch tested with PRs 41540, 41808, 41710, 41838, 41840) kubeadm: Remove the --cloud-provider flag for beta init UX **What this PR does / why we need it**: We decided the `--cloud-provider` flag promises way too much compared to what it really does. There is a lot you have to do as an user in order to make the current cloud provider integrations to work. And since we're promising to support the `kubeadm init` UX on a beta level in v1.6, we can't have this flag in the UX. A lot is gonna change here... see proposal: https://github.com/kubernetes/community/pull/128 Once we find a cloudprovider solution we can support (probably using the new flow), we'll just add it. For now, we'll just document how to do cloudprovider integrations by hand instead. **Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes # **Special notes for your reviewer**: **Release note**: ```release-note kubeadm: Remove the --cloud-provider flag for beta init UX ``` @jbeda @dmmcquay @mikedanese @roberthbailey @pires @errordeveloper
This commit is contained in:
commit
d81ba2c66f
@ -25,10 +25,26 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
|
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO: Break out the cloudprovider functionality out of core and only support the new flow
|
||||||
|
// described in https://github.com/kubernetes/community/pull/128
|
||||||
|
var cloudproviders = []string{
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"cloudstack",
|
||||||
|
"gce",
|
||||||
|
"mesos",
|
||||||
|
"openstack",
|
||||||
|
"ovirt",
|
||||||
|
"photon",
|
||||||
|
"rackspace",
|
||||||
|
"vsphere",
|
||||||
|
}
|
||||||
|
|
||||||
func ValidateMasterConfiguration(c *kubeadm.MasterConfiguration) field.ErrorList {
|
func ValidateMasterConfiguration(c *kubeadm.MasterConfiguration) field.ErrorList {
|
||||||
allErrs := field.ErrorList{}
|
allErrs := field.ErrorList{}
|
||||||
allErrs = append(allErrs, ValidateDiscovery(&c.Discovery, field.NewPath("discovery"))...)
|
allErrs = append(allErrs, ValidateDiscovery(&c.Discovery, field.NewPath("discovery"))...)
|
||||||
allErrs = append(allErrs, ValidateDiscovery(&c.Discovery, field.NewPath("service subnet"))...)
|
allErrs = append(allErrs, ValidateDiscovery(&c.Discovery, field.NewPath("service subnet"))...)
|
||||||
|
allErrs = append(allErrs, ValidateCloudProvider(c.CloudProvider, field.NewPath("cloudprovider"))...)
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,3 +107,15 @@ func ValidateServiceSubnet(subnet string, fldPath *field.Path) field.ErrorList {
|
|||||||
}
|
}
|
||||||
return field.ErrorList{}
|
return field.ErrorList{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ValidateCloudProvider(provider string, fldPath *field.Path) field.ErrorList {
|
||||||
|
if len(provider) == 0 {
|
||||||
|
return field.ErrorList{}
|
||||||
|
}
|
||||||
|
for _, supported := range cloudproviders {
|
||||||
|
if provider == supported {
|
||||||
|
return field.ErrorList{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return field.ErrorList{field.Invalid(fldPath, nil, "cloudprovider not supported")}
|
||||||
|
}
|
||||||
|
@ -71,6 +71,30 @@ func TestValidateServiceSubnet(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestValidateCloudProvider(t *testing.T) {
|
||||||
|
var tests = []struct {
|
||||||
|
s string
|
||||||
|
f *field.Path
|
||||||
|
expected bool
|
||||||
|
}{
|
||||||
|
{"", nil, true}, // if not provided, ok, it's optional
|
||||||
|
{"1234", nil, false}, // not supported
|
||||||
|
{"awws", nil, false}, // not supported
|
||||||
|
{"aws", nil, true}, // supported
|
||||||
|
{"gce", nil, true}, // supported
|
||||||
|
}
|
||||||
|
for _, rt := range tests {
|
||||||
|
actual := ValidateCloudProvider(rt.s, rt.f)
|
||||||
|
if (len(actual) == 0) != rt.expected {
|
||||||
|
t.Errorf(
|
||||||
|
"failed ValidateCloudProvider:\n\texpected: %t\n\t actual: %t",
|
||||||
|
rt.expected,
|
||||||
|
(len(actual) == 0),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestValidateMasterConfiguration(t *testing.T) {
|
func TestValidateMasterConfiguration(t *testing.T) {
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
s *kubeadm.MasterConfiguration
|
s *kubeadm.MasterConfiguration
|
||||||
|
@ -24,7 +24,6 @@ go_library(
|
|||||||
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
||||||
"//cmd/kubeadm/app/apis/kubeadm/v1alpha1:go_default_library",
|
"//cmd/kubeadm/app/apis/kubeadm/v1alpha1:go_default_library",
|
||||||
"//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library",
|
"//cmd/kubeadm/app/apis/kubeadm/validation:go_default_library",
|
||||||
"//cmd/kubeadm/app/cmd/flags:go_default_library",
|
|
||||||
"//cmd/kubeadm/app/constants:go_default_library",
|
"//cmd/kubeadm/app/constants:go_default_library",
|
||||||
"//cmd/kubeadm/app/discovery:go_default_library",
|
"//cmd/kubeadm/app/discovery:go_default_library",
|
||||||
"//cmd/kubeadm/app/master:go_default_library",
|
"//cmd/kubeadm/app/master:go_default_library",
|
||||||
@ -79,9 +78,6 @@ filegroup(
|
|||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "all-srcs",
|
name = "all-srcs",
|
||||||
srcs = [
|
srcs = [":package-srcs"],
|
||||||
":package-srcs",
|
|
||||||
"//cmd/kubeadm/app/cmd/flags:all-srcs",
|
|
||||||
],
|
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
)
|
)
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
licenses(["notice"])
|
|
||||||
|
|
||||||
load(
|
|
||||||
"@io_bazel_rules_go//go:def.bzl",
|
|
||||||
"go_library",
|
|
||||||
)
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = ["cloudprovider.go"],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
deps = ["//vendor:github.com/spf13/pflag"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "package-srcs",
|
|
||||||
srcs = glob(["**"]),
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "all-srcs",
|
|
||||||
srcs = [":package-srcs"],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
)
|
|
@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2016 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package flags
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/spf13/pflag"
|
|
||||||
)
|
|
||||||
|
|
||||||
var cloudproviders = []string{
|
|
||||||
"aws",
|
|
||||||
"azure",
|
|
||||||
"cloudstack",
|
|
||||||
"gce",
|
|
||||||
"mesos",
|
|
||||||
"openstack",
|
|
||||||
"ovirt",
|
|
||||||
"photon",
|
|
||||||
"rackspace",
|
|
||||||
"vsphere",
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewCloudProviderFlag(provider *string) pflag.Value {
|
|
||||||
return &cloudProviderValue{provider: provider}
|
|
||||||
}
|
|
||||||
|
|
||||||
type cloudProviderValue struct {
|
|
||||||
provider *string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cloudProviderValue) String() string {
|
|
||||||
return *c.provider
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cloudProviderValue) Set(s string) error {
|
|
||||||
if ValidateCloudProvider(s) {
|
|
||||||
*c.provider = s
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Errorf("cloud provider %q is not supported, you can use any of %v", s, cloudproviders)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cloudProviderValue) Type() string {
|
|
||||||
return "cloudprovider"
|
|
||||||
}
|
|
||||||
|
|
||||||
func ValidateCloudProvider(provider string) bool {
|
|
||||||
for _, supported := range cloudproviders {
|
|
||||||
if provider == supported {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
@ -30,7 +30,6 @@ import (
|
|||||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||||
kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1"
|
kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/flags"
|
|
||||||
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/discovery"
|
"k8s.io/kubernetes/cmd/kubeadm/app/discovery"
|
||||||
kubemaster "k8s.io/kubernetes/cmd/kubeadm/app/master"
|
kubemaster "k8s.io/kubernetes/cmd/kubeadm/app/master"
|
||||||
@ -106,11 +105,6 @@ func NewCmdInit(out io.Writer) *cobra.Command {
|
|||||||
&cfg.Networking.DNSDomain, "service-dns-domain", cfg.Networking.DNSDomain,
|
&cfg.Networking.DNSDomain, "service-dns-domain", cfg.Networking.DNSDomain,
|
||||||
`Use alternative domain for services, e.g. "myorg.internal"`,
|
`Use alternative domain for services, e.g. "myorg.internal"`,
|
||||||
)
|
)
|
||||||
cmd.PersistentFlags().Var(
|
|
||||||
flags.NewCloudProviderFlag(&cfg.CloudProvider), "cloud-provider",
|
|
||||||
`Enable cloud provider features (external load-balancers, storage, etc). Note that you have to configure all kubelets manually`,
|
|
||||||
)
|
|
||||||
|
|
||||||
cmd.PersistentFlags().StringVar(
|
cmd.PersistentFlags().StringVar(
|
||||||
&cfg.KubernetesVersion, "use-kubernetes-version", cfg.KubernetesVersion,
|
&cfg.KubernetesVersion, "use-kubernetes-version", cfg.KubernetesVersion,
|
||||||
`Choose a specific Kubernetes version for the control plane`,
|
`Choose a specific Kubernetes version for the control plane`,
|
||||||
|
Loading…
Reference in New Issue
Block a user