diff --git a/cmd/kubeadm/app/api/types.go b/cmd/kubeadm/app/api/types.go index f2c89f76432..59999a11950 100644 --- a/cmd/kubeadm/app/api/types.go +++ b/cmd/kubeadm/app/api/types.go @@ -64,13 +64,12 @@ type InitFlags struct { Kubernetes string } CloudProvider string - Schedulable bool } const ( DefaultServiceDNSDomain = "cluster.local" DefaultServicesCIDRString = "100.64.0.0/12" // Carrier-grade NAT range (RFC 6598) - DefaultKubernetesVersion = "v1.4.0-beta.10" + DefaultKubernetesVersion = "v1.4.0" ) var ( @@ -86,15 +85,10 @@ var ( "rackspace", "vsphere", } - SupportedCloudProviders map[string]bool ) func init() { _, DefaultServicesCIDR, _ = net.ParseCIDR(DefaultServicesCIDRString) - SupportedCloudProviders = make(map[string]bool, len(ListOfCloudProviders)) - for _, v := range ListOfCloudProviders { - SupportedCloudProviders[v] = true - } } // JoinFlags holds values for "kubeadm join" command flags. diff --git a/cmd/kubeadm/app/cmd/cmd.go b/cmd/kubeadm/app/cmd/cmd.go index e46539719a9..7dd94c0a63b 100644 --- a/cmd/kubeadm/app/cmd/cmd.go +++ b/cmd/kubeadm/app/cmd/cmd.go @@ -84,6 +84,7 @@ func NewKubeadmCommand(f *cmdutil.Factory, in io.Reader, out, err io.Writer, env cmds.AddCommand(NewCmdInit(out, s)) cmds.AddCommand(NewCmdJoin(out, s)) + cmds.AddCommand(NewCmdVersion(out)) return cmds } diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index 397db069ca0..ea259e52135 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -83,10 +83,6 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command { &s.InitFlags.CloudProvider, "cloud-provider", "", `Enable cloud provider features (external load-balancers, storage, etc), e.g. "gce"`, ) - cmd.PersistentFlags().BoolVar( - &s.InitFlags.Schedulable, "schedule-pods-here", false, - `Allow to schedule workload to the node`, - ) cmd.PersistentFlags().StringVar( &s.InitFlags.Versions.Kubernetes, "use-kubernetes-version", kubeadmapi.DefaultKubernetesVersion, `Choose a specific Kubernetes version for the control plane`, @@ -99,15 +95,15 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command { ) cmd.PersistentFlags().StringVar( &s.InitFlags.API.Etcd.ExternalCAFile, "external-etcd-cafile", "", - "etcd certificate authority certificate file", + "etcd certificate authority certificate file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().StringVar( &s.InitFlags.API.Etcd.ExternalCertFile, "external-etcd-certfile", "", - "etcd client certificate file", + "etcd client certificate file. Note: The path must be in /etc/ssl/certs", ) cmd.PersistentFlags().StringVar( &s.InitFlags.API.Etcd.ExternalKeyFile, "external-etcd-keyfile", "", - "etcd client key file", + "etcd client key file. Note: The path must be in /etc/ssl/certs", ) return cmd @@ -136,8 +132,18 @@ func RunInit(out io.Writer, cmd *cobra.Command, args []string, s *kubeadmapi.Kub // TODO(phase1+) create a custom flag if s.InitFlags.CloudProvider != "" { - if _, ok := kubeadmapi.SupportedCloudProviders[s.InitFlags.CloudProvider]; !ok { - return fmt.Errorf(" cloud provider %q is not supported, you can use any of %v, or leave it unset", s.InitFlags.CloudProvider, kubeadmapi.ListOfCloudProviders) + found := false + for _, provider := range kubeadmapi.ListOfCloudProviders { + if provider == s.InitFlags.CloudProvider { + found = true + break + } + } + + if found { + fmt.Printf(" cloud provider %q initialized for the control plane. Remember to set the same cloud provider flag on the kubelet.\n", s.InitFlags.CloudProvider) + } else { + return fmt.Errorf(" cloud provider %q is not supported, you can use any of %v, or leave it unset.\n", s.InitFlags.CloudProvider, kubeadmapi.ListOfCloudProviders) } } @@ -179,7 +185,8 @@ func RunInit(out io.Writer, cmd *cobra.Command, args []string, s *kubeadmapi.Kub return err } - if err := kubemaster.UpdateMasterRoleLabelsAndTaints(client, s.Schedulable); err != nil { + schedulePodsOnMaster := false + if err := kubemaster.UpdateMasterRoleLabelsAndTaints(client, schedulePodsOnMaster); err != nil { return err } diff --git a/cmd/kubeadm/app/cmd/version.go b/cmd/kubeadm/app/cmd/version.go new file mode 100644 index 00000000000..40114489c02 --- /dev/null +++ b/cmd/kubeadm/app/cmd/version.go @@ -0,0 +1,44 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cmd + +import ( + "fmt" + "io" + + "github.com/spf13/cobra" + + cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/version" +) + +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) + cmdutil.CheckErr(err) + }, + } + return cmd +} + +func RunVersion(out io.Writer, cmd *cobra.Command) error { + fmt.Fprintf(out, "kubeadm version: %#v\n", version.Get()) + return nil +} diff --git a/cmd/kubeadm/app/kubeadm.go b/cmd/kubeadm/app/kubeadm.go index 1a288e800ca..b275443cc69 100644 --- a/cmd/kubeadm/app/kubeadm.go +++ b/cmd/kubeadm/app/kubeadm.go @@ -20,6 +20,7 @@ import ( "fmt" "os" "strings" + "runtime" "github.com/renstrom/dedent" "github.com/spf13/pflag" @@ -46,7 +47,7 @@ func getEnvParams() map[string]string { "host_pki_path": "/etc/kubernetes/pki", "host_etcd_path": "/var/lib/etcd", "hyperkube_image": "", - "discovery_image": "dgoodwin/kubediscovery:latest", // TODO(phase1): fmt.Sprintf("gcr.io/google_containers/kube-discovery-%s:%s", runtime.GOARCH, "1.0"), + "discovery_image": fmt.Sprintf("gcr.io/google_containers/kube-discovery-%s:%s", runtime.GOARCH, "1.0"), "etcd_image": "", "component_loglevel": "--v=4", } diff --git a/cmd/kubeadm/app/master/manifests.go b/cmd/kubeadm/app/master/manifests.go index 0b99c6093e6..df0b7cbeb2c 100644 --- a/cmd/kubeadm/app/master/manifests.go +++ b/cmd/kubeadm/app/master/manifests.go @@ -220,7 +220,7 @@ func componentPod(container api.Container, volumes ...api.Volume) api.Pod { func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command []string) { baseFlags := map[string][]string{ apiServer: { - "--address=127.0.0.1", + "--insecure-bind-address=127.0.0.1", "--etcd-servers=http://127.0.0.1:2379", "--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota", "--service-cluster-ip-range=" + s.InitFlags.Services.CIDR.String(), @@ -233,7 +233,7 @@ func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command "--allow-privileged", }, controllerManager: { - // TODO(phase1+): consider adding --address=127.0.0.1 in order to not expose the cm port to the rest of the world + "--address=127.0.0.1", "--leader-elect", "--master=127.0.0.1:8080", "--cluster-name=" + DefaultClusterName, @@ -244,7 +244,7 @@ func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command "--insecure-experimental-approve-all-kubelet-csrs-for-group=system:kubelet-bootstrap", }, scheduler: { - // TODO(phase1+): consider adding --address=127.0.0.1 in order to not expose the scheduler port to the rest of the world + "--address=127.0.0.1", "--leader-elect", "--master=127.0.0.1:8080", }, diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index c0b5f544511..752349848bc 100755 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -35,6 +35,7 @@ kube::golang::server_targets() { cmd/kube-apiserver cmd/kube-controller-manager cmd/kubelet + cmd/kubeadm cmd/kubemark cmd/hyperkube plugin/cmd/kube-scheduler