// NewCmdJoin returns "kubeadm join" command. func NewCmdJoin(out io.Writer) *cobra.Command { cfg := &kubeadmapi.NodeConfiguration{} 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) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(j.Run(out)) }, } cmd.PersistentFlags().StringVar( &cfg.Secrets.GivenToken, "token", "", "(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().BoolVar( &skipPreFlight, "skip-preflight-checks", false, "skip preflight checks normally run before modifying the system", ) return cmd }
// NewCmdJoin returns "kubeadm join" command. func NewCmdJoin(out io.Writer) *cobra.Command { 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 <master address>", 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) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(j.Validate()) kubeadmutil.CheckErr(j.Run(out)) }, } cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file") cmd.PersistentFlags().BoolVar( &skipPreFlight, "skip-preflight-checks", false, "skip preflight checks normally run before modifying the system", ) cmd.PersistentFlags().Var( discovery.NewDiscoveryValue(&cfg.Discovery), "discovery", "The discovery method kubeadm will use for connecting nodes to the master", ) return cmd }
// NewCmdReset returns "kubeadm reset" command. func NewCmdReset(out io.Writer) *cobra.Command { var skipPreFlight bool cmd := &cobra.Command{ Use: "reset", Short: "Run this to revert any changes made to this host by 'kubeadm init' or 'kubeadm join'.", Run: func(cmd *cobra.Command, args []string) { r, err := NewReset(skipPreFlight) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(r.Run(out)) }, } cmd.PersistentFlags().BoolVar( &skipPreFlight, "skip-preflight-checks", false, "skip preflight checks normally run before modifying the system", ) return cmd }
// NewCmdJoin returns "kubeadm join" command. func NewCmdJoin(out io.Writer) *cobra.Command { 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 <master address>", 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) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(j.Run(out)) }, } cmd.PersistentFlags().StringVar( &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", cfgPath, "Path to kubeadm config file") cmd.PersistentFlags().BoolVar( &skipPreFlight, "skip-preflight-checks", false, "skip preflight checks normally run before modifying the system", ) cmd.PersistentFlags().Int32Var( &cfg.APIPort, "api-port", cfg.APIPort, "(optional) API server port on the master", ) cmd.PersistentFlags().Int32Var( &cfg.DiscoveryPort, "discovery-port", cfg.DiscoveryPort, "(optional) Discovery port on the master", ) return cmd }
func NewCmdVersion(out io.Writer) *cobra.Command { cmd := &cobra.Command{ Use: "version", Short: "Print the version of kubeadm", Run: func(cmd *cobra.Command, args []string) { err := RunVersion(out, cmd) kubeadmutil.CheckErr(err) }, } return cmd }
func NewCmdTokenGenerate(out io.Writer) *cobra.Command { return &cobra.Command{ Use: "generate", Short: "Generate and print a bootstrap token, but do not create it on the server.", Long: dedent.Dedent(` This command will print out a randomly-generated bootstrap token that can be used with the "init" and "join" commands. You don't have to use this command in order to generate a token, you can do so yourself as long as it's in the format "<6 characters>:<16 characters>". This command is provided for convenience to generate tokens in that format. You can also use "kubeadm init" without specifying a token, and it will generate and print one for you. `), Run: func(cmd *cobra.Command, args []string) { err := RunGenerateToken(out) kubeadmutil.CheckErr(err) }, } }
// NewCmdInit returns "kubeadm init" command. func NewCmdInit(out io.Writer) *cobra.Command { 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) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(i.Validate()) kubeadmutil.CheckErr(i.Run(out)) }, } cmd.PersistentFlags().StringSliceVar( &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", cfg.API.ExternalDNSNames, "The DNS names to advertise, in case you have configured them yourself", ) cmd.PersistentFlags().StringVar( &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, "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", cfg.Networking.DNSDomain, `Use alternative domain for services, e.g. "myorg.internal"`, ) cmd.PersistentFlags().Var( flags.NewCloudProviderFlag(&cfg.CloudProvider), "cloud-provider", `Enable cloud provider features (external load-balancers, storage, etc). Note that you have to configure all kubelets manually`, ) cmd.PersistentFlags().StringVar( &cfg.KubernetesVersion, "use-kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`, ) 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", 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, "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, "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, "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", skipPreFlight, "skip preflight checks normally run before modifying the system", ) cmd.PersistentFlags().Var( discovery.NewDiscoveryValue(&cfg.Discovery), "discovery", "The discovery method kubeadm will use for connecting nodes to the master", ) return cmd }
func NewCmdToken(out io.Writer, errW io.Writer) *cobra.Command { tokenCmd := &cobra.Command{ Use: "token", Short: "Manage bootstrap tokens.", // Without this callback, if a user runs just the "token" // command without a subcommand, or with an invalid subcommand, // cobra will print usage information, but still exit cleanly. // We want to return an error code in these cases so that the // user knows that their command was invalid. RunE: func(cmd *cobra.Command, args []string) error { if len(args) < 1 { return errors.New("missing subcommand; 'token' is not meant to be run on its own") } else { return fmt.Errorf("invalid subcommand: %s", args[0]) } }, } var token string var tokenDuration time.Duration createCmd := &cobra.Command{ Use: "create", Short: "Create bootstrap tokens on the server.", Run: func(tokenCmd *cobra.Command, args []string) { err := RunCreateToken(out, tokenCmd, tokenDuration, token) kubeadmutil.CheckErr(err) }, } createCmd.PersistentFlags().DurationVar(&tokenDuration, "ttl", kubeadmutil.DefaultTokenDuration, "The duration before the token is automatically deleted.") createCmd.PersistentFlags().StringVar( &token, "token", "", "Shared secret used to secure cluster bootstrap. If none is provided, one will be generated for you.", ) tokenCmd.AddCommand(createCmd) tokenCmd.AddCommand(NewCmdTokenGenerate(out)) listCmd := &cobra.Command{ Use: "list", Short: "List bootstrap tokens on the server.", Run: func(tokenCmd *cobra.Command, args []string) { err := RunListTokens(out, errW, tokenCmd) kubeadmutil.CheckErr(err) }, } tokenCmd.AddCommand(listCmd) deleteCmd := &cobra.Command{ Use: "delete", Short: "Delete bootstrap tokens on the server.", Run: func(tokenCmd *cobra.Command, args []string) { err := RunDeleteToken(out, tokenCmd, args[0]) kubeadmutil.CheckErr(err) }, } tokenCmd.AddCommand(deleteCmd) return tokenCmd }
// NewCmdInit returns "kubeadm init" command. func NewCmdInit(out io.Writer) *cobra.Command { cfg := &kubeadmapi.MasterConfiguration{} 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) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(i.Run(out)) }, } cmd.PersistentFlags().StringVar( &cfg.Secrets.GivenToken, "token", "", "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{}, "The IP addresses to advertise, in case autodetection fails", ) cmd.PersistentFlags().StringSliceVar( &cfg.API.ExternalDNSNames, "api-external-dns-names", []string{}, "The DNS names to advertise, in case you have configured them yourself", ) cmd.PersistentFlags().StringVar( &cfg.Networking.ServiceSubnet, "service-cidr", kubeadmapi.DefaultServicesSubnet, "Use alternative range of IP address for service VIPs", ) cmd.PersistentFlags().StringVar( &cfg.Networking.PodSubnet, "pod-network-cidr", "", "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, `Use alternative domain for services, e.g. "myorg.internal"`, ) cmd.PersistentFlags().StringVar( &cfg.CloudProvider, "cloud-provider", "", `Enable cloud provider features (external load-balancers, storage, etc), e.g. "gce"`, ) cmd.PersistentFlags().StringVar( &cfg.KubernetesVersion, "use-kubernetes-version", kubeadmapi.DefaultKubernetesVersion, `Choose a specific Kubernetes version for the control plane`, ) cmd.PersistentFlags().StringVar(&cfgPath, "config", "", "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{}, "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", "", "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", "", "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", "", "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, "skip preflight checks normally run before modifying the system", ) cmd.PersistentFlags().Int32Var( &cfg.API.BindPort, "api-port", kubeadmapi.DefaultAPIBindPort, "Port for API to bind to", ) cmd.PersistentFlags().Int32Var( &cfg.Discovery.BindPort, "discovery-port", kubeadmapi.DefaultDiscoveryBindPort, "Port for JWS discovery service to bind to", ) return cmd }
// NewCmdInit returns "kubeadm init" command. func NewCmdInit(out io.Writer) *cobra.Command { 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) kubeadmutil.CheckErr(err) kubeadmutil.CheckErr(i.Validate()) kubeadmutil.CheckErr(i.Run(out)) }, } cmd.PersistentFlags().StringSliceVar( &cfg.API.AdvertiseAddresses, "api-advertise-addresses", cfg.API.AdvertiseAddresses, "The IP addresses to advertise, in case autodetection fails", ) cmd.PersistentFlags().Int32Var( &cfg.API.Port, "api-port", cfg.API.Port, "Port for API to bind to", ) cmd.PersistentFlags().StringSliceVar( &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", cfg.Networking.ServiceSubnet, "Use alternative range of IP address for service VIPs", ) cmd.PersistentFlags().StringVar( &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", cfg.Networking.DNSDomain, `Use alternative domain for services, e.g. "myorg.internal"`, ) cmd.PersistentFlags().Var( flags.NewCloudProviderFlag(&cfg.CloudProvider), "cloud-provider", `Enable cloud provider features (external load-balancers, storage, etc). Note that you have to configure all kubelets manually`, ) cmd.PersistentFlags().StringVar( &cfg.KubernetesVersion, "use-kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`, ) cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file") cmd.PersistentFlags().BoolVar( &skipPreFlight, "skip-preflight-checks", skipPreFlight, "skip preflight checks normally run before modifying the system", ) cmd.PersistentFlags().Var( discovery.NewDiscoveryValue(&cfg.Discovery), "discovery", "The discovery method kubeadm will use for connecting nodes to the master", ) return cmd }