mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #42783 from xilabao/add-extra-args-validate
Automatic merge from submit-queue (batch tested with PRs 48196, 42783, 48507, 47719, 46138) add extra args validate `ExtraArgsCheck` return warnings not errors. because kubeadm may create the newer version control plane, there are new arguments that kubeadm doesn't know.
This commit is contained in:
commit
b44a084ad3
@ -13,15 +13,19 @@ go_library(
|
|||||||
srcs = ["checks.go"],
|
srcs = ["checks.go"],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
|
"//cmd/kube-apiserver/app/options:go_default_library",
|
||||||
|
"//cmd/kube-controller-manager/app/options:go_default_library",
|
||||||
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
||||||
"//cmd/kubeadm/app/constants:go_default_library",
|
"//cmd/kubeadm/app/constants:go_default_library",
|
||||||
"//pkg/api/validation:go_default_library",
|
"//pkg/api/validation:go_default_library",
|
||||||
"//pkg/kubeapiserver/authorizer/modes:go_default_library",
|
"//pkg/kubeapiserver/authorizer/modes:go_default_library",
|
||||||
"//pkg/util/initsystem:go_default_library",
|
"//pkg/util/initsystem:go_default_library",
|
||||||
"//pkg/util/node:go_default_library",
|
"//pkg/util/node:go_default_library",
|
||||||
|
"//plugin/cmd/kube-scheduler/app/options:go_default_library",
|
||||||
"//test/e2e_node/system:go_default_library",
|
"//test/e2e_node/system:go_default_library",
|
||||||
"//vendor/github.com/PuerkitoBio/purell:go_default_library",
|
"//vendor/github.com/PuerkitoBio/purell:go_default_library",
|
||||||
"//vendor/github.com/blang/semver:go_default_library",
|
"//vendor/github.com/blang/semver:go_default_library",
|
||||||
|
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -35,15 +35,19 @@ import (
|
|||||||
|
|
||||||
"github.com/PuerkitoBio/purell"
|
"github.com/PuerkitoBio/purell"
|
||||||
"github.com/blang/semver"
|
"github.com/blang/semver"
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
|
apiservoptions "k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
||||||
|
cmoptions "k8s.io/kubernetes/cmd/kube-controller-manager/app/options"
|
||||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||||
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation"
|
||||||
authzmodes "k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
|
authzmodes "k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
|
||||||
"k8s.io/kubernetes/pkg/util/initsystem"
|
"k8s.io/kubernetes/pkg/util/initsystem"
|
||||||
"k8s.io/kubernetes/pkg/util/node"
|
"k8s.io/kubernetes/pkg/util/node"
|
||||||
|
schoptions "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options"
|
||||||
"k8s.io/kubernetes/test/e2e_node/system"
|
"k8s.io/kubernetes/test/e2e_node/system"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -313,6 +317,46 @@ func (hst HTTPProxyCheck) Check() (warnings, errors []error) {
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExtraArgsCheck checks if arguments are valid.
|
||||||
|
type ExtraArgsCheck struct {
|
||||||
|
APIServerExtraArgs map[string]string
|
||||||
|
ControllerManagerExtraArgs map[string]string
|
||||||
|
SchedulerExtraArgs map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (eac ExtraArgsCheck) Check() (warnings, errors []error) {
|
||||||
|
argsCheck := func(name string, args map[string]string, f *pflag.FlagSet) []error {
|
||||||
|
errs := []error{}
|
||||||
|
for k, v := range args {
|
||||||
|
if err := f.Set(k, v); err != nil {
|
||||||
|
errs = append(errs, fmt.Errorf("%s: failed to parse extra argument --%s=%s", name, k, v))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errs
|
||||||
|
}
|
||||||
|
|
||||||
|
warnings = []error{}
|
||||||
|
if len(eac.APIServerExtraArgs) > 0 {
|
||||||
|
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
|
||||||
|
s := apiservoptions.NewServerRunOptions()
|
||||||
|
s.AddFlags(flags)
|
||||||
|
warnings = append(warnings, argsCheck("kube-apiserver", eac.APIServerExtraArgs, flags)...)
|
||||||
|
}
|
||||||
|
if len(eac.ControllerManagerExtraArgs) > 0 {
|
||||||
|
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
|
||||||
|
s := cmoptions.NewCMServer()
|
||||||
|
s.AddFlags(flags, []string{}, []string{})
|
||||||
|
warnings = append(warnings, argsCheck("kube-controller-manager", eac.ControllerManagerExtraArgs, flags)...)
|
||||||
|
}
|
||||||
|
if len(eac.SchedulerExtraArgs) > 0 {
|
||||||
|
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
|
||||||
|
s := schoptions.NewSchedulerServer()
|
||||||
|
s.AddFlags(flags)
|
||||||
|
warnings = append(warnings, argsCheck("kube-scheduler", eac.SchedulerExtraArgs, flags)...)
|
||||||
|
}
|
||||||
|
return warnings, nil
|
||||||
|
}
|
||||||
|
|
||||||
type SystemVerificationCheck struct{}
|
type SystemVerificationCheck struct{}
|
||||||
|
|
||||||
func (sysver SystemVerificationCheck) Check() (warnings, errors []error) {
|
func (sysver SystemVerificationCheck) Check() (warnings, errors []error) {
|
||||||
@ -514,6 +558,11 @@ func RunInitMasterChecks(cfg *kubeadmapi.MasterConfiguration) error {
|
|||||||
InPathCheck{executable: "socat", mandatory: false},
|
InPathCheck{executable: "socat", mandatory: false},
|
||||||
InPathCheck{executable: "tc", mandatory: false},
|
InPathCheck{executable: "tc", mandatory: false},
|
||||||
InPathCheck{executable: "touch", mandatory: false},
|
InPathCheck{executable: "touch", mandatory: false},
|
||||||
|
ExtraArgsCheck{
|
||||||
|
APIServerExtraArgs: cfg.APIServerExtraArgs,
|
||||||
|
ControllerManagerExtraArgs: cfg.ControllerManagerExtraArgs,
|
||||||
|
SchedulerExtraArgs: cfg.SchedulerExtraArgs,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(cfg.Etcd.Endpoints) == 0 {
|
if len(cfg.Etcd.Endpoints) == 0 {
|
||||||
|
@ -239,6 +239,17 @@ func TestRunChecks(t *testing.T) {
|
|||||||
{[]Checker{FileContentCheck{Path: "/", Content: []byte("does not exist")}}, false, ""},
|
{[]Checker{FileContentCheck{Path: "/", Content: []byte("does not exist")}}, false, ""},
|
||||||
{[]Checker{InPathCheck{executable: "foobarbaz"}}, true, "[preflight] WARNING: foobarbaz not found in system path\n"},
|
{[]Checker{InPathCheck{executable: "foobarbaz"}}, true, "[preflight] WARNING: foobarbaz not found in system path\n"},
|
||||||
{[]Checker{InPathCheck{executable: "foobarbaz", mandatory: true}}, false, ""},
|
{[]Checker{InPathCheck{executable: "foobarbaz", mandatory: true}}, false, ""},
|
||||||
|
{[]Checker{ExtraArgsCheck{
|
||||||
|
APIServerExtraArgs: map[string]string{"secure-port": "1234"},
|
||||||
|
ControllerManagerExtraArgs: map[string]string{"use-service-account-credentials": "true"},
|
||||||
|
SchedulerExtraArgs: map[string]string{"leader-elect": "true"},
|
||||||
|
}}, true, ""},
|
||||||
|
{[]Checker{ExtraArgsCheck{
|
||||||
|
APIServerExtraArgs: map[string]string{"secure-port": "foo"},
|
||||||
|
}}, true, "[preflight] WARNING: kube-apiserver: failed to parse extra argument --secure-port=foo\n"},
|
||||||
|
{[]Checker{ExtraArgsCheck{
|
||||||
|
APIServerExtraArgs: map[string]string{"invalid-argument": "foo"},
|
||||||
|
}}, true, "[preflight] WARNING: kube-apiserver: failed to parse extra argument --invalid-argument=foo\n"},
|
||||||
}
|
}
|
||||||
for _, rt := range tokenTest {
|
for _, rt := range tokenTest {
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
|
Loading…
Reference in New Issue
Block a user