From c406665b2b1fdec98cd321c427896f6e4b959530 Mon Sep 17 00:00:00 2001 From: Jeff Lowdermilk Date: Thu, 18 Feb 2016 15:58:08 -0800 Subject: [PATCH] Plumb node labels through salt Expose node-labels flag on kubelet for gce via a startup script env var. --- cluster/common.sh | 5 +++++ cluster/gce/configure-vm.sh | 7 ++++++- cluster/saltbase/salt/kubelet/default | 7 ++++++- cmd/kubelet/app/options/options.go | 2 +- docs/admin/kubelet.md | 2 +- hack/verify-flags/exceptions.txt | 3 +-- 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/cluster/common.sh b/cluster/common.sh index 6662a0f3f4..80aef9a6a8 100755 --- a/cluster/common.sh +++ b/cluster/common.sh @@ -600,6 +600,11 @@ KUBEPROXY_TEST_LOG_LEVEL: $(yaml-quote ${KUBEPROXY_TEST_LOG_LEVEL}) EOF fi fi + if [ -n "${NODE_LABELS:-}" ]; then + cat >>$file <>$file <>/srv/salt-overlay/pillar/cluster-params.sls + cat <>/srv/salt-overlay/pillar/cluster-params.sls enable_custom_metrics: '$(echo "${ENABLE_CUSTOM_METRICS}" | sed -e "s/'/''/g")' +EOF + fi + if [ -n "${NODE_LABELS:-}" ]; then + cat <>/srv/salt-overlay/pillar/cluster-params.sls +node_labels: '$(echo "${NODE_LABELS}" | sed -e "s/'/''/g")' EOF fi } diff --git a/cluster/saltbase/salt/kubelet/default b/cluster/saltbase/salt/kubelet/default index 74102e7728..c1ba52a5c8 100644 --- a/cluster/saltbase/salt/kubelet/default +++ b/cluster/saltbase/salt/kubelet/default @@ -179,5 +179,10 @@ {% set enable_custom_metrics="--enable-custom-metrics=" + pillar['enable_custom_metrics'] %} {% endif -%} +{% set node_labels = "" %} +{% if pillar['node_labels'] is defined -%} + {% set node_labels="--node-labels=" + pillar['node_labels'] %} +{% endif -%} + # 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']}} {{log_level}} {{cluster_dns}} {{cluster_domain}} {{docker_root}} {{kubelet_root}} {{configure_cbr0}} {{non_masquerade_cidr}} {{cgroup_root}} {{system_container}} {{pod_cidr}} {{ master_kubelet_args }} {{cpu_cfs_quota}} {{network_plugin}} {{kubelet_port}} {{experimental_flannel_overlay}} {{ reconcile_cidr_args }} {{ hairpin_mode }} {{enable_custom_metrics}} {{runtime_container}} {{kubelet_container}} {{test_args}}" +DAEMON_ARGS="{{daemon_args}} {{api_servers_with_port}} {{debugging_handlers}} {{hostname_override}} {{cloud_provider}} {{config}} {{manifest_url}} --allow-privileged={{pillar['allow_privileged']}} {{log_level}} {{cluster_dns}} {{cluster_domain}} {{docker_root}} {{kubelet_root}} {{configure_cbr0}} {{non_masquerade_cidr}} {{cgroup_root}} {{system_container}} {{pod_cidr}} {{ master_kubelet_args }} {{cpu_cfs_quota}} {{network_plugin}} {{kubelet_port}} {{experimental_flannel_overlay}} {{ reconcile_cidr_args }} {{ hairpin_mode }} {{enable_custom_metrics}} {{runtime_container}} {{kubelet_container}} {{node_labels}} {{test_args}}" diff --git a/cmd/kubelet/app/options/options.go b/cmd/kubelet/app/options/options.go index 8ac554e971..cb31f0dace 100644 --- a/cmd/kubelet/app/options/options.go +++ b/cmd/kubelet/app/options/options.go @@ -181,7 +181,7 @@ func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) { fs.DurationVar(&s.StreamingConnectionIdleTimeout.Duration, "streaming-connection-idle-timeout", s.StreamingConnectionIdleTimeout.Duration, "Maximum time a streaming connection can be idle before the connection is automatically closed. 0 indicates no timeout. Example: '5m'") fs.DurationVar(&s.NodeStatusUpdateFrequency.Duration, "node-status-update-frequency", s.NodeStatusUpdateFrequency.Duration, "Specifies how often kubelet posts node status to master. Note: be cautious when changing the constant, it must work with nodeMonitorGracePeriod in nodecontroller. Default: 10s") bindableNodeLabels := util.ConfigurationMap(s.NodeLabels) - fs.Var(&bindableNodeLabels, "node-labels", " Labels to add when registering the node in the cluster. Labels must are key=value pairs separated by ','.") + fs.Var(&bindableNodeLabels, "node-labels", " Labels to add when registering the node in the cluster. Labels must be key=value pairs separated by ','.") fs.DurationVar(&s.ImageMinimumGCAge.Duration, "minimum-image-ttl-duration", s.ImageMinimumGCAge.Duration, "Minimum age for a unused image before it is garbage collected. Examples: '300ms', '10s' or '2h45m'. Default: '2m'") fs.IntVar(&s.ImageGCHighThresholdPercent, "image-gc-high-threshold", s.ImageGCHighThresholdPercent, "The percent of disk usage after which image garbage collection is always run. Default: 90%") fs.IntVar(&s.ImageGCLowThresholdPercent, "image-gc-low-threshold", s.ImageGCLowThresholdPercent, "The percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. Default: 80%") diff --git a/docs/admin/kubelet.md b/docs/admin/kubelet.md index e5b738127a..c641e20aad 100644 --- a/docs/admin/kubelet.md +++ b/docs/admin/kubelet.md @@ -120,7 +120,7 @@ kubelet --network-plugin="": The name of the network plugin to be invoked for various events in kubelet/pod lifecycle --network-plugin-dir="/usr/libexec/kubernetes/kubelet-plugins/net/exec/": The full path of the directory in which to search for network plugins --node-ip="": IP address of the node. If set, kubelet will use this IP address for the node - --node-labels=: Labels to add when registering the node in the cluster. Labels must are key=value pairs separated by ','. + --node-labels=: Labels to add when registering the node in the cluster. Labels must be key=value pairs separated by ','. --node-status-update-frequency=10s: Specifies how often kubelet posts node status to master. Note: be cautious when changing the constant, it must work with nodeMonitorGracePeriod in nodecontroller. Default: 10s --non-masquerade-cidr="10.0.0.0/8": Traffic to IPs outside this range will use IP masquerade. --oom-score-adj=-999: The oom-score-adj value for kubelet process. Values must be within the range [-1000, 1000] diff --git a/hack/verify-flags/exceptions.txt b/hack/verify-flags/exceptions.txt index 8156866921..b330fa18e2 100644 --- a/hack/verify-flags/exceptions.txt +++ b/hack/verify-flags/exceptions.txt @@ -61,6 +61,7 @@ cluster/saltbase/salt/kubelet/default: {% set api_servers_with_port = api_serve cluster/saltbase/salt/kubelet/default: {% set api_servers_with_port = api_servers -%} cluster/saltbase/salt/kubelet/default: {% set enable_custom_metrics="--enable-custom-metrics=" + pillar['enable_custom_metrics'] %} cluster/saltbase/salt/kubelet/default: {% set kubelet_port="--port=" + pillar['kubelet_port'] %} +cluster/saltbase/salt/kubelet/default: {% set node_labels="--node-labels=" + pillar['node_labels'] %} cluster/saltbase/salt/opencontrail-networking-master/init.sls: - 'SERVICE_CLUSTER_IP_RANGE': '{{ pillar.get('service_cluster_ip_range') }}' cluster/saltbase/salt/opencontrail-networking-minion/init.sls: - 'SERVICE_CLUSTER_IP_RANGE': '{{ pillar.get('service_cluster_ip_range') }}' cluster/saltbase/salt/supervisor/kubelet-checker.sh: {% set kubelet_port = pillar['kubelet_port'] -%} @@ -82,8 +83,6 @@ docs/getting-started-guides/coreos/azure/lib/deployment_logic/kubernetes.js:var docs/getting-started-guides/docker-multinode/skydns-rc.yaml.in: - -kube_master_url=http://{kube_server_url}:8080 examples/cluster-dns/images/frontend/client.py: service_address = socket.gethostbyname(hostname) examples/vitess/env.sh: node_ip=$(get_node_ip) -hack/jenkins/e2e.sh: local -r cluster_name="$3" -hack/jenkins/e2e.sh:# $3 cluster_name: determines E2E_CLUSTER_NAME and E2E_NETWORK hack/jenkins/job-builder-image/Dockerfile:# JJB configuration lives in /etc/jenkins_jobs/jenkins_jobs.ini hack/jenkins/update-jobs.sh: docker cp jenkins_jobs.ini job-builder:/etc/jenkins_jobs hack/jenkins/update-jobs.sh: echo "jenkins_jobs.ini not found in workspace" >&2