add flag to kubelet to ignore the cidr passed down by the apiserver on the master

This commit is contained in:
Mike Danese 2015-09-15 21:53:33 -07:00
parent 219294623e
commit fa60bbe8e6
5 changed files with 55 additions and 23 deletions

View File

@ -22,6 +22,8 @@
{% set api_servers_with_port = api_servers + ":6443" -%} {% set api_servers_with_port = api_servers + ":6443" -%}
{% endif -%} {% endif -%}
{% set master_kubelet_args = "" %}
{% set debugging_handlers = "--enable-debugging-handlers=true" -%} {% set debugging_handlers = "--enable-debugging-handlers=true" -%}
{% if grains['roles'][0] == 'kubernetes-master' -%} {% if grains['roles'][0] == 'kubernetes-master' -%}
@ -31,6 +33,7 @@
# running on the master. # running on the master.
{% if grains.kubelet_api_servers is defined -%} {% if grains.kubelet_api_servers is defined -%}
{% set api_servers_with_port = "--api-servers=https://" + grains.kubelet_api_servers -%} {% set api_servers_with_port = "--api-servers=https://" + grains.kubelet_api_servers -%}
{% set master_kubelet_args = master_kubelet_args + "--register-schedulable=false --reconcile-cidr=false" -%}
{% else -%} {% else -%}
{% set api_servers_with_port = "" -%} {% set api_servers_with_port = "" -%}
{% endif -%} {% endif -%}
@ -114,4 +117,4 @@
{% endif -%} {% endif -%}
# test_args has to be kept at the end, so they'll overwrite any prior configuration # test_args has to be kept at the end, so they'll overwrite any prior configuration
DAEMON_ARGS="{{daemon_args}} {{api_servers_with_port}} {{debugging_handlers}} {{hostname_override}} {{cloud_provider}} {{config}} {{manifest_url}} --allow-privileged={{pillar['allow_privileged']}} {{pillar['log_level']}} {{cluster_dns}} {{cluster_domain}} {{docker_root}} {{kubelet_root}} {{configure_cbr0}} {{cgroup_root}} {{system_container}} {{pod_cidr}} {{cpu_cfs_quota}} {{network_plugin}} {{test_args}}" DAEMON_ARGS="{{daemon_args}} {{api_servers_with_port}} {{debugging_handlers}} {{hostname_override}} {{cloud_provider}} {{config}} {{manifest_url}} --allow-privileged={{pillar['allow_privileged']}} {{pillar['log_level']}} {{cluster_dns}} {{cluster_domain}} {{docker_root}} {{kubelet_root}} {{configure_cbr0}} {{cgroup_root}} {{system_container}} {{pod_cidr}} {{ master_kubelet_args }} {{cpu_cfs_quota}} {{network_plugin}} {{test_args}}"

View File

@ -119,6 +119,7 @@ type KubeletServer struct {
Port uint Port uint
ReadOnlyPort uint ReadOnlyPort uint
RegisterNode bool RegisterNode bool
RegisterSchedulable bool
RegistryBurst int RegistryBurst int
RegistryPullQPS float64 RegistryPullQPS float64
ResolverConfig string ResolverConfig string
@ -133,6 +134,7 @@ type KubeletServer struct {
SystemContainer string SystemContainer string
TLSCertFile string TLSCertFile string
TLSPrivateKeyFile string TLSPrivateKeyFile string
ReconcileCIDR bool
// Flags intended for testing // Flags intended for testing
// Is the kubelet containerized? // Is the kubelet containerized?
@ -195,6 +197,7 @@ func NewKubeletServer() *KubeletServer {
Port: ports.KubeletPort, Port: ports.KubeletPort,
ReadOnlyPort: ports.KubeletReadOnlyPort, ReadOnlyPort: ports.KubeletReadOnlyPort,
RegisterNode: true, // will be ignored if no apiserver is configured RegisterNode: true, // will be ignored if no apiserver is configured
RegisterSchedulable: true,
RegistryBurst: 10, RegistryBurst: 10,
ResourceContainer: "/kubelet", ResourceContainer: "/kubelet",
RktPath: "", RktPath: "",
@ -202,6 +205,7 @@ func NewKubeletServer() *KubeletServer {
RootDirectory: defaultRootDir, RootDirectory: defaultRootDir,
SyncFrequency: 10 * time.Second, SyncFrequency: 10 * time.Second,
SystemContainer: "", SystemContainer: "",
ReconcileCIDR: true,
} }
} }
@ -279,6 +283,8 @@ func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) {
fs.Float64Var(&s.ChaosChance, "chaos-chance", s.ChaosChance, "If > 0.0, introduce random client errors and latency. Intended for testing. [default=0.0]") fs.Float64Var(&s.ChaosChance, "chaos-chance", s.ChaosChance, "If > 0.0, introduce random client errors and latency. Intended for testing. [default=0.0]")
fs.BoolVar(&s.Containerized, "containerized", s.Containerized, "Experimental support for running kubelet in a container. Intended for testing. [default=false]") fs.BoolVar(&s.Containerized, "containerized", s.Containerized, "Experimental support for running kubelet in a container. Intended for testing. [default=false]")
fs.Uint64Var(&s.MaxOpenFiles, "max-open-files", 1000000, "Number of files that can be opened by Kubelet process. [default=1000000]") fs.Uint64Var(&s.MaxOpenFiles, "max-open-files", 1000000, "Number of files that can be opened by Kubelet process. [default=1000000]")
fs.BoolVar(&s.ReconcileCIDR, "reconcile-cidr", s.ReconcileCIDR, "Reconcile node CIDR with the CIDR specified by the API server. No-op if register-node or configure-cbr0 is false. [default=true]")
fs.BoolVar(&s.RegisterSchedulable, "register-schedulable", s.RegisterSchedulable, "Register the node as schedulable. No-op if register-node is false. [default=true]")
} }
// KubeletConfig returns a KubeletConfig suitable for being run, or an error if the server setup // KubeletConfig returns a KubeletConfig suitable for being run, or an error if the server setup
@ -385,10 +391,12 @@ func (s *KubeletServer) KubeletConfig() (*KubeletConfig, error) {
OOMAdjuster: oom.NewOOMAdjuster(), OOMAdjuster: oom.NewOOMAdjuster(),
OSInterface: kubecontainer.RealOS{}, OSInterface: kubecontainer.RealOS{},
PodCIDR: s.PodCIDR, PodCIDR: s.PodCIDR,
ReconcileCIDR: s.ReconcileCIDR,
PodInfraContainerImage: s.PodInfraContainerImage, PodInfraContainerImage: s.PodInfraContainerImage,
Port: s.Port, Port: s.Port,
ReadOnlyPort: s.ReadOnlyPort, ReadOnlyPort: s.ReadOnlyPort,
RegisterNode: s.RegisterNode, RegisterNode: s.RegisterNode,
RegisterSchedulable: s.RegisterSchedulable,
RegistryBurst: s.RegistryBurst, RegistryBurst: s.RegistryBurst,
RegistryPullQPS: s.RegistryPullQPS, RegistryPullQPS: s.RegistryPullQPS,
ResolverConfig: s.ResolverConfig, ResolverConfig: s.ResolverConfig,
@ -647,6 +655,7 @@ func SimpleKubelet(client *client.Client,
Port: port, Port: port,
ReadOnlyPort: readOnlyPort, ReadOnlyPort: readOnlyPort,
RegisterNode: true, RegisterNode: true,
RegisterSchedulable: true,
ResolverConfig: kubelet.ResolvConfDefault, ResolverConfig: kubelet.ResolvConfDefault,
ResourceContainer: "/kubelet", ResourceContainer: "/kubelet",
RootDirectory: rootDir, RootDirectory: rootDir,
@ -827,12 +836,14 @@ type KubeletConfig struct {
OOMAdjuster *oom.OOMAdjuster OOMAdjuster *oom.OOMAdjuster
OSInterface kubecontainer.OSInterface OSInterface kubecontainer.OSInterface
PodCIDR string PodCIDR string
ReconcileCIDR bool
PodConfig *config.PodConfig PodConfig *config.PodConfig
PodInfraContainerImage string PodInfraContainerImage string
Port uint Port uint
ReadOnlyPort uint ReadOnlyPort uint
Recorder record.EventRecorder Recorder record.EventRecorder
RegisterNode bool RegisterNode bool
RegisterSchedulable bool
RegistryBurst int RegistryBurst int
RegistryPullQPS float64 RegistryPullQPS float64
ResolverConfig string ResolverConfig string
@ -890,6 +901,7 @@ func CreateAndInitKubelet(kc *KubeletConfig) (k KubeletBootstrap, pc *config.Pod
gcPolicy, gcPolicy,
pc.SeenAllSources, pc.SeenAllSources,
kc.RegisterNode, kc.RegisterNode,
kc.RegisterSchedulable,
kc.StandaloneMode, kc.StandaloneMode,
kc.ClusterDomain, kc.ClusterDomain,
kc.ClusterDNS, kc.ClusterDNS,
@ -916,6 +928,7 @@ func CreateAndInitKubelet(kc *KubeletConfig) (k KubeletBootstrap, pc *config.Pod
kc.SystemContainer, kc.SystemContainer,
kc.ConfigureCBR0, kc.ConfigureCBR0,
kc.PodCIDR, kc.PodCIDR,
kc.ReconcileCIDR,
kc.MaxPods, kc.MaxPods,
kc.DockerExecHandler, kc.DockerExecHandler,
kc.ResolverConfig, kc.ResolverConfig,

View File

@ -322,6 +322,7 @@ func (ks *KubeletExecutorServer) createAndInitKubelet(
gcPolicy, gcPolicy,
pc.SeenAllSources, pc.SeenAllSources,
kc.RegisterNode, kc.RegisterNode,
kc.RegisterSchedulable,
kc.StandaloneMode, kc.StandaloneMode,
kc.ClusterDomain, kc.ClusterDomain,
net.IP(kc.ClusterDNS), net.IP(kc.ClusterDNS),
@ -348,6 +349,7 @@ func (ks *KubeletExecutorServer) createAndInitKubelet(
kc.SystemContainer, kc.SystemContainer,
kc.ConfigureCBR0, kc.ConfigureCBR0,
kc.PodCIDR, kc.PodCIDR,
kc.ReconcileCIDR,
kc.MaxPods, kc.MaxPods,
kc.DockerExecHandler, kc.DockerExecHandler,
kc.ResolverConfig, kc.ResolverConfig,

View File

@ -301,4 +301,6 @@ retry_time
file_content_in_loop file_content_in_loop
cpu-cfs-quota cpu-cfs-quota
terminated-pod-gc-threshold terminated-pod-gc-threshold
reconcile-cidr
register-schedulable

View File

@ -150,6 +150,7 @@ func NewMainKubelet(
containerGCPolicy ContainerGCPolicy, containerGCPolicy ContainerGCPolicy,
sourcesReady SourcesReadyFn, sourcesReady SourcesReadyFn,
registerNode bool, registerNode bool,
registerSchedulable bool,
standaloneMode bool, standaloneMode bool,
clusterDomain string, clusterDomain string,
clusterDNS net.IP, clusterDNS net.IP,
@ -176,6 +177,7 @@ func NewMainKubelet(
systemContainer string, systemContainer string,
configureCBR0 bool, configureCBR0 bool,
podCIDR string, podCIDR string,
reconcileCIDR bool,
pods int, pods int,
dockerExecHandler dockertools.ExecHandler, dockerExecHandler dockertools.ExecHandler,
resolverConfig string, resolverConfig string,
@ -263,6 +265,7 @@ func NewMainKubelet(
httpClient: &http.Client{}, httpClient: &http.Client{},
sourcesReady: sourcesReady, sourcesReady: sourcesReady,
registerNode: registerNode, registerNode: registerNode,
registerSchedulable: registerSchedulable,
standaloneMode: standaloneMode, standaloneMode: standaloneMode,
clusterDomain: clusterDomain, clusterDomain: clusterDomain,
clusterDNS: clusterDNS, clusterDNS: clusterDNS,
@ -290,6 +293,7 @@ func NewMainKubelet(
writer: writer, writer: writer,
configureCBR0: configureCBR0, configureCBR0: configureCBR0,
podCIDR: podCIDR, podCIDR: podCIDR,
reconcileCIDR: reconcileCIDR,
pods: pods, pods: pods,
syncLoopMonitor: util.AtomicValue{}, syncLoopMonitor: util.AtomicValue{},
resolverConfig: resolverConfig, resolverConfig: resolverConfig,
@ -465,6 +469,8 @@ type Kubelet struct {
// Set to true to have the node register itself with the apiserver. // Set to true to have the node register itself with the apiserver.
registerNode bool registerNode bool
// Set to true to have the node register itself as schedulable.
registerSchedulable bool
// for internal book keeping; access only from within registerWithApiserver // for internal book keeping; access only from within registerWithApiserver
registrationCompleted bool registrationCompleted bool
@ -574,6 +580,7 @@ type Kubelet struct {
// the correct state. // the correct state.
configureCBR0 bool configureCBR0 bool
podCIDR string podCIDR string
reconcileCIDR bool
// Number of Pods which can be run by this Kubelet // Number of Pods which can be run by this Kubelet
pods int pods int
@ -819,6 +826,9 @@ func (kl *Kubelet) initialNodeStatus() (*api.Node, error) {
Name: kl.nodeName, Name: kl.nodeName,
Labels: map[string]string{"kubernetes.io/hostname": kl.hostname}, Labels: map[string]string{"kubernetes.io/hostname": kl.hostname},
}, },
Spec: api.NodeSpec{
Unschedulable: !kl.registerSchedulable,
},
} }
if kl.cloud != nil { if kl.cloud != nil {
instances, ok := kl.cloud.Instances() instances, ok := kl.cloud.Instances()
@ -2453,7 +2463,9 @@ func (kl *Kubelet) tryUpdateNodeStatus() error {
return fmt.Errorf("no node instance returned for %q", kl.nodeName) return fmt.Errorf("no node instance returned for %q", kl.nodeName)
} }
kl.networkConfigMutex.Lock() kl.networkConfigMutex.Lock()
if kl.reconcileCIDR {
kl.podCIDR = node.Spec.PodCIDR kl.podCIDR = node.Spec.PodCIDR
}
kl.networkConfigMutex.Unlock() kl.networkConfigMutex.Unlock()
if err := kl.setNodeStatus(node); err != nil { if err := kl.setNodeStatus(node); err != nil {