mirror of https://github.com/k3s-io/k3s
Merge pull request #75013 from neolit123/fix-join-flags
kubeadm: amend flags for join phasespull/564/head
commit
0e2c26829c
|
@ -16,7 +16,6 @@ go_library(
|
||||||
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
||||||
"//cmd/kubeadm/app/cmd/options:go_default_library",
|
"//cmd/kubeadm/app/cmd/options:go_default_library",
|
||||||
"//cmd/kubeadm/app/cmd/phases/workflow: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/constants:go_default_library",
|
||||||
"//cmd/kubeadm/app/phases/certs:go_default_library",
|
"//cmd/kubeadm/app/phases/certs:go_default_library",
|
||||||
"//cmd/kubeadm/app/phases/controlplane:go_default_library",
|
"//cmd/kubeadm/app/phases/controlplane:go_default_library",
|
||||||
|
|
|
@ -22,7 +22,6 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow"
|
"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"
|
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||||
etcdphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/etcd"
|
etcdphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/etcd"
|
||||||
markcontrolplanephase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markcontrolplane"
|
markcontrolplanephase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markcontrolplane"
|
||||||
|
@ -30,21 +29,21 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/util/normalizer"
|
"k8s.io/kubernetes/pkg/util/normalizer"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var controlPlaneJoinExample = normalizer.Examples(`
|
||||||
controlPlaneJoinExample = normalizer.Examples(`
|
# Joins a machine as a control plane instance
|
||||||
# Joins a machine as a control plane instance
|
kubeadm join phase control-plane-join all
|
||||||
kubeadm join phase control-plane-join all
|
`)
|
||||||
`)
|
|
||||||
)
|
|
||||||
|
|
||||||
func getControlPlaneJoinPhaseFlags() []string {
|
func getControlPlaneJoinPhaseFlags(name string) []string {
|
||||||
return []string{
|
flags := []string{
|
||||||
options.APIServerAdvertiseAddress,
|
|
||||||
options.APIServerBindPort,
|
|
||||||
options.CfgPath,
|
options.CfgPath,
|
||||||
options.ControlPlane,
|
options.ControlPlane,
|
||||||
options.NodeName,
|
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
|
// 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{
|
return workflow.Phase{
|
||||||
Name: "control-plane-join",
|
Name: "control-plane-join",
|
||||||
Short: "Joins a machine as a control plane instance",
|
Short: "Joins a machine as a control plane instance",
|
||||||
Long: cmdutil.MacroCommandLongDescription,
|
|
||||||
Example: controlPlaneJoinExample,
|
Example: controlPlaneJoinExample,
|
||||||
Phases: []workflow.Phase{
|
Phases: []workflow.Phase{
|
||||||
{
|
{
|
||||||
Name: "all",
|
Name: "all",
|
||||||
Short: "Joins a machine as a control plane instance",
|
Short: "Joins a machine as a control plane instance",
|
||||||
InheritFlags: getControlPlaneJoinPhaseFlags(),
|
InheritFlags: getControlPlaneJoinPhaseFlags("all"),
|
||||||
RunAllSiblings: true,
|
RunAllSiblings: true,
|
||||||
},
|
},
|
||||||
newEtcdLocalSubphase(),
|
newEtcdLocalSubphase(),
|
||||||
|
@ -73,7 +71,7 @@ func newEtcdLocalSubphase() workflow.Phase {
|
||||||
Name: "etcd",
|
Name: "etcd",
|
||||||
Short: "Add a new local etcd member",
|
Short: "Add a new local etcd member",
|
||||||
Run: runEtcdPhase,
|
Run: runEtcdPhase,
|
||||||
InheritFlags: getControlPlaneJoinPhaseFlags(),
|
InheritFlags: getControlPlaneJoinPhaseFlags("etcd"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +84,7 @@ func newUpdateStatusSubphase() workflow.Phase {
|
||||||
kubeadmconstants.KubeadmConfigConfigMap,
|
kubeadmconstants.KubeadmConfigConfigMap,
|
||||||
),
|
),
|
||||||
Run: runUpdateStatusPhase,
|
Run: runUpdateStatusPhase,
|
||||||
InheritFlags: getControlPlaneJoinPhaseFlags(),
|
InheritFlags: getControlPlaneJoinPhaseFlags("update-status"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +93,7 @@ func newMarkControlPlaneSubphase() workflow.Phase {
|
||||||
Name: "mark-control-plane",
|
Name: "mark-control-plane",
|
||||||
Short: "Mark a node as a control-plane",
|
Short: "Mark a node as a control-plane",
|
||||||
Run: runMarkControlPlanePhase,
|
Run: runMarkControlPlanePhase,
|
||||||
InheritFlags: getControlPlaneJoinPhaseFlags(),
|
InheritFlags: getControlPlaneJoinPhaseFlags("mark-control-plane"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,13 +31,20 @@ import (
|
||||||
"k8s.io/kubernetes/cmd/kubeadm/app/phases/copycerts"
|
"k8s.io/kubernetes/cmd/kubeadm/app/phases/copycerts"
|
||||||
kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig"
|
kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig"
|
||||||
kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/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
|
// NewControlPlanePreparePhase creates a kubeadm workflow phase that implements the preparation of the node to serve a control plane
|
||||||
func NewControlPlanePreparePhase() workflow.Phase {
|
func NewControlPlanePreparePhase() workflow.Phase {
|
||||||
return workflow.Phase{
|
return workflow.Phase{
|
||||||
Name: "control-plane-prepare",
|
Name: "control-plane-prepare",
|
||||||
Short: "Prepares the machine for serving a control plane.",
|
Short: "Prepares the machine for serving a control plane.",
|
||||||
|
Example: controlPlanePrepareExample,
|
||||||
Phases: []workflow.Phase{
|
Phases: []workflow.Phase{
|
||||||
{
|
{
|
||||||
Name: "all [api-server-endpoint]",
|
Name: "all [api-server-endpoint]",
|
||||||
|
@ -48,33 +55,75 @@ func NewControlPlanePreparePhase() workflow.Phase {
|
||||||
newControlPlanePrepareDownloadCertsSubphase(),
|
newControlPlanePrepareDownloadCertsSubphase(),
|
||||||
newControlPlanePrepareCertsSubphase(),
|
newControlPlanePrepareCertsSubphase(),
|
||||||
newControlPlanePrepareKubeconfigSubphase(),
|
newControlPlanePrepareKubeconfigSubphase(),
|
||||||
newControlPlanePrepareManifestsSubphases(),
|
newControlPlanePrepareControlPlaneSubphase(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getControlPlanePreparePhaseFlags(name string) []string {
|
func getControlPlanePreparePhaseFlags(name string) []string {
|
||||||
flags := []string{
|
var flags []string
|
||||||
options.APIServerAdvertiseAddress,
|
switch name {
|
||||||
options.APIServerBindPort,
|
case "all":
|
||||||
options.CfgPath,
|
flags = []string{
|
||||||
options.ControlPlane,
|
options.APIServerAdvertiseAddress,
|
||||||
options.NodeName,
|
options.APIServerBindPort,
|
||||||
}
|
options.CfgPath,
|
||||||
if name != "manifests" {
|
options.ControlPlane,
|
||||||
flags = append(flags,
|
options.NodeName,
|
||||||
options.FileDiscovery,
|
options.FileDiscovery,
|
||||||
options.TokenDiscovery,
|
options.TokenDiscovery,
|
||||||
options.TokenDiscoveryCAHash,
|
options.TokenDiscoveryCAHash,
|
||||||
options.TokenDiscoverySkipCAHash,
|
options.TokenDiscoverySkipCAHash,
|
||||||
options.TLSBootstrapToken,
|
options.TLSBootstrapToken,
|
||||||
options.TokenStr,
|
options.TokenStr,
|
||||||
)
|
|
||||||
}
|
|
||||||
if name == "all" || name == "download-certs" {
|
|
||||||
flags = append(flags,
|
|
||||||
options.CertificateKey,
|
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
|
return flags
|
||||||
}
|
}
|
||||||
|
@ -106,16 +155,16 @@ func newControlPlanePrepareKubeconfigSubphase() workflow.Phase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newControlPlanePrepareManifestsSubphases() workflow.Phase {
|
func newControlPlanePrepareControlPlaneSubphase() workflow.Phase {
|
||||||
return workflow.Phase{
|
return workflow.Phase{
|
||||||
Name: "control-plane",
|
Name: "control-plane",
|
||||||
Short: "Generates the manifests for the new control plane components",
|
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
|
Run: runControlPlanePrepareControlPlaneSubphase, //NB. eventually in future we would like to break down this in sub phases for each component
|
||||||
InheritFlags: getControlPlanePreparePhaseFlags("manifests"),
|
InheritFlags: getControlPlanePreparePhaseFlags("control-plane"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func runControlPlanePrepareManifestsSubphase(c workflow.RunData) error {
|
func runControlPlanePrepareControlPlaneSubphase(c workflow.RunData) error {
|
||||||
data, ok := c.(JoinData)
|
data, ok := c.(JoinData)
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.New("control-plane-prepare phase invoked with an invalid data struct")
|
return errors.New("control-plane-prepare phase invoked with an invalid data struct")
|
||||||
|
|
Loading…
Reference in New Issue