diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index 2edf2c923e4..234ae8cd022 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -22,6 +22,7 @@ go_library( tags = ["automanaged"], deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", + "//cmd/kubeadm/app/apis/kubeadm/v1alpha1:go_default_library", "//cmd/kubeadm/app/master:go_default_library", "//cmd/kubeadm/app/node:go_default_library", "//cmd/kubeadm/app/preflight:go_default_library", diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index c6dea3bb4eb..c2346239b92 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/cobra" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" kubemaster "k8s.io/kubernetes/cmd/kubeadm/app/master" "k8s.io/kubernetes/cmd/kubeadm/app/preflight" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -61,92 +62,96 @@ var ( // NewCmdInit returns "kubeadm init" command. func NewCmdInit(out io.Writer) *cobra.Command { - cfg := &kubeadmapi.MasterConfiguration{} + versioned := &kubeadmapiext.MasterConfiguration{} + api.Scheme.Default(versioned) + cfg := kubeadmapi.MasterConfiguration{} + api.Scheme.Convert(versioned, &cfg, nil) + var cfgPath string var skipPreFlight bool cmd := &cobra.Command{ Use: "init", Short: "Run this in order to set up the Kubernetes master.", Run: func(cmd *cobra.Command, args []string) { - i, err := NewInit(cfgPath, cfg, skipPreFlight) + i, err := NewInit(cfgPath, &cfg, skipPreFlight) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(i.Run(out)) }, } cmd.PersistentFlags().StringVar( - &cfg.Secrets.GivenToken, "token", "", + &cfg.Secrets.GivenToken, "token", cfg.Secrets.GivenToken, "Shared secret used to secure cluster bootstrap; if none is provided, one will be generated for you", ) cmd.PersistentFlags().StringSliceVar( - &cfg.API.AdvertiseAddresses, "api-advertise-addresses", []string{}, + &cfg.API.AdvertiseAddresses, "api-advertise-addresses", cfg.API.AdvertiseAddresses, "The IP addresses to advertise, in case autodetection fails", ) cmd.PersistentFlags().StringSliceVar( - &cfg.API.ExternalDNSNames, "api-external-dns-names", []string{}, + &cfg.API.ExternalDNSNames, "api-external-dns-names", cfg.API.ExternalDNSNames, "The DNS names to advertise, in case you have configured them yourself", ) cmd.PersistentFlags().StringVar( - &cfg.Networking.ServiceSubnet, "service-cidr", kubeadmapi.DefaultServicesSubnet, + &cfg.Networking.ServiceSubnet, "service-cidr", cfg.Networking.ServiceSubnet, "Use alternative range of IP address for service VIPs", ) cmd.PersistentFlags().StringVar( - &cfg.Networking.PodSubnet, "pod-network-cidr", "", + &cfg.Networking.PodSubnet, "pod-network-cidr", cfg.Networking.PodSubnet, "Specify range of IP addresses for the pod network; if set, the control plane will automatically allocate CIDRs for every node", ) cmd.PersistentFlags().StringVar( - &cfg.Networking.DNSDomain, "service-dns-domain", kubeadmapi.DefaultServiceDNSDomain, + &cfg.Networking.DNSDomain, "service-dns-domain", cfg.Networking.DNSDomain, `Use alternative domain for services, e.g. "myorg.internal"`, ) cmd.PersistentFlags().StringVar( - &cfg.CloudProvider, "cloud-provider", "", + &cfg.CloudProvider, "cloud-provider", cfg.CloudProvider, `Enable cloud provider features (external load-balancers, storage, etc), e.g. "gce"`, ) cmd.PersistentFlags().StringVar( - &cfg.KubernetesVersion, "use-kubernetes-version", kubeadmapi.DefaultKubernetesVersion, + &cfg.KubernetesVersion, "use-kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`, ) - cmd.PersistentFlags().StringVar(&cfgPath, "config", "", "Path to kubeadm config file") + cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file") // TODO (phase1+) @errordeveloper make the flags below not show up in --help but rather on --advanced-help cmd.PersistentFlags().StringSliceVar( - &cfg.Etcd.Endpoints, "external-etcd-endpoints", []string{}, + &cfg.Etcd.Endpoints, "external-etcd-endpoints", cfg.Etcd.Endpoints, "etcd endpoints to use, in case you have an external cluster", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-endpoints", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().StringVar( - &cfg.Etcd.CAFile, "external-etcd-cafile", "", + &cfg.Etcd.CAFile, "external-etcd-cafile", cfg.Etcd.CAFile, "etcd certificate authority certificate file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-cafile", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().StringVar( - &cfg.Etcd.CertFile, "external-etcd-certfile", "", + &cfg.Etcd.CertFile, "external-etcd-certfile", cfg.Etcd.CertFile, "etcd client certificate file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-certfile", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().StringVar( - &cfg.Etcd.KeyFile, "external-etcd-keyfile", "", + &cfg.Etcd.KeyFile, "external-etcd-keyfile", cfg.Etcd.KeyFile, "etcd client key file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().MarkDeprecated("external-etcd-keyfile", "this flag will be removed when componentconfig exists") cmd.PersistentFlags().BoolVar( - &skipPreFlight, "skip-preflight-checks", false, + &skipPreFlight, "skip-preflight-checks", skipPreFlight, "skip preflight checks normally run before modifying the system", ) cmd.PersistentFlags().Int32Var( - &cfg.API.BindPort, "api-port", kubeadmapi.DefaultAPIBindPort, + &cfg.API.BindPort, "api-port", cfg.API.BindPort, "Port for API to bind to", ) cmd.PersistentFlags().Int32Var( - &cfg.Discovery.BindPort, "discovery-port", kubeadmapi.DefaultDiscoveryBindPort, + &cfg.Discovery.BindPort, "discovery-port", cfg.Discovery.BindPort, "Port for JWS discovery service to bind to", ) @@ -202,8 +207,8 @@ func NewInit(cfgPath string, cfg *kubeadmapi.MasterConfiguration, skipPreFlight // joinArgsData denotes a data object which is needed by function generateJoinArgs to generate kubeadm join arguments. type joinArgsData struct { Cfg *kubeadmapi.MasterConfiguration - DefaultAPIBindPort uint - DefaultDiscoveryBindPort uint + DefaultAPIBindPort int32 + DefaultDiscoveryBindPort int32 } // Run executes master node provisioning, including certificates, needed static pod manifests, etc. @@ -259,7 +264,7 @@ func (i *Init) Run(out io.Writer) error { return err } - data := joinArgsData{i.cfg, kubeadmapi.DefaultAPIBindPort, kubeadmapi.DefaultDiscoveryBindPort} + data := joinArgsData{i.cfg, kubeadmapiext.DefaultAPIBindPort, kubeadmapiext.DefaultDiscoveryBindPort} if joinArgs, err := generateJoinArgs(data); err != nil { return err } else { diff --git a/cmd/kubeadm/app/cmd/join.go b/cmd/kubeadm/app/cmd/join.go index fb6c781021d..5dc7bdfaa59 100644 --- a/cmd/kubeadm/app/cmd/join.go +++ b/cmd/kubeadm/app/cmd/join.go @@ -25,6 +25,7 @@ import ( "github.com/spf13/cobra" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" kubenode "k8s.io/kubernetes/cmd/kubeadm/app/node" "k8s.io/kubernetes/cmd/kubeadm/app/preflight" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" @@ -45,25 +46,30 @@ var ( // NewCmdJoin returns "kubeadm join" command. func NewCmdJoin(out io.Writer) *cobra.Command { - cfg := &kubeadmapi.NodeConfiguration{} + versioned := &kubeadmapiext.NodeConfiguration{} + api.Scheme.Default(versioned) + cfg := kubeadmapi.NodeConfiguration{} + api.Scheme.Convert(versioned, &cfg, nil) + var skipPreFlight bool var cfgPath string + cmd := &cobra.Command{ Use: "join", Short: "Run this on any machine you wish to join an existing cluster.", Run: func(cmd *cobra.Command, args []string) { - j, err := NewJoin(cfgPath, args, cfg, skipPreFlight) + j, err := NewJoin(cfgPath, args, &cfg, skipPreFlight) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(j.Run(out)) }, } cmd.PersistentFlags().StringVar( - &cfg.Secrets.GivenToken, "token", "", + &cfg.Secrets.GivenToken, "token", cfg.Secrets.GivenToken, "(required) Shared secret used to secure bootstrap. Must match the output of 'kubeadm init'", ) - cmd.PersistentFlags().StringVar(&cfgPath, "config", "", "Path to kubeadm config file") + cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file") cmd.PersistentFlags().BoolVar( &skipPreFlight, "skip-preflight-checks", false, @@ -71,12 +77,12 @@ func NewCmdJoin(out io.Writer) *cobra.Command { ) cmd.PersistentFlags().Int32Var( - &cfg.APIPort, "api-port", kubeadmapi.DefaultAPIBindPort, + &cfg.APIPort, "api-port", cfg.APIPort, "(optional) API server port on the master", ) cmd.PersistentFlags().Int32Var( - &cfg.DiscoveryPort, "discovery-port", kubeadmapi.DefaultDiscoveryBindPort, + &cfg.DiscoveryPort, "discovery-port", cfg.DiscoveryPort, "(optional) Discovery port on the master", ) diff --git a/cmd/kubeadm/app/master/BUILD b/cmd/kubeadm/app/master/BUILD index 263af4f7cfb..2961f2bb200 100644 --- a/cmd/kubeadm/app/master/BUILD +++ b/cmd/kubeadm/app/master/BUILD @@ -24,6 +24,7 @@ go_library( tags = ["automanaged"], deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", + "//cmd/kubeadm/app/apis/kubeadm/v1alpha1:go_default_library", "//cmd/kubeadm/app/images:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//pkg/api:go_default_library", diff --git a/cmd/kubeadm/app/master/discovery.go b/cmd/kubeadm/app/master/discovery.go index 563716430d3..2c2c5b88eef 100644 --- a/cmd/kubeadm/app/master/discovery.go +++ b/cmd/kubeadm/app/master/discovery.go @@ -23,6 +23,7 @@ import ( "time" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeadmapiext "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1alpha1" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" @@ -79,7 +80,7 @@ func newKubeDiscoveryPodSpec(cfg *kubeadmapi.MasterConfiguration) api.PodSpec { Ports: []api.ContainerPort{ // TODO when CNI issue (#31307) is resolved, we should consider adding // `HostIP: s.API.AdvertiseAddrs[0]`, if there is only one address` - {Name: "http", ContainerPort: kubeadmapi.DefaultDiscoveryBindPort, HostPort: cfg.Discovery.BindPort}, + {Name: "http", ContainerPort: kubeadmapiext.DefaultDiscoveryBindPort, HostPort: cfg.Discovery.BindPort}, }, SecurityContext: &api.SecurityContext{ SELinuxOptions: &api.SELinuxOptions{