diff --git a/cmd/kubeadm/app/cmd/phases/join/BUILD b/cmd/kubeadm/app/cmd/phases/join/BUILD index f9eed0bb11..7113ef4c52 100644 --- a/cmd/kubeadm/app/cmd/phases/join/BUILD +++ b/cmd/kubeadm/app/cmd/phases/join/BUILD @@ -16,7 +16,6 @@ go_library( "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/cmd/options:go_default_library", "//cmd/kubeadm/app/cmd/phases/workflow:go_default_library", - "//cmd/kubeadm/app/cmd/util:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", "//cmd/kubeadm/app/phases/certs:go_default_library", "//cmd/kubeadm/app/phases/controlplane:go_default_library", diff --git a/cmd/kubeadm/app/cmd/phases/join/controlplanejoin.go b/cmd/kubeadm/app/cmd/phases/join/controlplanejoin.go index 3c10dc78f6..56d4924f8c 100644 --- a/cmd/kubeadm/app/cmd/phases/join/controlplanejoin.go +++ b/cmd/kubeadm/app/cmd/phases/join/controlplanejoin.go @@ -22,7 +22,6 @@ import ( "github.com/pkg/errors" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" - cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" etcdphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/etcd" markcontrolplanephase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markcontrolplane" @@ -30,21 +29,21 @@ import ( "k8s.io/kubernetes/pkg/util/normalizer" ) -var ( - controlPlaneJoinExample = normalizer.Examples(` - # Joins a machine as a control plane instance - kubeadm join phase control-plane-join all - `) -) +var controlPlaneJoinExample = normalizer.Examples(` + # Joins a machine as a control plane instance + kubeadm join phase control-plane-join all +`) -func getControlPlaneJoinPhaseFlags() []string { - return []string{ - options.APIServerAdvertiseAddress, - options.APIServerBindPort, +func getControlPlaneJoinPhaseFlags(name string) []string { + flags := []string{ options.CfgPath, options.ControlPlane, options.NodeName, } + if name != "mark-control-plane" { + flags = append(flags, options.APIServerAdvertiseAddress) + } + return flags } // NewControlPlaneJoinPhase creates a kubeadm workflow phase that implements joining a machine as a control plane instance @@ -52,13 +51,12 @@ func NewControlPlaneJoinPhase() workflow.Phase { return workflow.Phase{ Name: "control-plane-join", Short: "Joins a machine as a control plane instance", - Long: cmdutil.MacroCommandLongDescription, Example: controlPlaneJoinExample, Phases: []workflow.Phase{ { Name: "all", Short: "Joins a machine as a control plane instance", - InheritFlags: getControlPlaneJoinPhaseFlags(), + InheritFlags: getControlPlaneJoinPhaseFlags("all"), RunAllSiblings: true, }, newEtcdLocalSubphase(), @@ -73,7 +71,7 @@ func newEtcdLocalSubphase() workflow.Phase { Name: "etcd", Short: "Add a new local etcd member", Run: runEtcdPhase, - InheritFlags: getControlPlaneJoinPhaseFlags(), + InheritFlags: getControlPlaneJoinPhaseFlags("etcd"), } } @@ -86,7 +84,7 @@ func newUpdateStatusSubphase() workflow.Phase { kubeadmconstants.KubeadmConfigConfigMap, ), Run: runUpdateStatusPhase, - InheritFlags: getControlPlaneJoinPhaseFlags(), + InheritFlags: getControlPlaneJoinPhaseFlags("update-status"), } } @@ -95,7 +93,7 @@ func newMarkControlPlaneSubphase() workflow.Phase { Name: "mark-control-plane", Short: "Mark a node as a control-plane", Run: runMarkControlPlanePhase, - InheritFlags: getControlPlaneJoinPhaseFlags(), + InheritFlags: getControlPlaneJoinPhaseFlags("mark-control-plane"), } } diff --git a/cmd/kubeadm/app/cmd/phases/join/controlplaneprepare.go b/cmd/kubeadm/app/cmd/phases/join/controlplaneprepare.go index 17f3e7a1b0..80dbfaddc2 100644 --- a/cmd/kubeadm/app/cmd/phases/join/controlplaneprepare.go +++ b/cmd/kubeadm/app/cmd/phases/join/controlplaneprepare.go @@ -31,13 +31,20 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/phases/copycerts" kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig" kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" + "k8s.io/kubernetes/pkg/util/normalizer" ) +var controlPlanePrepareExample = normalizer.Examples(` + # Prepares the machine for serving a control plane + kubeadm join phase control-plane-prepare all +`) + // NewControlPlanePreparePhase creates a kubeadm workflow phase that implements the preparation of the node to serve a control plane func NewControlPlanePreparePhase() workflow.Phase { return workflow.Phase{ - Name: "control-plane-prepare", - Short: "Prepares the machine for serving a control plane.", + Name: "control-plane-prepare", + Short: "Prepares the machine for serving a control plane.", + Example: controlPlanePrepareExample, Phases: []workflow.Phase{ { Name: "all [api-server-endpoint]", @@ -48,33 +55,75 @@ func NewControlPlanePreparePhase() workflow.Phase { newControlPlanePrepareDownloadCertsSubphase(), newControlPlanePrepareCertsSubphase(), newControlPlanePrepareKubeconfigSubphase(), - newControlPlanePrepareManifestsSubphases(), + newControlPlanePrepareControlPlaneSubphase(), }, } } func getControlPlanePreparePhaseFlags(name string) []string { - flags := []string{ - options.APIServerAdvertiseAddress, - options.APIServerBindPort, - options.CfgPath, - options.ControlPlane, - options.NodeName, - } - if name != "manifests" { - flags = append(flags, + var flags []string + switch name { + case "all": + flags = []string{ + options.APIServerAdvertiseAddress, + options.APIServerBindPort, + options.CfgPath, + options.ControlPlane, + options.NodeName, options.FileDiscovery, options.TokenDiscovery, options.TokenDiscoveryCAHash, options.TokenDiscoverySkipCAHash, options.TLSBootstrapToken, options.TokenStr, - ) - } - if name == "all" || name == "download-certs" { - flags = append(flags, options.CertificateKey, - ) + } + case "download-certs": + flags = []string{ + options.CfgPath, + options.ControlPlane, + options.FileDiscovery, + options.TokenDiscovery, + options.TokenDiscoveryCAHash, + options.TokenDiscoverySkipCAHash, + options.TLSBootstrapToken, + options.TokenStr, + options.CertificateKey, + } + case "certs": + flags = []string{ + options.APIServerAdvertiseAddress, + options.CfgPath, + options.ControlPlane, + options.NodeName, + options.FileDiscovery, + options.TokenDiscovery, + options.TokenDiscoveryCAHash, + options.TokenDiscoverySkipCAHash, + options.TLSBootstrapToken, + options.TokenStr, + } + case "kubeconfig": + flags = []string{ + options.CfgPath, + options.ControlPlane, + options.FileDiscovery, + options.TokenDiscovery, + options.TokenDiscoveryCAHash, + options.TokenDiscoverySkipCAHash, + options.TLSBootstrapToken, + options.TokenStr, + options.CertificateKey, + } + case "control-plane": + flags = []string{ + options.APIServerAdvertiseAddress, + options.APIServerBindPort, + options.CfgPath, + options.ControlPlane, + } + default: + flags = []string{} } return flags } @@ -106,16 +155,16 @@ func newControlPlanePrepareKubeconfigSubphase() workflow.Phase { } } -func newControlPlanePrepareManifestsSubphases() workflow.Phase { +func newControlPlanePrepareControlPlaneSubphase() workflow.Phase { return workflow.Phase{ Name: "control-plane", Short: "Generates the manifests for the new control plane components", - Run: runControlPlanePrepareManifestsSubphase, //NB. eventually in future we would like to break down this in sub phases for each component - InheritFlags: getControlPlanePreparePhaseFlags("manifests"), + Run: runControlPlanePrepareControlPlaneSubphase, //NB. eventually in future we would like to break down this in sub phases for each component + InheritFlags: getControlPlanePreparePhaseFlags("control-plane"), } } -func runControlPlanePrepareManifestsSubphase(c workflow.RunData) error { +func runControlPlanePrepareControlPlaneSubphase(c workflow.RunData) error { data, ok := c.(JoinData) if !ok { return errors.New("control-plane-prepare phase invoked with an invalid data struct")