Commit b17e107d authored by Lucas Käldström's avatar Lucas Käldström

Various improvements plus added a version command

parent a023085a
...@@ -64,13 +64,12 @@ type InitFlags struct { ...@@ -64,13 +64,12 @@ type InitFlags struct {
Kubernetes string Kubernetes string
} }
CloudProvider string CloudProvider string
Schedulable bool
} }
const ( const (
DefaultServiceDNSDomain = "cluster.local" DefaultServiceDNSDomain = "cluster.local"
DefaultServicesCIDRString = "100.64.0.0/12" // Carrier-grade NAT range (RFC 6598) DefaultServicesCIDRString = "100.64.0.0/12" // Carrier-grade NAT range (RFC 6598)
DefaultKubernetesVersion = "v1.4.0-beta.10" DefaultKubernetesVersion = "v1.4.0"
) )
var ( var (
...@@ -86,15 +85,10 @@ var ( ...@@ -86,15 +85,10 @@ var (
"rackspace", "rackspace",
"vsphere", "vsphere",
} }
SupportedCloudProviders map[string]bool
) )
func init() { func init() {
_, DefaultServicesCIDR, _ = net.ParseCIDR(DefaultServicesCIDRString) _, 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. // JoinFlags holds values for "kubeadm join" command flags.
......
...@@ -84,6 +84,7 @@ func NewKubeadmCommand(f *cmdutil.Factory, in io.Reader, out, err io.Writer, env ...@@ -84,6 +84,7 @@ func NewKubeadmCommand(f *cmdutil.Factory, in io.Reader, out, err io.Writer, env
cmds.AddCommand(NewCmdInit(out, s)) cmds.AddCommand(NewCmdInit(out, s))
cmds.AddCommand(NewCmdJoin(out, s)) cmds.AddCommand(NewCmdJoin(out, s))
cmds.AddCommand(NewCmdVersion(out))
return cmds return cmds
} }
...@@ -83,10 +83,6 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command { ...@@ -83,10 +83,6 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command {
&s.InitFlags.CloudProvider, "cloud-provider", "", &s.InitFlags.CloudProvider, "cloud-provider", "",
`Enable cloud provider features (external load-balancers, storage, etc), e.g. "gce"`, `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( cmd.PersistentFlags().StringVar(
&s.InitFlags.Versions.Kubernetes, "use-kubernetes-version", kubeadmapi.DefaultKubernetesVersion, &s.InitFlags.Versions.Kubernetes, "use-kubernetes-version", kubeadmapi.DefaultKubernetesVersion,
`Choose a specific Kubernetes version for the control plane`, `Choose a specific Kubernetes version for the control plane`,
...@@ -99,15 +95,15 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command { ...@@ -99,15 +95,15 @@ func NewCmdInit(out io.Writer, s *kubeadmapi.KubeadmConfig) *cobra.Command {
) )
cmd.PersistentFlags().StringVar( cmd.PersistentFlags().StringVar(
&s.InitFlags.API.Etcd.ExternalCAFile, "external-etcd-cafile", "", &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( cmd.PersistentFlags().StringVar(
&s.InitFlags.API.Etcd.ExternalCertFile, "external-etcd-certfile", "", &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( cmd.PersistentFlags().StringVar(
&s.InitFlags.API.Etcd.ExternalKeyFile, "external-etcd-keyfile", "", &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 return cmd
...@@ -136,8 +132,18 @@ func RunInit(out io.Writer, cmd *cobra.Command, args []string, s *kubeadmapi.Kub ...@@ -136,8 +132,18 @@ func RunInit(out io.Writer, cmd *cobra.Command, args []string, s *kubeadmapi.Kub
// TODO(phase1+) create a custom flag // TODO(phase1+) create a custom flag
if s.InitFlags.CloudProvider != "" { if s.InitFlags.CloudProvider != "" {
if _, ok := kubeadmapi.SupportedCloudProviders[s.InitFlags.CloudProvider]; !ok { found := false
return fmt.Errorf("<cmd/init> cloud provider %q is not supported, you can use any of %v, or leave it unset", s.InitFlags.CloudProvider, kubeadmapi.ListOfCloudProviders) for _, provider := range kubeadmapi.ListOfCloudProviders {
if provider == s.InitFlags.CloudProvider {
found = true
break
}
}
if found {
fmt.Printf("<cmd/init> 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("<cmd/init> 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 ...@@ -179,7 +185,8 @@ func RunInit(out io.Writer, cmd *cobra.Command, args []string, s *kubeadmapi.Kub
return err return err
} }
if err := kubemaster.UpdateMasterRoleLabelsAndTaints(client, s.Schedulable); err != nil { schedulePodsOnMaster := false
if err := kubemaster.UpdateMasterRoleLabelsAndTaints(client, schedulePodsOnMaster); err != nil {
return err return err
} }
......
/*
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
}
...@@ -20,6 +20,7 @@ import ( ...@@ -20,6 +20,7 @@ import (
"fmt" "fmt"
"os" "os"
"strings" "strings"
"runtime"
"github.com/renstrom/dedent" "github.com/renstrom/dedent"
"github.com/spf13/pflag" "github.com/spf13/pflag"
...@@ -46,7 +47,7 @@ func getEnvParams() map[string]string { ...@@ -46,7 +47,7 @@ func getEnvParams() map[string]string {
"host_pki_path": "/etc/kubernetes/pki", "host_pki_path": "/etc/kubernetes/pki",
"host_etcd_path": "/var/lib/etcd", "host_etcd_path": "/var/lib/etcd",
"hyperkube_image": "", "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": "", "etcd_image": "",
"component_loglevel": "--v=4", "component_loglevel": "--v=4",
} }
......
...@@ -220,7 +220,7 @@ func componentPod(container api.Container, volumes ...api.Volume) api.Pod { ...@@ -220,7 +220,7 @@ func componentPod(container api.Container, volumes ...api.Volume) api.Pod {
func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command []string) { func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command []string) {
baseFlags := map[string][]string{ baseFlags := map[string][]string{
apiServer: { apiServer: {
"--address=127.0.0.1", "--insecure-bind-address=127.0.0.1",
"--etcd-servers=http://127.0.0.1:2379", "--etcd-servers=http://127.0.0.1:2379",
"--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota", "--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota",
"--service-cluster-ip-range=" + s.InitFlags.Services.CIDR.String(), "--service-cluster-ip-range=" + s.InitFlags.Services.CIDR.String(),
...@@ -233,7 +233,7 @@ func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command ...@@ -233,7 +233,7 @@ func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command
"--allow-privileged", "--allow-privileged",
}, },
controllerManager: { 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", "--leader-elect",
"--master=127.0.0.1:8080", "--master=127.0.0.1:8080",
"--cluster-name=" + DefaultClusterName, "--cluster-name=" + DefaultClusterName,
...@@ -244,7 +244,7 @@ func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command ...@@ -244,7 +244,7 @@ func getComponentCommand(component string, s *kubeadmapi.KubeadmConfig) (command
"--insecure-experimental-approve-all-kubelet-csrs-for-group=system:kubelet-bootstrap", "--insecure-experimental-approve-all-kubelet-csrs-for-group=system:kubelet-bootstrap",
}, },
scheduler: { 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", "--leader-elect",
"--master=127.0.0.1:8080", "--master=127.0.0.1:8080",
}, },
......
...@@ -35,6 +35,7 @@ kube::golang::server_targets() { ...@@ -35,6 +35,7 @@ kube::golang::server_targets() {
cmd/kube-apiserver cmd/kube-apiserver
cmd/kube-controller-manager cmd/kube-controller-manager
cmd/kubelet cmd/kubelet
cmd/kubeadm
cmd/kubemark cmd/kubemark
cmd/hyperkube cmd/hyperkube
plugin/cmd/kube-scheduler plugin/cmd/kube-scheduler
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment