From 62dddb7853e878d83dc2095af82bdec1bfbc29c3 Mon Sep 17 00:00:00 2001 From: Jordan Faust Date: Fri, 2 Feb 2018 17:07:48 -0600 Subject: [PATCH] Add criSocket to kubeadm NodeConfiguration manifest --- cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go | 1 + cmd/kubeadm/app/apis/kubeadm/types.go | 2 ++ .../app/apis/kubeadm/v1alpha1/defaults.go | 5 +++++ .../app/apis/kubeadm/v1alpha1/types.go | 2 ++ .../v1alpha1/zz_generated.conversion.go | 2 ++ cmd/kubeadm/app/cmd/join.go | 19 +++++++++---------- cmd/kubeadm/app/cmd/phases/preflight.go | 3 +-- cmd/kubeadm/app/preflight/checks.go | 6 +++--- cmd/kubeadm/app/preflight/checks_test.go | 2 +- 9 files changed, 26 insertions(+), 16 deletions(-) diff --git a/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go b/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go index 7e667805e2..f8e11f27c3 100644 --- a/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go +++ b/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go @@ -120,6 +120,7 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { obj.DiscoveryTokenAPIServers = []string{"foo"} obj.TLSBootstrapToken = "foo" obj.Token = "foo" + obj.CRISocket = "foo" }, } } diff --git a/cmd/kubeadm/app/apis/kubeadm/types.go b/cmd/kubeadm/app/apis/kubeadm/types.go index 7373a2ec0c..cd520df5d1 100644 --- a/cmd/kubeadm/app/apis/kubeadm/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/types.go @@ -206,6 +206,8 @@ type NodeConfiguration struct { TLSBootstrapToken string // Token is used for both discovery and TLS bootstrapping. Token string + // CRISocket is used to retrieve container runtime info. + CRISocket string // DiscoveryTokenCACertHashes specifies a set of public key pins to verify // when token-based discovery is used. The root CA found during discovery diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go index 772a9612ee..62a0eb9f68 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go @@ -50,6 +50,8 @@ const ( DefaultImageRepository = "gcr.io/google_containers" // DefaultManifestsDir defines default manifests directory DefaultManifestsDir = "/etc/kubernetes/manifests" + // DefaultCRISocket defines the default cri socket + DefaultCRISocket = "/var/run/dockershim.sock" // DefaultEtcdDataDir defines default location of etcd where static pods will save data to DefaultEtcdDataDir = "/var/lib/etcd" @@ -147,6 +149,9 @@ func SetDefaults_NodeConfiguration(obj *NodeConfiguration) { if len(obj.DiscoveryToken) == 0 && len(obj.DiscoveryFile) == 0 { obj.DiscoveryToken = obj.Token } + if obj.CRISocket == "" { + obj.CRISocket = DefaultCRISocket + } // Make sure file URLs become paths if len(obj.DiscoveryFile) != 0 { u, err := url.Parse(obj.DiscoveryFile) diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go index d1edd0e1e9..c15ed97668 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/types.go @@ -199,6 +199,8 @@ type NodeConfiguration struct { TLSBootstrapToken string `json:"tlsBootstrapToken"` // Token is used for both discovery and TLS bootstrapping. Token string `json:"token"` + // CRISocket is used to retrieve container runtime info. + CRISocket string `json:"criSocket,omitempty"` // DiscoveryTokenCACertHashes specifies a set of public key pins to verify // when token-based discovery is used. The root CA found during discovery diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.conversion.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.conversion.go index 8afb09456b..553ebf1694 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.conversion.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/zz_generated.conversion.go @@ -299,6 +299,7 @@ func autoConvert_v1alpha1_NodeConfiguration_To_kubeadm_NodeConfiguration(in *Nod out.NodeName = in.NodeName out.TLSBootstrapToken = in.TLSBootstrapToken out.Token = in.Token + out.CRISocket = in.CRISocket out.DiscoveryTokenCACertHashes = *(*[]string)(unsafe.Pointer(&in.DiscoveryTokenCACertHashes)) out.DiscoveryTokenUnsafeSkipCAVerification = in.DiscoveryTokenUnsafeSkipCAVerification out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) @@ -318,6 +319,7 @@ func autoConvert_kubeadm_NodeConfiguration_To_v1alpha1_NodeConfiguration(in *kub out.NodeName = in.NodeName out.TLSBootstrapToken = in.TLSBootstrapToken out.Token = in.Token + out.CRISocket = in.CRISocket out.DiscoveryTokenCACertHashes = *(*[]string)(unsafe.Pointer(&in.DiscoveryTokenCACertHashes)) out.DiscoveryTokenUnsafeSkipCAVerification = in.DiscoveryTokenUnsafeSkipCAVerification out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) diff --git a/cmd/kubeadm/app/cmd/join.go b/cmd/kubeadm/app/cmd/join.go index 14d7acce07..de6a3e4562 100644 --- a/cmd/kubeadm/app/cmd/join.go +++ b/cmd/kubeadm/app/cmd/join.go @@ -106,7 +106,6 @@ func NewCmdJoin(out io.Writer) *cobra.Command { var skipPreFlight bool var cfgPath string - var criSocket string var featureGatesString string var ignorePreflightErrors []string @@ -129,7 +128,7 @@ func NewCmdJoin(out io.Writer) *cobra.Command { ignorePreflightErrorsSet, err := validation.ValidateIgnorePreflightErrors(ignorePreflightErrors, skipPreFlight) kubeadmutil.CheckErr(err) - j, err := NewJoin(cfgPath, args, internalcfg, ignorePreflightErrorsSet, criSocket) + j, err := NewJoin(cfgPath, args, internalcfg, ignorePreflightErrorsSet) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(j.Validate(cmd)) kubeadmutil.CheckErr(j.Run(out)) @@ -137,7 +136,7 @@ func NewCmdJoin(out io.Writer) *cobra.Command { } AddJoinConfigFlags(cmd.PersistentFlags(), cfg, &featureGatesString) - AddJoinOtherFlags(cmd.PersistentFlags(), &cfgPath, &skipPreFlight, &criSocket, &ignorePreflightErrors) + AddJoinOtherFlags(cmd.PersistentFlags(), &cfgPath, &skipPreFlight, &ignorePreflightErrors) return cmd } @@ -169,10 +168,14 @@ func AddJoinConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiext.NodeConfigurat featureGatesString, "feature-gates", *featureGatesString, "A set of key=value pairs that describe feature gates for various features. "+ "Options are:\n"+strings.Join(features.KnownFeatures(&features.InitFeatureGates), "\n")) + flagSet.StringVar( + &cfg.CRISocket, "cri-socket", cfg.CRISocket, + `Specify the CRI socket to connect to.`, + ) } // AddJoinOtherFlags adds join flags that are not bound to a configuration file to the given flagset -func AddJoinOtherFlags(flagSet *flag.FlagSet, cfgPath *string, skipPreFlight *bool, criSocket *string, ignorePreflightErrors *[]string) { +func AddJoinOtherFlags(flagSet *flag.FlagSet, cfgPath *string, skipPreFlight *bool, ignorePreflightErrors *[]string) { flagSet.StringVar( cfgPath, "config", *cfgPath, "Path to kubeadm config file.") @@ -186,10 +189,6 @@ func AddJoinOtherFlags(flagSet *flag.FlagSet, cfgPath *string, skipPreFlight *bo "Skip preflight checks which normally run before modifying the system.", ) flagSet.MarkDeprecated("skip-preflight-checks", "it is now equivalent to --ignore-preflight-errors=all") - flagSet.StringVar( - criSocket, "cri-socket", "/var/run/dockershim.sock", - `Specify the CRI socket to connect to.`, - ) } // Join defines struct used by kubeadm join command @@ -198,7 +197,7 @@ type Join struct { } // NewJoin instantiates Join struct with given arguments -func NewJoin(cfgPath string, args []string, cfg *kubeadmapi.NodeConfiguration, ignorePreflightErrors sets.String, criSocket string) (*Join, error) { +func NewJoin(cfgPath string, args []string, cfg *kubeadmapi.NodeConfiguration, ignorePreflightErrors sets.String) (*Join, error) { if cfg.NodeName == "" { cfg.NodeName = nodeutil.GetHostname("") @@ -217,7 +216,7 @@ func NewJoin(cfgPath string, args []string, cfg *kubeadmapi.NodeConfiguration, i fmt.Println("[preflight] Running pre-flight checks.") // Then continue with the others... - if err := preflight.RunJoinNodeChecks(utilsexec.New(), cfg, criSocket, ignorePreflightErrors); err != nil { + if err := preflight.RunJoinNodeChecks(utilsexec.New(), cfg, ignorePreflightErrors); err != nil { return nil, err } diff --git a/cmd/kubeadm/app/cmd/phases/preflight.go b/cmd/kubeadm/app/cmd/phases/preflight.go index 54b51343af..33013efc15 100644 --- a/cmd/kubeadm/app/cmd/phases/preflight.go +++ b/cmd/kubeadm/app/cmd/phases/preflight.go @@ -88,8 +88,7 @@ func NewCmdPreFlightNode() *cobra.Command { Example: nodePreflightExample, Run: func(cmd *cobra.Command, args []string) { cfg := &kubeadmapi.NodeConfiguration{} - criSocket := "" - err := preflight.RunJoinNodeChecks(utilsexec.New(), cfg, criSocket, sets.NewString()) + err := preflight.RunJoinNodeChecks(utilsexec.New(), cfg, sets.NewString()) kubeadmutil.CheckErr(err) }, } diff --git a/cmd/kubeadm/app/preflight/checks.go b/cmd/kubeadm/app/preflight/checks.go index d1b1454b91..8c5880cb5d 100644 --- a/cmd/kubeadm/app/preflight/checks.go +++ b/cmd/kubeadm/app/preflight/checks.go @@ -949,7 +949,7 @@ func RunInitMasterChecks(execer utilsexec.Interface, cfg *kubeadmapi.MasterConfi } // RunJoinNodeChecks executes all individual, applicable to node checks. -func RunJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.NodeConfiguration, criSocket string, ignorePreflightErrors sets.String) error { +func RunJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.NodeConfiguration, ignorePreflightErrors sets.String) error { // First, check if we're root separately from the other preflight checks and fail fast if err := RunRootCheckOnly(ignorePreflightErrors); err != nil { return err @@ -966,7 +966,7 @@ func RunJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.NodeConfigura useCRI := len(warns) == 0 checks := []Checker{ - SystemVerificationCheck{CRISocket: criSocket}, + SystemVerificationCheck{CRISocket: cfg.CRISocket}, IsPrivilegedUserCheck{}, HostnameCheck{cfg.NodeName}, KubeletVersionCheck{}, @@ -977,7 +977,7 @@ func RunJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.NodeConfigura FileAvailableCheck{Path: filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.KubeletKubeConfigFileName)}, } if useCRI { - checks = append(checks, CRICheck{socket: criSocket, exec: execer}) + checks = append(checks, CRICheck{socket: cfg.CRISocket, exec: execer}) } else { // assume docker checks = append(checks, ServiceCheck{Service: "docker", CheckIfActive: true}) diff --git a/cmd/kubeadm/app/preflight/checks_test.go b/cmd/kubeadm/app/preflight/checks_test.go index a283e92eb4..22205e24b3 100644 --- a/cmd/kubeadm/app/preflight/checks_test.go +++ b/cmd/kubeadm/app/preflight/checks_test.go @@ -259,7 +259,7 @@ func TestRunJoinNodeChecks(t *testing.T) { } for _, rt := range tests { - actual := RunJoinNodeChecks(exec.New(), rt.cfg, "", sets.NewString()) + actual := RunJoinNodeChecks(exec.New(), rt.cfg, sets.NewString()) if (actual == nil) != rt.expected { t.Errorf( "failed RunJoinNodeChecks:\n\texpected: %t\n\t actual: %t",