2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								/ * 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-03 08:25:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Copyright  2015  The  Kubernetes  Authors . 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								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  kubelet 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								import  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"fmt" 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-12 13:21:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"net" 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									"net/http" 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"net/url" 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-07 14:41:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"os" 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-30 01:20:50 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"path" 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-28 08:29:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"sort" 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									"strings" 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 18:19:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"sync" 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-04 12:24:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"sync/atomic" 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									"time" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:05:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"github.com/golang/glog" 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 04:13:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									clientgoclientset  "k8s.io/client-go/kubernetes" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-16 11:00:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									cadvisorapi  "github.com/google/cadvisor/info/v1" 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-11 22:09:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/apimachinery/pkg/labels" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"k8s.io/apimachinery/pkg/types" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									utilruntime  "k8s.io/apimachinery/pkg/util/runtime" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"k8s.io/apimachinery/pkg/util/sets" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"k8s.io/apimachinery/pkg/util/wait" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/api" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/api/resource" 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/api/v1" 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-17 02:23:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/apis/componentconfig" 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-07 00:55:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									componentconfigv1alpha1  "k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1" 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 05:40:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/client/cache" 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-10 16:49:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/client/clientset_generated/clientset" 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 05:40:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/client/record" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/cloudprovider" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/fields" 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 15:27:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									internalapi  "k8s.io/kubernetes/pkg/kubelet/api" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/cadvisor" 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 08:09:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/cm" 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-27 01:58:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/config" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kubecontainer  "k8s.io/kubernetes/pkg/kubelet/container" 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 09:25:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/dockershim" 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-04 11:49:19 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									dockerremote  "k8s.io/kubernetes/pkg/kubelet/dockershim/remote" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/dockertools" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-13 08:32:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/events" 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-26 03:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/eviction" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-20 06:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/images" 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-08 15:40:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/kuberuntime" 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/lifecycle" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/metrics" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/network" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/pleg" 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 07:28:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kubepod  "k8s.io/kubernetes/pkg/kubelet/pod" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-26 01:39:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/prober" 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									proberesults  "k8s.io/kubernetes/pkg/kubelet/prober/results" 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-08 15:40:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/remote" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/rkt" 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-11 04:14:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/server" 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-15 03:19:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/server/stats" 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/server/streaming" 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-12 03:22:01 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/status" 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-19 16:53:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/sysctl" 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kubetypes  "k8s.io/kubernetes/pkg/kubelet/types" 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-21 01:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/util/format" 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-03 01:18:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/util/queue" 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-23 04:38:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/util/sliceutils" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-02 09:50:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/kubelet/volumemanager" 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 08:54:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/security/apparmor" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-11 06:08:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/util/bandwidth" 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-26 11:08:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/util/clock" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									utilconfig  "k8s.io/kubernetes/pkg/util/config" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 04:01:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									utildbus  "k8s.io/kubernetes/pkg/util/dbus" 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-15 09:01:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									utilexec  "k8s.io/kubernetes/pkg/util/exec" 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-09 10:58:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/util/flowcontrol" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:58:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/util/integer" 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-14 17:51:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kubeio  "k8s.io/kubernetes/pkg/util/io" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 04:01:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									utilipt  "k8s.io/kubernetes/pkg/util/iptables" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/util/mount" 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeutil  "k8s.io/kubernetes/pkg/util/node" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-04 08:28:33 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/util/oom" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/util/procfs" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-06 06:03:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/pkg/volume" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates" 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 08:37:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								const  ( 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 04:14:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Max amount of time to wait for the container runtime to come up.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-10 04:39:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									maxWaitForContainerRuntime  =  30  *  time . Second 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 05:04:45 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:06:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// nodeStatusUpdateRetry specifies how many times kubelet retries when posting node status failed.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nodeStatusUpdateRetry  =  5 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-28 04:03:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Location of container logs.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-15 12:32:50 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									ContainerLogsDir  =  "/var/log/containers" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-13 20:59:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-15 12:58:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// max backoff period, exported for the e2e test
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									MaxContainerBackOff  =  300  *  time . Second 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Capacity of the channel for storing pods to kill. A small number should
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// suffice because a goroutine is dedicated to check the channel and does
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// not block on anything else.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podKillingChannelCapacity  =  50 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-04 02:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Period for performing global cleanup tasks.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									housekeepingPeriod  =  time . Second  *  2 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-22 01:17:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-13 11:35:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Period for performing eviction monitoring.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO ensure this is in sync with internal cadvisor housekeeping.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									evictionMonitoringPeriod  =  time . Second  *  10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// The path in containers' filesystems where the hosts file is mounted.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-22 01:17:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									etcHostsPath  =  "/etc/hosts" 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-13 03:33:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Capacity of the channel for receiving pod lifecycle events. This number
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// is a bit arbitrary and may be adjusted in the future.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									plegChannelCapacity  =  1000 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 02:01:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Generic PLEG relies on relisting for discovering container events.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// A longer period means that kubelet will take longer to detect container
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// changes and to update pod status. On the other hand, a shorter period
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// will cause more frequent relisting (e.g., container runtime operations),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// leading to higher cpu usage.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Note that even though we set the period to 1s, the relisting itself can
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// take more than 1s to finish if the container runtime responds slowly
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// and/or when there are many container changes in one cycle.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									plegRelistPeriod  =  time . Second  *  1 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 02:01:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// backOffPeriod is the period to back off when pod syncing results in an
 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 02:01:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// error. It is also used as the base period for the exponential backoff
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// container restarts and image pulls.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									backOffPeriod  =  time . Second  *  10 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-03 05:29:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Period for performing container garbage collection.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ContainerGCPeriod  =  time . Minute 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Period for performing image garbage collection.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ImageGCPeriod  =  5  *  time . Minute 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-30 03:29:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:58:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Minimum number of dead containers to keep in a pod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									minDeadContainerInPod  =  1 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 08:37:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								) 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-20 11:17:44 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-16 04:24:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// SyncHandler is an interface implemented by Kubelet, for testability
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								type  SyncHandler  interface  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									HandlePodAdditions ( pods  [ ] * v1 . Pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									HandlePodUpdates ( pods  [ ] * v1 . Pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									HandlePodRemoves ( pods  [ ] * v1 . Pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									HandlePodReconcile ( pods  [ ] * v1 . Pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									HandlePodSyncs ( pods  [ ] * v1 . Pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									HandlePodCleanups ( )  error 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-16 04:24:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 09:54:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Option is a functional option type for Kubelet
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								type  Option  func ( * Kubelet ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// bootstrapping interface for kubelet, targets the initialization protocol
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								type  KubeletBootstrap  interface  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 09:03:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									GetConfiguration ( )  componentconfig . KubeletConfiguration 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									BirthCry ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									StartGarbageCollection ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ListenAndServe ( address  net . IP ,  port  uint ,  tlsOptions  * server . TLSOptions ,  auth  server . AuthInterface ,  enableDebuggingHandlers  bool ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ListenAndServeReadOnly ( address  net . IP ,  port  uint ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Run ( <- chan  kubetypes . PodUpdate ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									RunOnce ( <- chan  kubetypes . PodUpdate )  ( [ ] RunPodResult ,  error ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// create and initialize a Kubelet instance
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								type  KubeletBuilder  func ( kubeCfg  * componentconfig . KubeletConfiguration ,  kubeDeps  * KubeletDeps ,  standaloneMode  bool )  ( KubeletBootstrap ,  error ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// KubeletDeps is a bin for things we might consider "injected dependencies" -- objects constructed
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// at runtime that are necessary for running the Kubelet. This is a temporary solution for grouping
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// these objects while we figure out a more comprehensive dependency injection story for the Kubelet.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								type  KubeletDeps  struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO(mtaufen): KubeletBuilder:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                Mesos currently uses this as a hook to let them make their own call to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                let them wrap the KubeletBootstrap that CreateAndInitKubelet returns with
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                their own KubeletBootstrap. It's a useful hook. I need to think about what
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                a nice home for it would be. There seems to be a trend, between this and
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                the Options fields below, of providing hooks where you can add extra functionality
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                to the Kubelet for your solution. Maybe we should centralize these sorts of things?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Builder  KubeletBuilder 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO(mtaufen): ContainerRuntimeOptions and Options:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                Arrays of functions that can do arbitrary things to the Kubelet and the Runtime
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                seem like a difficult path to trace when it's time to debug something.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                I'm leaving these fields here for now, but there is likely an easier-to-follow
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                way to support their intended use cases. E.g. ContainerRuntimeOptions
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                is used by Mesos to set an environment variable in containers which has
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                some connection to their container GC. It seems that Mesos intends to use
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                Options to add additional node conditions that are updated as part of the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                Kubelet lifecycle (see https://github.com/kubernetes/kubernetes/pull/21521).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//                We should think about providing more explicit ways of doing these things.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ContainerRuntimeOptions  [ ] kubecontainer . Option 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Options                  [ ] Option 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Injected Dependencies
 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 04:13:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									Auth                server . AuthInterface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									CAdvisorInterface   cadvisor . Interface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Cloud               cloudprovider . Interface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ContainerManager    cm . ContainerManager 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									DockerClient        dockertools . DockerInterface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									EventClient         * clientset . Clientset 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									KubeClient          * clientset . Clientset 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									ExternalKubeClient  clientgoclientset . Interface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Mounter             mount . Interface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									NetworkPlugins      [ ] network . NetworkPlugin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									OOMAdjuster         * oom . OOMAdjuster 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									OSInterface         kubecontainer . OSInterface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									PodConfig           * config . PodConfig 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Recorder            record . EventRecorder 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									Writer              kubeio . Writer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									VolumePlugins       [ ] volume . VolumePlugin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									TLSOptions          * server . TLSOptions 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 04:27:09 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// makePodSourceConfig creates a config.PodConfig from the given
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// KubeletConfiguration or returns an error.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-16 14:10:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  makePodSourceConfig ( kubeCfg  * componentconfig . KubeletConfiguration ,  kubeDeps  * KubeletDeps ,  nodeName  types . NodeName )  ( * config . PodConfig ,  error )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									manifestURLHeader  :=  make ( http . Header ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeCfg . ManifestURLHeader  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										pieces  :=  strings . Split ( kubeCfg . ManifestURLHeader ,  ":" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  len ( pieces )  !=  2  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "manifest-url-header must have a single ':' key-value separator, got %q" ,  kubeCfg . ManifestURLHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										manifestURLHeader . Set ( pieces [ 0 ] ,  pieces [ 1 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// source of all configuration
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									cfg  :=  config . NewPodConfig ( config . PodConfigNotificationIncremental ,  kubeDeps . Recorder ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// define file config source
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeCfg . PodManifestPath  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Infof ( "Adding manifest file: %v" ,  kubeCfg . PodManifestPath ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										config . NewSourceFile ( kubeCfg . PodManifestPath ,  nodeName ,  kubeCfg . FileCheckFrequency . Duration ,  cfg . Channel ( kubetypes . FileSource ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// define url config source
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeCfg . ManifestURL  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Infof ( "Adding manifest url %q with HTTP header %v" ,  kubeCfg . ManifestURL ,  manifestURLHeader ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										config . NewSourceURL ( kubeCfg . ManifestURL ,  manifestURLHeader ,  nodeName ,  kubeCfg . HTTPCheckFrequency . Duration ,  cfg . Channel ( kubetypes . HTTPSource ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeDeps . KubeClient  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Infof ( "Watching apiserver" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										config . NewSourceApiserver ( kubeDeps . KubeClient ,  nodeName ,  cfg . Channel ( kubetypes . ApiserverSource ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  cfg ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 15:27:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  getRuntimeAndImageServices ( config  * componentconfig . KubeletConfiguration )  ( internalapi . RuntimeService ,  internalapi . ImageManagerService ,  error )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									rs ,  err  :=  remote . NewRemoteRuntimeService ( config . RemoteRuntimeEndpoint ,  config . RuntimeRequestTimeout . Duration ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									is ,  err  :=  remote . NewRemoteImageService ( config . RemoteImageEndpoint ,  config . RuntimeRequestTimeout . Duration ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  rs ,  is ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-27 01:58:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// NewMainKubelet instantiates a new Kubelet object along with all the required internal modules.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// No initialization of Kubelet and its modules should happen here.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  NewMainKubelet ( kubeCfg  * componentconfig . KubeletConfiguration ,  kubeDeps  * KubeletDeps ,  standaloneMode  bool )  ( * Kubelet ,  error )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeCfg . RootDirectory  ==  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  fmt . Errorf ( "invalid root directory %q" ,  kubeCfg . RootDirectory ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeCfg . SyncFrequency . Duration  <=  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  fmt . Errorf ( "invalid sync frequency %d" ,  kubeCfg . SyncFrequency . Duration ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeCfg . MakeIPTablesUtilChains  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  kubeCfg . IPTablesMasqueradeBit  >  31  ||  kubeCfg . IPTablesMasqueradeBit  <  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "iptables-masquerade-bit is not valid. Must be within [0, 31]" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  kubeCfg . IPTablesDropBit  >  31  ||  kubeCfg . IPTablesDropBit  <  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "iptables-drop-bit is not valid. Must be within [0, 31]" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  kubeCfg . IPTablesDropBit  ==  kubeCfg . IPTablesMasqueradeBit  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "iptables-masquerade-bit and iptables-drop-bit must be different" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									hostname  :=  nodeutil . GetHostname ( kubeCfg . HostnameOverride ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Query the cloud provider for our node name, default to hostname
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-16 14:10:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeName  :=  types . NodeName ( hostname ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kubeDeps . Cloud  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										var  err  error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										instances ,  ok  :=  kubeDeps . Cloud . Instances ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  ! ok  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "failed to get instances from cloud provider" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										nodeName ,  err  =  instances . CurrentNodeName ( hostname ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "error fetching current instance name from cloud provider: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . V ( 2 ) . Infof ( "cloud provider determined current node name to be %s" ,  nodeName ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO: KubeletDeps.KubeClient should be a client interface, but client interface misses certain methods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// used by kubelet. Since NewMainKubelet expects a client interface, we need to make sure we are not passing
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// a nil pointer to it when what we really want is a nil interface.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  kubeClient  clientset . Interface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeDeps . KubeClient  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kubeClient  =  kubeDeps . KubeClient 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// TODO: remove this when we've refactored kubelet to only use clientset.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeDeps . PodConfig  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										var  err  error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kubeDeps . PodConfig ,  err  =  makePodSourceConfig ( kubeCfg ,  kubeDeps ,  nodeName ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									containerGCPolicy  :=  kubecontainer . ContainerGCPolicy { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										MinAge :              kubeCfg . MinimumGCAge . Duration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										MaxPerPodContainer :  int ( kubeCfg . MaxPerPodContainerCount ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										MaxContainers :       int ( kubeCfg . MaxContainerCount ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									daemonEndpoints  :=  & v1 . NodeDaemonEndpoints { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										KubeletEndpoint :  v1 . DaemonEndpoint { Port :  kubeCfg . Port } , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									imageGCPolicy  :=  images . ImageGCPolicy { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										MinAge :                kubeCfg . ImageMinimumGCAge . Duration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										HighThresholdPercent :  int ( kubeCfg . ImageGCHighThresholdPercent ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										LowThresholdPercent :   int ( kubeCfg . ImageGCLowThresholdPercent ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									diskSpacePolicy  :=  DiskSpacePolicy { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										DockerFreeDiskMB :  int ( kubeCfg . LowDiskSpaceThresholdMB ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										RootFreeDiskMB :    int ( kubeCfg . LowDiskSpaceThresholdMB ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									thresholds ,  err  :=  eviction . ParseThresholdConfig ( kubeCfg . EvictionHard ,  kubeCfg . EvictionSoft ,  kubeCfg . EvictionSoftGracePeriod ,  kubeCfg . EvictionMinimumReclaim ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									evictionConfig  :=  eviction . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										PressureTransitionPeriod :  kubeCfg . EvictionPressureTransitionPeriod . Duration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										MaxPodGracePeriodSeconds :  int64 ( kubeCfg . EvictionMaxPodGracePeriod ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										Thresholds :                thresholds , 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-07 23:09:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										KernelMemcgNotification :   kubeCfg . ExperimentalKernelMemcgNotification , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									reservation ,  err  :=  ParseReservation ( kubeCfg . KubeReserved ,  kubeCfg . SystemReserved ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  dockerExecHandler  dockertools . ExecHandler 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									switch  kubeCfg . DockerExecHandlerName  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									case  "native" : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										dockerExecHandler  =  & dockertools . NativeExecHandler { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									case  "nsenter" : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										dockerExecHandler  =  & dockertools . NsenterExecHandler { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Warningf ( "Unknown Docker exec handler %q; defaulting to native" ,  kubeCfg . DockerExecHandlerName ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										dockerExecHandler  =  & dockertools . NativeExecHandler { } 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-07 10:31:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 08:37:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-17 01:38:50 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									serviceStore  :=  cache . NewIndexer ( cache . MetaNamespaceKeyFunc ,  cache . Indexers { cache . NamespaceIndex :  cache . MetaNamespaceIndexFunc } ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-17 05:39:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kubeClient  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										serviceLW  :=  cache . NewListWatchFromClient ( kubeClient . Core ( ) . RESTClient ( ) ,  "services" ,  v1 . NamespaceAll ,  fields . Everything ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										cache . NewReflector ( serviceLW ,  & v1 . Service { } ,  serviceStore ,  0 ) . Run ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-17 05:39:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-17 01:38:50 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									serviceLister  :=  & cache . StoreToServiceLister { Indexer :  serviceStore } 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-08 23:25:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:00:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeStore  :=  cache . NewStore ( cache . MetaNamespaceKeyFunc ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeClient  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-16 14:10:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										fieldSelector  :=  fields . Set { api . ObjectNameField :  string ( nodeName ) } . AsSelector ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nodeLW  :=  cache . NewListWatchFromClient ( kubeClient . Core ( ) . RESTClient ( ) ,  "nodes" ,  v1 . NamespaceAll ,  fieldSelector ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										cache . NewReflector ( nodeLW ,  & v1 . Node { } ,  nodeStore ,  0 ) . Run ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:00:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nodeLister  :=  & cache . StoreToNodeLister { Store :  nodeStore } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 07:45:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeInfo  :=  & predicates . CachedNodeInfo { StoreToNodeLister :  nodeLister } 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:00:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-09 22:18:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// TODO: get the real node object of ourself,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// and use the real node name and UID.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-28 04:12:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// TODO: what is namespace for node?
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeRef  :=  & v1 . ObjectReference { 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-28 04:12:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										Kind :       "Node" , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-16 14:10:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										Name :       string ( nodeName ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-12 23:40:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										UID :        types . UID ( nodeName ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-28 04:12:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										Namespace :  "" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									diskSpaceManager ,  err  :=  newDiskSpaceManager ( kubeDeps . CAdvisorInterface ,  diskSpacePolicy ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  fmt . Errorf ( "failed to initialize disk manager: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-24 05:16:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									containerRefManager  :=  kubecontainer . NewRefManager ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									oomWatcher  :=  NewOOMWatcher ( kubeDeps . CAdvisorInterface ,  kubeDeps . Recorder ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-11 08:29:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-01-12 08:42:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet  :=  & Kubelet { 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-18 06:54:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										hostname :                        hostname , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-12 23:40:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nodeName :                        nodeName , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										dockerClient :                    kubeDeps . DockerClient , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-18 06:54:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kubeClient :                      kubeClient , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										rootDirectory :                   kubeCfg . RootDirectory , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										resyncInterval :                  kubeCfg . SyncFrequency . Duration , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-24 05:16:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										containerRefManager :             containerRefManager , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-18 06:54:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										httpClient :                      & http . Client { } , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										sourcesReady :                    config . NewSourcesReady ( kubeDeps . PodConfig . SeenAllSources ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										registerNode :                    kubeCfg . RegisterNode , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										registerSchedulable :             kubeCfg . RegisterSchedulable , 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-13 01:20:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										standaloneMode :                  standaloneMode , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										clusterDomain :                   kubeCfg . ClusterDomain , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										clusterDNS :                      net . ParseIP ( kubeCfg . ClusterDNS ) , 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-18 06:54:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										serviceLister :                   serviceLister , 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:00:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nodeLister :                      nodeLister , 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-26 16:57:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nodeInfo :                        nodeInfo , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										masterServiceNamespace :          kubeCfg . MasterServiceNamespace , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										streamingConnectionIdleTimeout :  kubeCfg . StreamingConnectionIdleTimeout . Duration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										recorder :                        kubeDeps . Recorder , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										cadvisor :                        kubeDeps . CAdvisorInterface , 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										diskSpaceManager :                diskSpaceManager , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										cloud :                           kubeDeps . Cloud , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-07 00:55:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										autoDetectCloudProvider :    ( componentconfigv1alpha1 . AutoDetectCloudProvider  ==  kubeCfg . CloudProvider ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-30 06:30:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nodeRef :                    nodeRef , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nodeLabels :                 kubeCfg . NodeLabels , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										nodeStatusUpdateFrequency :  kubeCfg . NodeStatusUpdateFrequency . Duration , 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-04 16:53:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										os :                 kubeDeps . OSInterface , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										oomWatcher :         oomWatcher , 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 04:07:49 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										cgroupsPerQOS :      kubeCfg . ExperimentalCgroupsPerQOS , 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-04 16:53:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										cgroupRoot :         kubeCfg . CgroupRoot , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										mounter :            kubeDeps . Mounter , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										writer :             kubeDeps . Writer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										nonMasqueradeCIDR :  kubeCfg . NonMasqueradeCIDR , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										maxPods :            int ( kubeCfg . MaxPods ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										podsPerCore :        int ( kubeCfg . PodsPerCore ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										nvidiaGPUs :         int ( kubeCfg . NvidiaGPUs ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										syncLoopMonitor :    atomic . Value { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										resolverConfig :     kubeCfg . ResolverConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										cpuCFSQuota :        kubeCfg . CPUCFSQuota , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										daemonEndpoints :    daemonEndpoints , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										containerManager :   kubeDeps . ContainerManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										nodeIP :             net . ParseIP ( kubeCfg . NodeIP ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										clock :              clock . RealClock { } , 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-26 04:45:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										outOfDiskTransitionFrequency :             kubeCfg . OutOfDiskTransitionFrequency . Duration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										reservation :                              * reservation , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										enableCustomMetrics :                      kubeCfg . EnableCustomMetrics , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										babysitDaemons :                           kubeCfg . BabysitDaemons , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										enableControllerAttachDetach :             kubeCfg . EnableControllerAttachDetach , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										iptClient :                                utilipt . New ( utilexec . New ( ) ,  utildbus . New ( ) ,  utilipt . ProtocolIpv4 ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										makeIPTablesUtilChains :                   kubeCfg . MakeIPTablesUtilChains , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										iptablesMasqueradeBit :                    int ( kubeCfg . IPTablesMasqueradeBit ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										iptablesDropBit :                          int ( kubeCfg . IPTablesDropBit ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										experimentalHostUserNamespaceDefaulting :  utilconfig . DefaultFeatureGate . ExperimentalHostUserNamespaceDefaulting ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  klet . experimentalHostUserNamespaceDefaulting  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Infof ( "Experimental host user namespace defaulting is enabled." ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-24 10:11:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-15 03:19:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-17 02:26:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  mode ,  err  :=  effectiveHairpinMode ( componentconfig . HairpinMode ( kubeCfg . HairpinMode ) ,  kubeCfg . ContainerRuntime ,  kubeCfg . NetworkPluginName ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-01 06:20:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// This is a non-recoverable error. Returning it up the callstack will just
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// lead to retries of the same failure, so just fail hard.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Fatalf ( "Invalid hairpin mode: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . hairpinMode  =  mode 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									glog . Infof ( "Hairpin mode set to %q" ,  klet . hairpinMode ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-29 08:01:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  plug ,  err  :=  network . InitNetworkPlugin ( kubeDeps . NetworkPlugins ,  kubeCfg . NetworkPluginName ,  & criNetworkHost { & networkHost { klet } } ,  klet . hairpinMode ,  klet . nonMasqueradeCIDR ,  int ( kubeCfg . NetworkPluginMTU ) ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-29 02:02:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . networkPlugin  =  plug 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-02 05:24:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:06:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									machineInfo ,  err  :=  klet . GetCachedMachineInfo ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-04 08:28:33 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-14 07:47:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									procFs  :=  procfs . NewProcFS ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-09 10:58:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									imageBackOff  :=  flowcontrol . NewBackOff ( backOffPeriod ,  MaxContainerBackOff ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-11 06:00:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . livenessManager  =  proberesults . NewManager ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . podCache  =  kubecontainer . NewCache ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-03 05:29:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . podManager  =  kubepod . NewBasicPodManager ( kubepod . NewBasicMirrorClient ( klet . kubeClient ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kubeCfg . RemoteRuntimeEndpoint  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// kubeCfg.RemoteImageEndpoint is same as kubeCfg.RemoteRuntimeEndpoint if not explicitly specified
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  kubeCfg . RemoteImageEndpoint  ==  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kubeCfg . RemoteImageEndpoint  =  kubeCfg . RemoteRuntimeEndpoint 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-08 15:40:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-29 08:01:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// TODO: These need to become arguments to a standalone docker shim.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-25 11:42:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									binDir  :=  kubeCfg . CNIBinDir 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  binDir  ==  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										binDir  =  kubeCfg . NetworkPluginDir 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									pluginSettings  :=  dockershim . NetworkPluginSettings { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										HairpinMode :        klet . hairpinMode , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										NonMasqueradeCIDR :  klet . nonMasqueradeCIDR , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										PluginName :         kubeCfg . NetworkPluginName , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										PluginConfDir :      kubeCfg . CNIConfDir , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										PluginBinDir :       binDir , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										MTU :                int ( kubeCfg . NetworkPluginMTU ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-29 08:01:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Remote runtime shim just cannot talk back to kubelet, so it doesn't
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// support bandwidth shaping or hostports till #35457. To enable legacy
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// features, replace with networkHost.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  nl  * noOpLegacyHost 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									pluginSettings . LegacyRuntimeHost  =  nl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-07 01:20:57 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kubeCfg . EnableCRI  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// kubelet defers to the runtime shim to setup networking. Setting
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// this to nil will prevent it from trying to invoke the plugin.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// It's easier to always probe and initialize plugins till cri
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// becomes the default.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . networkPlugin  =  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 15:27:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										var  runtimeService  internalapi . RuntimeService 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										var  imageService  internalapi . ImageManagerService 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										var  err  error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										switch  kubeCfg . ContainerRuntime  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										case  "docker" : 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											streamingConfig  :=  getStreamingConfig ( kubeCfg ,  kubeDeps ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// Use the new CRI shim for docker.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-08 16:59:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											ds ,  err  :=  dockershim . NewDockerService ( klet . dockerClient ,  kubeCfg . SeccompProfileRoot ,  kubeCfg . PodInfraContainerImage , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												streamingConfig ,  & pluginSettings ,  kubeCfg . RuntimeCgroups ,  kubeCfg . CgroupDriver ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-11 04:56:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// TODO: Once we switch to grpc completely, we should move this
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// call to the grpc server start.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  err  :=  ds . Start ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											klet . criHandler  =  ds 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 15:27:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											rs  :=  ds . ( internalapi . RuntimeService ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											is  :=  ds . ( internalapi . ImageManagerService ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// This is an internal knob to switch between grpc and non-grpc
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// integration.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// TODO: Remove this knob once we switch to using GRPC completely.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											overGRPC  :=  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  overGRPC  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												const  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
													// The unix socket for kubelet <-> dockershim communication.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
													ep  =  "/var/run/dockershim.sock" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . RemoteRuntimeEndpoint  =  ep 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . RemoteImageEndpoint  =  ep 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												server  :=  dockerremote . NewDockerServer ( ep ,  ds ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												glog . V ( 2 ) . Infof ( "Starting the GRPC server for the docker CRI shim." ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-26 07:10:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												err  :=  server . Start ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
													return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												rs ,  is ,  err  =  getRuntimeAndImageServices ( kubeCfg ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-26 07:10:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
													return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-04 11:49:19 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// TODO: Move the instrumented interface wrapping into kuberuntime.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:36:13 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											runtimeService  =  kuberuntime . NewInstrumentedRuntimeService ( rs ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											imageService  =  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										case  "remote" : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											runtimeService ,  imageService ,  err  =  getRuntimeAndImageServices ( kubeCfg ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-04 11:49:19 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 09:25:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										default : 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "unsupported CRI runtime: %q" ,  kubeCfg . ContainerRuntime ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										runtime ,  err  :=  kuberuntime . NewKubeGenericRuntimeManager ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kubecontainer . FilterEventRecorder ( kubeDeps . Recorder ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . livenessManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											containerRefManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											machineInfo , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . podManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kubeDeps . OSInterface , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . networkPlugin , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . httpClient , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											imageBackOff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kubeCfg . SerializeImagePulls , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											float32 ( kubeCfg . RegistryPullQPS ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											int ( kubeCfg . RegistryBurst ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . cpuCFSQuota , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											runtimeService , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kuberuntime . NewInstrumentedImageManagerService ( imageService ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . containerRuntime  =  runtime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . runner  =  runtime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										switch  kubeCfg . ContainerRuntime  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										case  "docker" : 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 08:42:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											runtime  :=  dockertools . NewDockerManager ( 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 09:25:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												kubeDeps . DockerClient , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubecontainer . FilterEventRecorder ( kubeDeps . Recorder ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . livenessManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												containerRefManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . podManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												machineInfo , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . PodInfraContainerImage , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												float32 ( kubeCfg . RegistryPullQPS ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												int ( kubeCfg . RegistryBurst ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-15 12:32:50 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												ContainerLogsDir , 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 09:25:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												kubeDeps . OSInterface , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . networkPlugin , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . httpClient , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												dockerExecHandler , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeDeps . OOMAdjuster , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												procFs , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . cpuCFSQuota , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												imageBackOff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . SerializeImagePulls , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . EnableCustomMetrics , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// If using "kubenet", the Kubernetes network plugin that wraps
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// CNI's bridge plugin, it knows how to set the hairpin veth flag
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// so we tell the container runtime to back away from setting it.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// If the kubelet is started with any other plugin we can't be
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// sure it handles the hairpin case so we instruct the docker
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// runtime to set the flag instead.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . hairpinMode  ==  componentconfig . HairpinVeth  &&  kubeCfg . NetworkPluginName  !=  "kubenet" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . SeccompProfileRoot , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeDeps . ContainerRuntimeOptions ... , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 08:42:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											klet . containerRuntime  =  runtime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . runner  =  kubecontainer . DirectStreamingRunner ( runtime ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 08:06:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  "rkt" : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// TODO: Include hairpin mode settings in rkt?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											conf  :=  & rkt . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												Path :             kubeCfg . RktPath , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												Stage1Image :      kubeCfg . RktStage1Image , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												InsecureOptions :  "image,ondisk" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											runtime ,  err  :=  rkt . New ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . RktAPIEndpoint , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												conf , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeDeps . Recorder , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												containerRefManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . podManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . livenessManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . httpClient , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . networkPlugin , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												klet . hairpinMode  ==  componentconfig . HairpinVeth , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												utilexec . New ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubecontainer . RealOS { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												imageBackOff , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . SerializeImagePulls , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												float32 ( kubeCfg . RegistryPullQPS ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												int ( kubeCfg . RegistryBurst ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kubeCfg . RuntimeRequestTimeout . Duration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . containerRuntime  =  runtime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											klet . runner  =  kubecontainer . DirectStreamingRunner ( runtime ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "unsupported container runtime %q specified" ,  kubeCfg . ContainerRuntime ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 09:25:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-02 05:24:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-29 02:02:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 08:05:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// TODO: Factor out "StatsProvider" from Kubelet so we don't have a cyclic dependency
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . resourceAnalyzer  =  stats . NewResourceAnalyzer ( klet ,  kubeCfg . VolumeStatsAggPeriod . Duration ,  klet . containerRuntime ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 08:05:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-26 11:08:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . pleg  =  pleg . NewGenericPLEG ( klet . containerRuntime ,  plegChannelCapacity ,  plegRelistPeriod ,  klet . podCache ,  clock . RealClock { } ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-23 06:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . runtimeState  =  newRuntimeState ( maxWaitForContainerRuntime ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . updatePodCIDR ( kubeCfg . PodCIDR ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-03 23:37:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// setup containerGC
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:35:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									containerGC ,  err  :=  kubecontainer . NewContainerGC ( klet . containerRuntime ,  containerGCPolicy ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-03 23:37:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									klet . containerGC  =  containerGC 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:58:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . containerDeletor  =  newPodContainerDeletor ( klet . containerRuntime ,  integer . IntMax ( containerGCPolicy . MaxPerPodContainer ,  minDeadContainerInPod ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-03 23:37:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-26 08:29:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// setup imageManager
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									imageManager ,  err  :=  images . NewImageGCManager ( klet . containerRuntime ,  kubeDeps . CAdvisorInterface ,  kubeDeps . Recorder ,  nodeRef ,  imageGCPolicy ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-26 08:29:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  fmt . Errorf ( "failed to initialize image manager: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									klet . imageManager  =  imageManager 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-30 05:04:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . statusManager  =  status . NewManager ( kubeClient ,  klet . podManager ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-21 08:22:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-26 01:39:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . probeManager  =  prober . NewManager ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . statusManager , 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										klet . livenessManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . runner , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										containerRefManager , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kubeDeps . Recorder ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-26 01:39:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-15 08:47:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . volumePluginMgr ,  err  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										NewInitializedVolumePluginMgr ( klet ,  kubeDeps . VolumePlugins ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-15 08:47:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 03:15:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// If the experimentalMounterPathFlag is set, we do not want to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// check node capabilities since the mount path is not the default
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  len ( kubeCfg . ExperimentalMounterPath )  !=  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kubeCfg . ExperimentalCheckNodeCapabilitiesBeforeMount  =  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-24 03:46:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// setup volumeManager
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-15 08:47:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . volumeManager ,  err  =  volumemanager . NewVolumeManager ( 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kubeCfg . EnableControllerAttachDetach , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-21 14:03:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nodeName , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-15 08:47:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										klet . podManager , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . kubeClient , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										klet . volumePluginMgr , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 01:42:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										klet . containerRuntime , 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kubeDeps . Mounter , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-22 00:13:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										klet . getPodsDir ( ) , 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-04 03:15:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kubeDeps . Recorder , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kubeCfg . ExperimentalCheckNodeCapabilitiesBeforeMount ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-15 08:47:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-02 06:25:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									runtimeCache ,  err  :=  kubecontainer . NewRuntimeCache ( klet . containerRuntime ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-19 17:12:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-14 09:04:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . runtimeCache  =  runtimeCache 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 05:28:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . reasonCache  =  NewReasonCache ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-29 09:39:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . workQueue  =  queue . NewBasicWorkQueue ( klet . clock ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . podWorkers  =  newPodWorkers ( klet . syncPod ,  kubeDeps . Recorder ,  klet . workQueue ,  klet . resyncInterval ,  backOffPeriod ,  klet . podCache ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-19 17:12:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-09 10:58:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . backOff  =  flowcontrol . NewBackOff ( backOffPeriod ,  MaxContainerBackOff ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-01 07:56:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . podKillingCh  =  make ( chan  * kubecontainer . PodPair ,  podKillingChannelCapacity ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 09:54:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . setNodeStatusFuncs  =  klet . defaultNodeStatusFuncs ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-13 11:35:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// setup eviction manager
 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-29 16:56:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									evictionManager ,  evictionAdmitHandler  :=  eviction . NewManager ( klet . resourceAnalyzer ,  evictionConfig ,  killPodNow ( klet . podWorkers ,  kubeDeps . Recorder ) ,  klet . imageManager ,  kubeDeps . Recorder ,  nodeRef ,  klet . clock ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-13 11:35:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . evictionManager  =  evictionManager 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . admitHandlers . AddPodAdmitHandler ( evictionAdmitHandler ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-13 11:35:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-19 16:53:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// add sysctl admission
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									runtimeSupport ,  err  :=  sysctl . NewRuntimeAdmitHandler ( klet . containerRuntime ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									safeWhitelist ,  err  :=  sysctl . NewWhitelist ( sysctl . SafeSysctlWhitelist ( ) ,  v1 . SysctlsPodAnnotationKey ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-19 16:53:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Safe, whitelisted sysctls can always be used as unsafe sysctls in the spec
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Hence, we concatenate those two lists.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									safeAndUnsafeSysctls  :=  append ( sysctl . SafeSysctlWhitelist ( ) ,  kubeCfg . AllowedUnsafeSysctls ... ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									unsafeWhitelist ,  err  :=  sysctl . NewWhitelist ( safeAndUnsafeSysctls ,  v1 . UnsafeSysctlsPodAnnotationKey ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-19 16:53:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . admitHandlers . AddPodAdmitHandler ( runtimeSupport ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									klet . admitHandlers . AddPodAdmitHandler ( safeWhitelist ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									klet . admitHandlers . AddPodAdmitHandler ( unsafeWhitelist ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-19 16:53:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-23 05:30:35 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// enable active deadline handler
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									activeDeadlineHandler ,  err  :=  newActiveDeadlineHandler ( klet . statusManager ,  kubeDeps . Recorder ,  klet . clock ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-23 05:30:35 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									klet . AddPodSyncLoopHandler ( activeDeadlineHandler ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									klet . AddPodSyncHandler ( activeDeadlineHandler ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . admitHandlers . AddPodAdmitHandler ( lifecycle . NewPredicateAdmitHandler ( klet . getNodeAnyWay ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 09:54:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// apply functional Option's
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  _ ,  opt  :=  range  kubeDeps . Options  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 09:54:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										opt ( klet ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . appArmorValidator  =  apparmor . NewValidator ( kubeCfg . ContainerRuntime ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									klet . softAdmitHandlers . AddPodAdmitHandler ( lifecycle . NewAppArmorAdmitHandler ( klet . appArmorValidator ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Finally, put the most recent version of the config on the Kubelet, so
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// people can see how it was configured.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 09:03:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									klet . kubeletConfiguration  =  * kubeCfg 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-12 08:42:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  klet ,  nil 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-23 05:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-01-08 23:25:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								type  serviceLister  interface  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									List ( labels . Selector )  ( [ ] * v1 . Service ,  error ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-08 23:25:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:00:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								type  nodeLister  interface  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									List ( )  ( machines  v1 . NodeList ,  err  error ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:00:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-10 20:26:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Kubelet is the main kubelet implementation.
 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								type  Kubelet  struct  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 09:03:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kubeletConfiguration  componentconfig . KubeletConfiguration 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-03 01:18:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									hostname       string 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-16 14:10:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeName       types . NodeName 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-03 01:18:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									dockerClient   dockertools . DockerInterface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									runtimeCache   kubecontainer . RuntimeCache 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-02 06:30:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kubeClient     clientset . Interface 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 04:01:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									iptClient      utilipt . Interface 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-03 01:18:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									rootDirectory  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// podWorkers handle syncing Pods in response to events.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podWorkers  PodWorkers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// resyncInterval is the interval between periodic full reconciliations of
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// pods on this node.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-09 09:56:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									resyncInterval  time . Duration 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-27 01:58:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// sourcesReady records the sources seen by the kubelet, it is thread-safe.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									sourcesReady  config . SourcesReady 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-16 04:24:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// podManager is a facade that abstracts away the various sources of pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// this Kubelet services.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 07:28:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									podManager  kubepod . Manager 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-19 02:43:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-13 11:35:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Needed to observe and respond to situations that could impact node stability
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									evictionManager  eviction . Manager 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-04 08:16:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Needed to report events for containers belonging to deleted/modified pods.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Tracks references for reporting events
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-27 02:44:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									containerRefManager  * kubecontainer . RefManager 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-04 08:16:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-16 04:24:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Optional, defaults to /logs/ from /var/log
 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-23 05:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									logServer  http . Handler 
							 
						 
					
						
							
								
									
										
										
										
											2014-08-08 02:15:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Optional, defaults to simple Docker implementation
 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 06:32:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									runner  kubecontainer . ContainerCommandRunner 
							 
						 
					
						
							
								
									
										
										
										
											2014-09-04 04:39:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Optional, client for http requests, defaults to empty client
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									httpClient  kubetypes . HttpGetter 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-09 08:05:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 15:56:30 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// cAdvisor used for container information.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									cadvisor  cadvisor . Interface 
							 
						 
					
						
							
								
									
										
										
										
											2014-10-28 08:29:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:06:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Set to true to have the node register itself with the apiserver.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									registerNode  bool 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-16 12:53:33 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Set to true to have the node register itself as schedulable.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									registerSchedulable  bool 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-01 09:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// for internal book keeping; access only from within registerWithApiserver
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									registrationCompleted  bool 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 05:21:03 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-06-13 01:20:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Set to true if the kubelet is in standalone mode (i.e. setup without an apiserver)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									standaloneMode  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-12 13:21:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// If non-empty, use this for container DNS search.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									clusterDomain  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// If non-nil, use this for container DNS server.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									clusterDNS  net . IP 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-08 23:25:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// masterServiceNamespace is the namespace that the master service is exposed in.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-08 23:25:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									masterServiceNamespace  string 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// serviceLister knows how to list services
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									serviceLister  serviceLister 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// nodeLister knows how to list nodes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nodeLister  nodeLister 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// nodeInfo knows how to get information about the node for this kubelet.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nodeInfo  predicates . NodeInfo 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-23 23:47:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-14 07:59:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// a list of node labels to register
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-14 07:56:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeLabels  map [ string ] string 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-14 07:59:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-04 04:29:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Last timestamp when runtime responded on ping.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 18:19:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Mutex is used to protect this value.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-26 02:00:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									runtimeState  * runtimeState 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-25 02:10:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-11-23 23:47:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Volume plugins.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-30 10:22:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									volumePluginMgr  * volume . VolumePluginMgr 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-03 02:51:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-18 06:54:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Network plugin.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-20 07:14:13 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									networkPlugin  network . NetworkPlugin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Handles container probing.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-26 01:39:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									probeManager  prober . Manager 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Manages container health check results.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									livenessManager  proberesults . Manager 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-09 04:41:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-21 00:37:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// How long to keep idle streaming command execution/port forwarding
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-09 04:41:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// connections open before terminating them
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									streamingConnectionIdleTimeout  time . Duration 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-03 14:06:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-21 00:37:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// The EventRecorder to use
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-03 14:06:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									recorder  record . EventRecorder 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-04 02:33:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-15 01:13:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Policy for handling garbage collection of dead containers.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-06 06:35:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									containerGC  kubecontainer . ContainerGC 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 12:00:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-05 03:26:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Manager for image garbage collection.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									imageManager  images . ImageGCManager 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 20:50:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Diskspace manager.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									diskSpaceManager  diskSpaceManager 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 20:50:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Cached MachineInfo returned by cadvisor.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-16 11:00:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									machineInfo  * cadvisorapi . MachineInfo 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-21 00:37:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Syncs pods statuses with apiserver; also used as a cache of statuses.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-12 03:22:01 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									statusManager  status . Manager 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-24 06:31:13 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-30 10:22:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// VolumeManager runs a set of asynchronous loops that figure out which
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// volumes need to be attached/mounted/unmounted/detached based on the pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// scheduled on this node and makes it so.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-02 09:50:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									volumeManager  volumemanager . VolumeManager 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-16 08:40:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-30 10:22:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Cloud provider interface.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-30 06:30:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									cloud                    cloudprovider . Interface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									autoDetectCloudProvider  bool 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-28 04:12:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Reference to this node.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									nodeRef  * v1 . ObjectReference 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-03 04:14:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-02 06:25:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Container runtime.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									containerRuntime  kubecontainer . Runtime 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-31 19:17:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 05:28:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// reasonCache caches the failure reason of the last creation of all containers, which is
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// used for generating ContainerStatus.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									reasonCache  * ReasonCache 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:06:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// nodeStatusUpdateFrequency specifies how often kubelet posts node status to master.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Note: be cautious when changing the constant, it must work with nodeMonitorGracePeriod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// in nodecontroller. There are several constraints:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// 1. nodeMonitorGracePeriod must be N times more than nodeStatusUpdateFrequency, where
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//    N means number of retries allowed for kubelet to post node status. It is pointless
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//    to make nodeMonitorGracePeriod be less than nodeStatusUpdateFrequency, since there
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//    will only be fresh values from Kubelet at an interval of nodeStatusUpdateFrequency.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//    The constant must be less than podEvictionTimeout.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// 2. nodeStatusUpdateFrequency needs to be large enough for kubelet to generate node
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//    status. Kubelet may fail to update node status reliably if the value is too small,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									//    as it takes time to gather all necessary node information.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nodeStatusUpdateFrequency  time . Duration 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Generates pod events.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									pleg  pleg . PodLifecycleEventGenerator 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Store kubecontainer.PodStatus for all pods.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podCache  kubecontainer . Cache 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// os is a facade for various syscalls that need to be mocked during testing.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-30 04:44:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									os  kubecontainer . OSInterface 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Watcher of out of memory events.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-11 08:29:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									oomWatcher  OOMWatcher 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-30 04:44:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-15 03:19:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Monitor resource usage
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									resourceAnalyzer  stats . ResourceAnalyzer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-28 02:46:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Whether or not we should have the QOS cgroup hierarchy for resource management
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									cgroupsPerQOS  bool 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-28 02:46:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-04-24 08:07:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// If non-empty, pass this to the container runtime as the root cgroup.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									cgroupRoot  string 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-04 22:43:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Mounter to use for volumes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									mounter  mount . Interface 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:59:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-14 17:51:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Writer interface to use for volumes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									writer  kubeio . Writer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:59:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Manager of non-Runtime containers.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 08:09:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									containerManager  cm . ContainerManager 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nodeConfig        cm . NodeConfig 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 05:07:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-08 04:44:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Traffic to IPs outside this range will use IP masquerade.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nonMasqueradeCIDR  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-17 09:15:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Maximum Number of Pods which can be run by this Kubelet
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									maxPods  int 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-27 08:54:19 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Number of NVIDIA GPUs on this node
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nvidiaGPUs  int 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Monitor Kubelet's sync loop
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-24 18:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									syncLoopMonitor  atomic . Value 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-13 20:59:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Container restart Backoff
 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-09 10:58:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									backOff  * flowcontrol . Backoff 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Channel for sending pods to kill.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-01 07:56:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									podKillingCh  chan  * kubecontainer . PodPair 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// The configuration file used as the base to generate the container's
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// DNS resolver configuration file. This can be used in conjunction with
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// clusterDomain and clusterDNS.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									resolverConfig  string 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-11 06:08:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Optionally shape the bandwidth of a pod
 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-17 07:31:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// TODO: remove when kubenet plugin is ready
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-11 06:08:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									shaper  bandwidth . BandwidthShaper 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-01 21:27:01 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// True if container cpu limits should be enforced via cgroup CFS quota
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									cpuCFSQuota  bool 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-22 02:06:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Information about the ports which are opened by daemons on Node running this Kubelet server.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									daemonEndpoints  * v1 . NodeDaemonEndpoints 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-03 01:18:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// A queue used to trigger pod workers.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									workQueue  queue . WorkQueue 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// oneTimeInitializer is used to initialize modules that are dependent on the runtime to be up.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									oneTimeInitializer  sync . Once 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-21 11:41:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-10 10:05:35 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// If non-nil, use this IP address for the node
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									nodeIP  net . IP 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// clock is an interface that provides time related functionality in a way that makes it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// easy to test the code.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-26 11:08:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									clock  clock . Clock 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// outOfDiskTransitionFrequency specifies the amount of time the kubelet has to be actually
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// not out of disk before it can transition the node condition status from out-of-disk to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// not-out-of-disk. This prevents a pod that causes out-of-disk condition from repeatedly
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// getting rescheduled onto the node.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									outOfDiskTransitionFrequency  time . Duration 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-12 09:51:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// reservation specifies resources which are reserved for non-pod usage, including kubernetes and
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// non-kubernetes system processes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									reservation  kubetypes . Reservation 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-22 00:44:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// support gathering custom metrics.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									enableCustomMetrics  bool 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-17 02:23:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// How the Kubelet should setup hairpin NAT. Can take the values: "promiscuous-bridge"
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// (make cbr0 promiscuous), "hairpin-veth" (set the hairpin flag on veth interfaces)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// or "none" (do nothing).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									hairpinMode  componentconfig . HairpinMode 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 09:54:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-01 17:12:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// The node has babysitter process monitoring docker and kubelet
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									babysitDaemons  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-19 09:54:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// handlers called during the tryUpdateNodeStatus cycle
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									setNodeStatusFuncs  [ ] func ( * v1 . Node )  error 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO: think about moving this to be centralized in PodWorkers in follow-on.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// the list of handlers to call during pod admission.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									admitHandlers  lifecycle . PodAdmitHandlers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// softAdmithandlers are applied to the pod after it is admitted by the Kubelet, but before it is
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// run. A pod rejected by a softAdmitHandler will be left in a Pending state indefinitely. If a
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// rejected pod should not be recreated, or the scheduler is not aware of the rejection rule, the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// admission rule should be applied by a softAdmitHandler.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									softAdmitHandlers  lifecycle . PodAdmitHandlers 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// the list of handlers to call during pod sync loop.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lifecycle . PodSyncLoopHandlers 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// the list of handlers to call during pod sync.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									lifecycle . PodSyncHandlers 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-18 23:18:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// the number of allowed pods per core
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podsPerCore  int 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-24 04:37:30 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// enableControllerAttachDetach indicates the Attach/Detach controller
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// should manage attachment/detachment of volumes scheduled to this node,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// and disable kubelet from executing any attach/detach operations
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									enableControllerAttachDetach  bool 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:58:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// trigger deleting containers in a pod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									containerDeletor  * podContainerDeletor 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 04:01:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// config iptables util rules
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									makeIPTablesUtilChains  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// The bit of the fwmark space to mark packets for SNAT.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									iptablesMasqueradeBit  int 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// The bit of the fwmark space to mark packets for dropping.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									iptablesDropBit  int 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 08:54:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// The AppArmor validator for checking whether AppArmor is supported.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									appArmorValidator  apparmor . Validator 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// The handler serving CRI streaming calls (exec/attach/port-forward).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									criHandler  http . Handler 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-26 04:45:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// experimentalHostUserNamespaceDefaulting sets userns=true when users request host namespaces (pid, ipc, net),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// are using non-namespaced capabilities (mknod, sys_time, sys_module), the pod contains a privileged container,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// or using host path volumes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// This should only be enabled when the container runtime is performing user remapping AND if the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// experimental behavior is desired.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									experimentalHostUserNamespaceDefaulting  bool 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-10 10:05:35 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// setupDataDirs creates:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 1.  the root directory
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 2.  the pods directory
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 3.  the plugins directory
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-12 08:42:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  setupDataDirs ( )  error  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									kl . rootDirectory  =  path . Clean ( kl . rootDirectory ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-23 23:47:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  os . MkdirAll ( kl . getRootDir ( ) ,  0750 ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-12 08:42:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "error creating root directory: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-23 23:47:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  os . MkdirAll ( kl . getPodsDir ( ) ,  0750 ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-12 08:42:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "error creating pods directory: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-23 23:47:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  os . MkdirAll ( kl . getPluginsDir ( ) ,  0750 ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "error creating plugins directory: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-12 08:42:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-04 04:29:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Starts garbage collection threads.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 12:00:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  StartGarbageCollection ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-03 01:24:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									loggedContainerGCFailure  :=  false 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-02 18:57:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									go  wait . Until ( func ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-15 05:45:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  err  :=  kl . containerGC . GarbageCollect ( kl . sourcesReady . AllReady ( ) ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 12:00:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Container garbage collection failed: %v" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											kl . recorder . Eventf ( kl . nodeRef ,  v1 . EventTypeWarning ,  events . ContainerGCFailed ,  err . Error ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-03 01:24:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											loggedContainerGCFailure  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											var  vLevel  glog . Level  =  4 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  loggedContainerGCFailure  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												vLevel  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												loggedContainerGCFailure  =  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . V ( vLevel ) . Infof ( "Container garbage collection succeeded" ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 12:00:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-03 05:29:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} ,  ContainerGCPeriod ,  wait . NeverStop ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 12:00:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-03 01:24:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									loggedImageGCFailure  :=  false 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-02 18:57:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									go  wait . Until ( func ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-16 12:00:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  err  :=  kl . imageManager . GarbageCollect ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Image garbage collection failed: %v" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											kl . recorder . Eventf ( kl . nodeRef ,  v1 . EventTypeWarning ,  events . ImageGCFailed ,  err . Error ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-03 01:24:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											loggedImageGCFailure  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											var  vLevel  glog . Level  =  4 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  loggedImageGCFailure  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												vLevel  =  1 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												loggedImageGCFailure  =  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . V ( vLevel ) . Infof ( "Image garbage collection succeeded" ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-23 03:54:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-03 05:29:53 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} ,  ImageGCPeriod ,  wait . NeverStop ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-12-23 03:54:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// initializeModules will initialize internal modules that do not require the container runtime to be up.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Note that the modules here must not depend on modules that are not initialized here.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  initializeModules ( )  error  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 09:49:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Step 1: Promethues metrics.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									metrics . Register ( kl . runtimeCache ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 09:49:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Step 2: Setup filesystem directories.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  kl . setupDataDirs ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  err 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-15 15:04:30 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 09:49:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Step 3: If the container logs directory does not exist, create it.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-15 12:32:50 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  _ ,  err  :=  os . Stat ( ContainerLogsDir ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  err  :=  kl . os . MkdirAll ( ContainerLogsDir ,  0755 ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Failed to create directory %q: %v" ,  ContainerLogsDir ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-24 05:04:45 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-14 08:30:57 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 09:49:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Step 4: Start the image manager.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-21 14:58:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . imageManager . Start ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-06 02:15:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 09:49:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Step 5: Start container manager.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-13 12:39:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									node ,  err  :=  kl . getNodeAnyWay ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-24 09:59:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "Kubelet failed to get node info: %v" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-13 12:39:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  :=  kl . containerManager . Start ( node ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "Failed to start ContainerManager %v" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:59:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-05 09:49:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Step 6: Start out of memory watcher.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-21 05:21:03 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  kl . oomWatcher . Start ( kl . nodeRef ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "Failed to start OOM watcher %v" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-16 04:24:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-15 03:19:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Step 7: Start resource analyzer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									kl . resourceAnalyzer . Start ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-26 03:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-16 04:24:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// initializeRuntimeDependentModules will initialize internal modules that require the container runtime to be up.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  initializeRuntimeDependentModules ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  :=  kl . cadvisor . Start ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 07:07:33 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// Fail kubelet and rely on the babysitter to retry starting kubelet.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// TODO(random-liu): Add backoff logic in the babysitter
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Fatalf ( "Failed to start cAdvisor %v" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-22 06:31:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// eviction manager must start after cadvisor because it needs to know if the container runtime has a dedicated imagefs
 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-30 14:11:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . evictionManager . Start ( kl ,  kl . getActivePods ,  evictionMonitoringPeriod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-13 00:59:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Run starts the kubelet reacting to config updates
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  Run ( updates  <- chan  kubetypes . PodUpdate )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kl . logServer  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . logServer  =  http . StripPrefix ( "/logs/" ,  http . FileServer ( http . Dir ( "/var/log/" ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kl . kubeClient  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Warning ( "No api server defined - no node status update will be sent." ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 09:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  kl . initializeModules ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . recorder . Eventf ( kl . nodeRef ,  v1 . EventTypeWarning ,  events . KubeletSetupFailed ,  err . Error ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										glog . Error ( err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . runtimeState . setInitError ( err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-19 03:18:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-30 10:22:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Start volume manager
 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-24 03:46:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									go  kl . volumeManager . Run ( kl . sourcesReady ,  wait . NeverStop ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-30 10:22:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kl . kubeClient  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Start syncing node status immediately, this may set up things the runtime needs to run.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-02 18:57:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										go  wait . Until ( kl . syncNodeStatus ,  kl . nodeStatusUpdateFrequency ,  wait . NeverStop ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-19 03:18:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-02 18:57:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									go  wait . Until ( kl . syncNetworkStatus ,  30 * time . Second ,  wait . NeverStop ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									go  wait . Until ( kl . updateRuntimeUp ,  5 * time . Second ,  wait . NeverStop ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-25 02:10:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 04:01:27 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Start loop to sync iptables util rules
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kl . makeIPTablesUtilChains  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										go  wait . Until ( kl . syncNetworkUtil ,  1 * time . Minute ,  wait . NeverStop ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Start a goroutine responsible for killing pods (that are not properly
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// handled by pod workers).
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-02 18:57:06 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									go  wait . Until ( kl . podKiller ,  1 * time . Second ,  wait . NeverStop ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-10 02:58:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Start component sync loops.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-21 00:37:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . statusManager . Start ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-10 02:58:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . probeManager . Start ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-26 03:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Start the pod lifecycle event generator.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									kl . pleg . Start ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-16 04:24:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . syncLoop ( updates ,  kl ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-25 11:42:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// GetKubeClient returns the Kubernetes client.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// TODO: This is currently only required by network plugins. Replace
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// with more specific methods.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  GetKubeClient ( )  clientset . Interface  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  kl . kubeClient 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-29 07:57:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// GetClusterDNS returns a list of the DNS servers and a list of the DNS search
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-27 02:59:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// domains of the cluster.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  GetClusterDNS ( pod  * v1 . Pod )  ( [ ] string ,  [ ] string ,  error )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									var  hostDNS ,  hostSearch  [ ] string 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-15 01:34:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Get host DNS settings
 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kl . resolverConfig  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										f ,  err  :=  os . Open ( kl . resolverConfig ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										defer  f . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-12 13:21:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-24 08:01:49 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										hostDNS ,  hostSearch ,  err  =  kl . parseResolvConf ( f ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									useClusterFirstPolicy  :=  pod . Spec . DNSPolicy  ==  v1 . DNSClusterFirst 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-15 01:34:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  useClusterFirstPolicy  &&  kl . clusterDNS  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// clusterDNS is not known.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// pod with ClusterDNSFirst Policy cannot be created
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . recorder . Eventf ( pod ,  v1 . EventTypeWarning ,  "MissingClusterDNS" ,  "kubelet does not have ClusterDNS IP configured and cannot create Pod using %q policy. Falling back to DNSDefault policy." ,  pod . Spec . DNSPolicy ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-22 03:25:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										log  :=  fmt . Sprintf ( "kubelet does not have ClusterDNS IP configured and cannot create Pod using %q policy. pod: %q. Falling back to DNSDefault policy." ,  pod . Spec . DNSPolicy ,  format . Pod ( pod ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . recorder . Eventf ( kl . nodeRef ,  v1 . EventTypeWarning ,  "MissingClusterDNS" ,  log ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-15 01:34:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// fallback to DNSDefault
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										useClusterFirstPolicy  =  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  ! useClusterFirstPolicy  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// When the kubelet --resolv-conf flag is set to the empty string, use
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// DNS settings that override the docker default (which is to use
 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-03 06:13:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// /etc/resolv.conf) and effectively disable DNS lookups. According to
 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// the bind documentation, the behavior of the DNS client library when
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// "nameservers" are not specified is to "use the nameserver on the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// local machine". A nameserver setting of localhost is equivalent to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// this documented behavior.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  kl . resolverConfig  ==  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											hostDNS  =  [ ] string { "127.0.0.1" } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											hostSearch  =  [ ] string { "." } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  hostDNS ,  hostSearch ,  nil 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-12 13:21:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-27 02:59:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-15 01:34:29 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// for a pod with DNSClusterFirst policy, the cluster DNS server is the only nameserver configured for
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// the pod. The cluster DNS server itself will forward queries to other nameservers that is configured to use,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// in case the cluster DNS server cannot resolve the DNS query itself
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									dns  :=  [ ] string { kl . clusterDNS . String ( ) } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  dnsSearch  [ ] string 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-12 13:21:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kl . clusterDomain  !=  ""  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-02 03:21:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										nsSvcDomain  :=  fmt . Sprintf ( "%s.svc.%s" ,  pod . Namespace ,  kl . clusterDomain ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										svcDomain  :=  fmt . Sprintf ( "svc.%s" ,  kl . clusterDomain ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										dnsSearch  =  append ( [ ] string { nsSvcDomain ,  svcDomain ,  kl . clusterDomain } ,  hostSearch ... ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-29 02:54:32 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										dnsSearch  =  hostSearch 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-12 13:21:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-27 02:59:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  dns ,  dnsSearch ,  nil 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-12 13:21:40 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// syncPod is the transaction script for the sync of a single pod.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Arguments:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-21 06:08:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// o - the SyncPodOptions for this invocation
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// The workflow is:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * If the pod is being created, record pod worker start latency
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// * Call generateAPIPodStatus to prepare an v1.PodStatus for the pod
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// * If the pod is being seen as running for the first time, record pod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//   start latency
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * Update the status of the pod in the status manager
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * Kill the pod if it should not be running
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * Create a mirror pod if the pod is a static pod, and does not
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//   already have a mirror pod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * Create the data directories for the pod if they do not exist
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-30 10:22:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// * Wait for volumes to attach/mount
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// * Fetch the pull secrets for the pod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * Call the container runtime's SyncPod callback
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * Update the traffic shaping for the pod's ingress and egress limits
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-01 08:43:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// If any step of this workflow errors, the error is returned, and is repeated
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// on the next syncPod call.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-07 02:07:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  syncPod ( o  syncPodOptions )  error  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// pull out the required options
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									pod  :=  o . pod 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									mirrorPod  :=  o . mirrorPod 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podStatus  :=  o . podStatus 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									updateType  :=  o . updateType 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// if we want to kill a pod, do it now!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  updateType  ==  kubetypes . SyncPodKill  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										killPodOptions  :=  o . killPodOptions 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  killPodOptions  ==  nil  ||  killPodOptions . PodStatusFunc  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  fmt . Errorf ( "kill pod options are required if update type is kill" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										apiPodStatus  :=  killPodOptions . PodStatusFunc ( pod ,  podStatus ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . statusManager . SetPodStatus ( pod ,  apiPodStatus ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// we kill the pod with the specified grace period since this is a termination
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  err  :=  kl . killPod ( pod ,  nil ,  podStatus ,  killPodOptions . PodTerminationGracePeriodSecondsOverride ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// there was an error killing the pod, so we return that error directly
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											utilruntime . HandleError ( err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Latency measurements for the main workflow are relative to the
 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-11 14:14:01 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// first time the pod was seen by the API server.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-06 03:42:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									var  firstSeenTime  time . Time 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  firstSeenTimeStr ,  ok  :=  pod . Annotations [ kubetypes . ConfigFirstSeenAnnotationKey ] ;  ok  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										firstSeenTime  =  kubetypes . ConvertToTimestamp ( firstSeenTimeStr ) . Get ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-06 03:42:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-09 22:23:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Record pod worker start latency if being created
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO: make pod workers record their own latencies
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  updateType  ==  kubetypes . SyncPodCreate  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  ! firstSeenTime . IsZero ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// This is the first time we are syncing the pod. Record the latency
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// since kubelet first saw the pod if firstSeenTime is set.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											metrics . PodWorkerStartLatency . Observe ( metrics . SinceInMicroseconds ( firstSeenTime ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-09 22:23:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . V ( 3 ) . Infof ( "First seen time not recorded for pod %q" ,  pod . UID ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-09 22:23:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Generate final API pod status with pod and status manager status
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-13 13:56:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									apiPodStatus  :=  kl . generateAPIPodStatus ( pod ,  podStatus ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-22 06:32:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// The pod IP may be changed in generateAPIPodStatus if the pod is using host network. (See #24576)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO(random-liu): After writing pod spec into container labels, check whether pod is using host network, and
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// set pod IP to hostIP directly in runtime.GetPodStatus
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podStatus . IP  =  apiPodStatus . PodIP 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Record the time it takes for the pod to become running.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									existingStatus ,  ok  :=  kl . statusManager . GetPodStatus ( pod . UID ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  ! ok  ||  existingStatus . Phase  ==  v1 . PodPending  &&  apiPodStatus . Phase  ==  v1 . PodRunning  && 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										! firstSeenTime . IsZero ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										metrics . PodStartLatency . Observe ( metrics . SinceInMicroseconds ( firstSeenTime ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 11:08:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									runnable  :=  kl . canRunPod ( pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  ! runnable . Admit  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Pod is not runnable; update the Pod and Container statuses to why.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										apiPodStatus . Reason  =  runnable . Reason 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										apiPodStatus . Message  =  runnable . Message 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Waiting containers are not creating.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										const  waitingReason  =  "Blocked" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										for  _ ,  cs  :=  range  apiPodStatus . InitContainerStatuses  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  cs . State . Waiting  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												cs . State . Waiting . Reason  =  waitingReason 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										for  _ ,  cs  :=  range  apiPodStatus . ContainerStatuses  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  cs . State . Waiting  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												cs . State . Waiting . Reason  =  waitingReason 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Update status in the status manager
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-20 10:15:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . statusManager . SetPodStatus ( pod ,  apiPodStatus ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-09 22:23:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Kill pod if it should not be running
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  ! runnable . Admit  ||  pod . DeletionTimestamp  !=  nil  ||  apiPodStatus . Phase  ==  v1 . PodFailed  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										var  syncErr  error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  err  :=  kl . killPod ( pod ,  nil ,  podStatus ,  nil ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											syncErr  =  fmt . Errorf ( "error killing pod: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											utilruntime . HandleError ( syncErr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  ! runnable . Admit  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// There was no error killing the pod, but the pod cannot be run.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// Return an error to signal that the sync loop should back off.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												syncErr  =  fmt . Errorf ( "pod cannot be run: %s" ,  runnable . Message ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-20 09:57:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  syncErr 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-27 02:25:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-23 11:04:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// If the network plugin is not ready, only start the pod if it uses the host network
 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-08 09:23:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  rs  :=  kl . runtimeState . networkErrors ( ) ;  len ( rs )  !=  0  &&  ! kubecontainer . IsHostNetworkPod ( pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-23 11:04:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "network is not ready: %v" ,  rs ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-18 01:23:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Create Cgroups for the pod and apply resource parameters
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// to them if cgroup-per-qos flag is enabled.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									pcm  :=  kl . containerManager . NewPodContainerManager ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// If pod has already been terminated then we need not create
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// or update the pod's cgroup
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  ! kl . podIsTerminated ( pod )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// When the kubelet is restarted with the cgroup-per-qos
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// flag enabled, all the pod's running containers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// should be killed intermittently and brought back up
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// under the qos cgroup hierarchy.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Check if this is the pod's first sync
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										firstSync  :=  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										for  _ ,  containerStatus  :=  range  apiPodStatus . ContainerStatuses  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  containerStatus . State . Running  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												firstSync  =  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Don't kill containers in pod if pod's cgroups already
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// exists or the pod is running for the first time
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										podKilled  :=  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  ! pcm . Exists ( pod )  &&  ! firstSync  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kl . killPod ( pod ,  nil ,  podStatus ,  nil ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											podKilled  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Create and Update pod's Cgroups
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Don't create cgroups for run once pod if it was killed above
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// The current policy is not to restart the run once pods when
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// the kubelet is restarted with the new flag as run once pods are
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// expected to run only once and if the kubelet is restarted then
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// they are not expected to run again.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// We don't create and apply updates to cgroup if its a run once pod and was killed above
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  ! ( podKilled  &&  pod . Spec . RestartPolicy  ==  v1 . RestartPolicyNever )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-18 01:23:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  err  :=  pcm . EnsureExists ( pod ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												return  fmt . Errorf ( "failed to ensure that the pod: %v cgroups exist and are correctly applied: %v" ,  pod . UID ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 02:50:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Create Mirror Pod for Static Pod if it doesn't already exist
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubepod . IsStaticPod ( pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 05:31:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										podFullName  :=  kubecontainer . GetPodFullName ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-22 03:55:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										deleted  :=  false 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-07 13:42:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  mirrorPod  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  mirrorPod . DeletionTimestamp  !=  nil  ||  ! kl . podManager . IsMirrorPodOf ( mirrorPod ,  pod )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// The mirror pod is semantically different from the static pod. Remove
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// it. The mirror pod will get recreated later.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-11 14:14:01 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												glog . Warningf ( "Deleting mirror pod %q because it is outdated" ,  format . Pod ( mirrorPod ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-07 13:42:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												if  err  :=  kl . podManager . DeleteMirrorPod ( podFullName ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
													glog . Errorf ( "Failed deleting mirror pod %q: %v" ,  format . Pod ( mirrorPod ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
													deleted  =  true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 02:50:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-22 03:55:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  mirrorPod  ==  nil  ||  deleted  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 05:31:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . V ( 3 ) . Infof ( "Creating a mirror pod for static pod %q" ,  format . Pod ( pod ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 02:50:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  err  :=  kl . podManager . CreateMirrorPod ( pod ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 05:31:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												glog . Errorf ( "Failed creating a mirror pod for %q: %v" ,  format . Pod ( pod ) ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 02:50:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Make data directories for the pod
 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-18 07:12:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  kl . makePodDataDirs ( pod ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 05:31:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										glog . Errorf ( "Unable to make pod data directories for pod %q: %v" ,  format . Pod ( pod ) ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-18 07:12:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-05-30 10:22:22 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Wait for volumes to attach/mount
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-27 06:04:03 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  :=  kl . volumeManager . WaitForAttachAndMount ( pod ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . recorder . Eventf ( pod ,  v1 . EventTypeWarning ,  events . FailedMountVolume ,  "Unable to mount volumes for pod %q: %v" ,  format . Pod ( pod ) ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-09 04:53:33 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										glog . Errorf ( "Unable to mount volumes for pod %q: %v; skipping pod" ,  format . Pod ( pod ) ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  err 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-16 08:40:07 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Fetch the pull secrets for the pod
 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-09 01:53:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									pullSecrets ,  err  :=  kl . getPullSecretsForPod ( pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 05:31:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										glog . Errorf ( "Unable to get pull secrets for pod %q: %v" ,  format . Pod ( pod ) ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-09 01:53:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Call the container runtime's SyncPod callback
 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-12 18:19:13 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									result  :=  kl . containerRuntime . SyncPod ( pod ,  apiPodStatus ,  podStatus ,  pullSecrets ,  kl . backOff ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-13 05:28:00 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . reasonCache . Update ( pod . UID ,  result ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  =  result . Error ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-01 09:37:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  err 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-10 22:09:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// early successful exit if pod is not bandwidth-constrained
 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-23 00:43:13 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  ! kl . shapingEnabled ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Update the traffic shaping for the pod's ingress and egress limits
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-02 01:00:05 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									ingress ,  egress ,  err  :=  bandwidth . ExtractPodBandwidthResources ( pod . Annotations ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-11 06:08:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  egress  !=  nil  ||  ingress  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-08 09:23:04 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  kubecontainer . IsHostNetworkPod ( pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											kl . recorder . Event ( pod ,  v1 . EventTypeWarning ,  events . HostNetworkNotSupported ,  "Bandwidth shaping is not currently supported on the host network" ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-11 06:08:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										}  else  if  kl . shaper  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-18 16:23:48 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  len ( apiPodStatus . PodIP )  >  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												err  =  kl . shaper . ReconcileCIDR ( fmt . Sprintf ( "%s/32" ,  apiPodStatus . PodIP ) ,  egress ,  ingress ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-11 06:08:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											kl . recorder . Event ( pod ,  v1 . EventTypeWarning ,  events . UndefinedShaper ,  "Pod requests bandwidth shaping, but the shaper is undefined" ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-11 06:08:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-01 13:27:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 13:59:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Get pods which should be resynchronized. Currently, the following pod should be resynchronized:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//   * pod whose work is ready.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//   * internal modules that request sync of a pod.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  getPodsToSync ( )  [ ] * v1 . Pod  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 13:59:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									allPods  :=  kl . podManager . GetPods ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podUIDs  :=  kl . workQueue . GetWork ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									podUIDSet  :=  sets . NewString ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									for  _ ,  podUID  :=  range  podUIDs  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										podUIDSet . Insert ( string ( podUID ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									var  podsToSync  [ ] * v1 . Pod 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 13:59:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  _ ,  pod  :=  range  allPods  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  podUIDSet . Has ( string ( pod . UID ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// The work of the pod is ready
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											podsToSync  =  append ( podsToSync ,  pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										for  _ ,  podSyncLoopHandler  :=  range  kl . PodSyncLoopHandlers  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  podSyncLoopHandler . ShouldSync ( pod )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												podsToSync  =  append ( podsToSync ,  pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 13:59:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  podsToSync 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// deletePod deletes the pod from the internal state of the kubelet by:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 1.  stopping the associated pod worker asynchronously
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 2.  signaling to kill the pod by sending on the podKillingCh channel
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// deletePod returns an error if not all sources are ready or the pod is not
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// found in the runtime cache.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  deletePod ( pod  * v1 . Pod )  error  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-01 07:56:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  pod  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "deletePod does not allow nil pod" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-27 01:58:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  ! kl . sourcesReady . AllReady ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// If the sources aren't ready, skip deletion, as we may accidentally delete pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// for sources that haven't reported yet.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "skipping delete because sources aren't ready yet" ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-02 00:37:45 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-01 07:56:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . podWorkers . ForgetWorker ( pod . UID ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-12 07:25:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Runtime cache may not have been updated to with the pod, but it's okay
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// because the periodic cleanup routine will attempt to delete again later.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									runningPods ,  err  :=  kl . runtimeCache . GetPods ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "error listing containers: %v" ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-12 07:25:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-01 07:56:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									runningPod  :=  kubecontainer . Pods ( runningPods ) . FindPod ( "" ,  pod . UID ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  runningPod . IsEmpty ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  fmt . Errorf ( "pod not found" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-24 07:45:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									podPair  :=  kubecontainer . PodPair { APIPod :  pod ,  RunningPod :  & runningPod } 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-01 07:56:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . podKillingCh  <-  & podPair 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// TODO: delete the mirror pod here?
 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-27 17:19:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// We leave the volume/directory cleanup to the periodic cleanup routine.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-01 08:43:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// isOutOfDisk detects if pods can't fit due to lack of disk space.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  isOutOfDisk ( )  bool  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Check disk space once globally and reject or accept all new pods.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-18 13:05:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									withinBounds ,  err  :=  kl . diskSpaceManager . IsRuntimeDiskSpaceAvailable ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Assume enough space in case of errors.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-11 06:22:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Errorf ( "Failed to check if disk space is available for the runtime: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									}  else  if  ! withinBounds  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  true 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									withinBounds ,  err  =  kl . diskSpaceManager . IsRootDiskSpaceAvailable ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Assume enough space in case of errors.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-11 06:22:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . Errorf ( "Failed to check if disk space is available on the root partition: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									}  else  if  ! withinBounds  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  true 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-11 06:22:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  false 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-12 16:24:08 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// rejectPod records an event about the pod with the given reason and message,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// and updates the pod to the failed phase in the status manage.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  rejectPod ( pod  * v1 . Pod ,  reason ,  message  string )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									kl . recorder . Eventf ( pod ,  v1 . EventTypeWarning ,  reason ,  message ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									kl . statusManager . SetPodStatus ( pod ,  v1 . PodStatus { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										Phase :    v1 . PodFailed , 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										Reason :   reason , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										Message :  "Pod "  +  message } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-15 04:02:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// canAdmitPod determines if a pod can be admitted, and gives a reason if it
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 10:44:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// cannot. "pod" is new pod, while "pods" are all admitted pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// The function returns a boolean value indicating whether the pod
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// can be admitted, a brief single-word reason and a message explaining why
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// the pod cannot be admitted.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  canAdmitPod ( pods  [ ] * v1 . Pod ,  pod  * v1 . Pod )  ( bool ,  string ,  string )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// the kubelet will invoke each pod admit handler in sequence
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// if any handler rejects, the pod is rejected.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO: move out of disk check into a pod admitter
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO: out of resource eviction should have a pod admitter call-out
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 10:44:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									attrs  :=  & lifecycle . PodAdmitAttributes { Pod :  pod ,  OtherPods :  pods } 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  _ ,  podAdmitHandler  :=  range  kl . admitHandlers  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  result  :=  podAdmitHandler . Admit ( attrs ) ;  ! result . Admit  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  false ,  result . Reason ,  result . Message 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-06 09:10:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// TODO: When disk space scheduling is implemented (#11976), remove the out-of-disk check here and
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// add the disk space predicate to predicates.GeneralPredicates.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kl . isOutOfDisk ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-29 22:50:56 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										glog . Warningf ( "Failed to admit pod %v - %s" ,  format . Pod ( pod ) ,  "predicate fails due to OutOfDisk" ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return  false ,  "OutOfDisk" ,  "cannot be started due to lack of disk space." 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-16 02:17:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  true ,  "" ,  "" 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-08 12:48:47 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  canRunPod ( pod  * v1 . Pod )  lifecycle . PodAdmitResult  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 02:05:16 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									attrs  :=  & lifecycle . PodAdmitAttributes { Pod :  pod } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Get "OtherPods". Rejected pods are failed, so only include admitted pods that are alive.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									attrs . OtherPods  =  kl . filterOutTerminatedPods ( kl . podManager . GetPods ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									for  _ ,  handler  :=  range  kl . softAdmitHandlers  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  result  :=  handler . Admit ( attrs ) ;  ! result . Admit  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  result 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// TODO: Refactor as a soft admit handler.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  :=  canRunPod ( pod ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  lifecycle . PodAdmitResult { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											Admit :    false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											Reason :   "Forbidden" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											Message :  err . Error ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  lifecycle . PodAdmitResult { Admit :  true } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-07-02 04:01:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// syncLoop is the main loop for processing changes. It watches for changes from
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-12 07:40:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// three channels (file, apiserver, and http) and creates a union of them. For
 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								// any new change seen, will run a sync against desired state and running state. If
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// no changes are seen to the configuration, will synchronize the last known desired
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-12 04:29:50 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// state every sync-frequency seconds. Never returns.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  syncLoop ( updates  <- chan  kubetypes . PodUpdate ,  handler  SyncHandler )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-04-09 04:57:19 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									glog . Info ( "Starting kubelet main sync loop." ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-03 01:18:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// The resyncTicker wakes up kubelet to checks if there are any pod workers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// that need to be sync'd. A one-second period is sufficient because the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// sync interval is defaulted to 10s.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-04 02:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									syncTicker  :=  time . NewTicker ( time . Second ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 11:53:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									defer  syncTicker . Stop ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-04 02:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									housekeepingTicker  :=  time . NewTicker ( housekeepingPeriod ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 11:53:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									defer  housekeepingTicker . Stop ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									plegCh  :=  kl . pleg . Watch ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									for  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-23 11:04:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  rs  :=  kl . runtimeState . runtimeErrors ( ) ;  len ( rs )  !=  0  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-25 06:26:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . Infof ( "skipping pod synchronization - %v" ,  rs ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-28 09:07:57 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											time . Sleep ( 5  *  time . Second ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  ! kl . syncLoopIteration ( updates ,  handler ,  syncTicker . C ,  housekeepingTicker . C ,  plegCh )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-16 03:29:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// syncLoopIteration reads from various channels and dispatches pods to the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// given handler.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Arguments:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 1.  configCh:       a channel to read config events from
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 2.  handler:        the SyncHandler to dispatch pods to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 3.  syncCh:         a channel to read periodic sync events from
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 4.  houseKeepingCh: a channel to read housekeeping events from
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// 5.  plegCh:         a channel to read PLEG updates from
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Events are also read from the kubelet liveness manager's update channel.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// The workflow is to read from one of the channels, handle that event, and
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// update the timestamp in the sync loop monitor.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Here is an appropriate place to note that despite the syntactical
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// similarity to the switch statement, the case statements in a select are
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// evaluated in a pseudorandom order if there are multiple channels ready to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// read from when the select is evaluated.  In other words, case statements
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// are evaluated in random order, and you can not assume that the case
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// statements evaluate in order if multiple channels have events.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// With that in mind, in truly no particular order, the different channels
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// are handled as follows:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * configCh: dispatch the pods for the config change to the appropriate
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//             handler callback for the event type
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * plegCh: update the runtime cache; sync pod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * syncCh: sync all pods waiting for sync
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * houseKeepingCh: trigger cleanup of pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// * liveness manager: sync pods that have failed or in which one or more
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//                     containers have failed liveness checks
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  syncLoopIteration ( configCh  <- chan  kubetypes . PodUpdate ,  handler  SyncHandler , 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									syncCh  <- chan  time . Time ,  housekeepingCh  <- chan  time . Time ,  plegCh  <- chan  * pleg . PodLifecycleEvent )  bool  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . syncLoopMonitor . Store ( kl . clock . Now ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									select  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									case  u ,  open  :=  <- configCh : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Update from a config source; dispatch it to the right handler
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// callback.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-31 03:47:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  ! open  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Update channel is closed. Exiting the sync loop." ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-31 03:47:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											return  false 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 13:34:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										switch  u . Op  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  kubetypes . ADD : 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-21 01:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . V ( 2 ) . Infof ( "SyncLoop (ADD, %q): %q" ,  u . Source ,  format . Pods ( u . Pods ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-18 02:36:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// After restarting, kubelet will get all existing pods through
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// ADD as if they are new pods. These pods will then go through the
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-23 22:27:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// admission process and *may* be rejected. This can be resolved
 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-18 02:36:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// once we have checkpointing.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											handler . HandlePodAdditions ( u . Pods ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  kubetypes . UPDATE : 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 07:32:30 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . V ( 2 ) . Infof ( "SyncLoop (UPDATE, %q): %q" ,  u . Source ,  format . PodsWithDeletiontimestamps ( u . Pods ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											handler . HandlePodUpdates ( u . Pods ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  kubetypes . REMOVE : 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-21 01:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . V ( 2 ) . Infof ( "SyncLoop (REMOVE, %q): %q" ,  u . Source ,  format . Pods ( u . Pods ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-14 17:29:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											handler . HandlePodRemoves ( u . Pods ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-09 11:13:09 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  kubetypes . RECONCILE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . V ( 4 ) . Infof ( "SyncLoop (RECONCILE, %q): %q" ,  u . Source ,  format . Pods ( u . Pods ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											handler . HandlePodReconcile ( u . Pods ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-14 17:29:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  kubetypes . DELETE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . V ( 2 ) . Infof ( "SyncLoop (DELETE, %q): %q" ,  u . Source ,  format . Pods ( u . Pods ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// DELETE is treated as a UPDATE because of graceful deletion.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											handler . HandlePodUpdates ( u . Pods ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  kubetypes . SET : 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// TODO: Do we want to support this?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Kubelet does not support snapshot update" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-11 08:55:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Mark the source ready after receiving at least one update from the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// source. Once all the sources are marked ready, various cleanup
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// routines will start reclaiming resources. It is important that this
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// takes place only after kubelet calls the update handler to process
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// the update to ensure the internal pod cache is up-to-date.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . sourcesReady . AddSource ( u . Source ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									case  e  :=  <- plegCh : 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:48:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  isSyncPodWorthy ( e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// PLEG event for a pod; sync it.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 07:51:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  pod ,  ok  :=  kl . podManager . GetPodByUID ( e . ID ) ;  ok  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												glog . V ( 2 ) . Infof ( "SyncLoop (PLEG): %q, event: %#v" ,  format . Pod ( pod ) ,  e ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												handler . HandlePodSyncs ( [ ] * v1 . Pod { pod } ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 07:51:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:48:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
												// If the pod no longer exists, ignore the event.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												glog . V ( 4 ) . Infof ( "SyncLoop (PLEG): ignore irrelevant event: %#v" ,  e ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-08 05:42:21 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 09:14:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:58:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  e . Type  ==  pleg . ContainerDied  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 09:14:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  containerID ,  ok  :=  e . Data . ( string ) ;  ok  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kl . cleanUpContainersInPod ( e . ID ,  containerID ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:58:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-04 02:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									case  <- syncCh : 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// Sync pods waiting for sync
 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 13:59:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										podsToSync  :=  kl . getPodsToSync ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-05 07:35:10 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  len ( podsToSync )  ==  0  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-21 01:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										glog . V ( 4 ) . Infof ( "SyncLoop (SYNC): %d pods; %s" ,  len ( podsToSync ) ,  format . Pods ( podsToSync ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-03 01:18:11 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . HandlePodSyncs ( podsToSync ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									case  update  :=  <- kl . livenessManager . Updates ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  update . Result  ==  proberesults . Failure  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// The liveness manager detected a failure; sync the pod.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-10 08:32:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// We should not use the pod from livenessManager, because it is never updated after
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// initialization.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-12 13:02:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											pod ,  ok  :=  kl . podManager . GetPodByUID ( update . PodUID ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-10 08:32:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											if  ! ok  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												// If the pod no longer exists, ignore the update.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												glog . V ( 4 ) . Infof ( "SyncLoop (container unhealthy): ignore irrelevant update: %#v" ,  update ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												break 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . V ( 1 ) . Infof ( "SyncLoop (container unhealthy): %q" ,  format . Pod ( pod ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											handler . HandlePodSyncs ( [ ] * v1 . Pod { pod } ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-20 06:15:59 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-04 02:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									case  <- housekeepingCh : 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-27 01:58:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  ! kl . sourcesReady . AllReady ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 06:15:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// If the sources aren't ready or volume manager has not yet synced the states,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// skip housekeeping, as we may accidentally delete pods from unready sources.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-04 02:03:39 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . V ( 4 ) . Infof ( "SyncLoop (housekeeping, skipped): sources aren't ready yet." ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . V ( 4 ) . Infof ( "SyncLoop (housekeeping)" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  err  :=  handler . HandlePodCleanups ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												glog . Errorf ( "Failed cleaning pods: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . syncLoopMonitor . Store ( kl . clock . Now ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-31 03:47:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  true 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// dispatchWork starts the asynchronous sync of the pod in a pod worker.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// If the pod is terminated, dispatchWork
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  dispatchWork ( pod  * v1 . Pod ,  syncType  kubetypes . SyncPodType ,  mirrorPod  * v1 . Pod ,  start  time . Time )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kl . podIsTerminated ( pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-18 07:56:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  pod . DeletionTimestamp  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// If the pod is in a terminated state, there is no pod worker to
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-18 07:56:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											// handle the work item. Check if the DeletionTimestamp has been
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// set, and force a status update to trigger a pod deletion request
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// to the apiserver.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kl . statusManager . TerminatePod ( pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Run the sync in an async worker.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-07 02:07:24 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . podWorkers . UpdatePod ( & UpdatePodOptions { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										Pod :         pod , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										MirrorPod :   mirrorPod , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										UpdateType :  syncType , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										OnCompleteFunc :  func ( err  error )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												metrics . PodWorkerLatency . WithLabelValues ( syncType . String ( ) ) . Observe ( metrics . SinceInMicroseconds ( start ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} , 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Note the number of containers for new pods.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  syncType  ==  kubetypes . SyncPodCreate  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										metrics . ContainersPerPodCount . Observe ( float64 ( len ( pod . Spec . Containers ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-15 09:28:25 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// TODO: handle mirror pods in a separate component (issue #17251)
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  handleMirrorPod ( mirrorPod  * v1 . Pod ,  start  time . Time )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Mirror pod ADD/UPDATE/DELETE operations are considered an UPDATE to the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// corresponding static pod. Send update to the pod worker if the static
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// pod exists.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  pod ,  ok  :=  kl . podManager . GetPodByMirrorPod ( mirrorPod ) ;  ok  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . dispatchWork ( pod ,  kubetypes . SyncPodUpdate ,  mirrorPod ,  start ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// HandlePodAdditions is the callback in SyncHandler for pods being added from
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// a config source.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  HandlePodAdditions ( pods  [ ] * v1 . Pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									start  :=  kl . clock . Now ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-16 05:27:49 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Pass critical pods through admission check first.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  criticalPods  [ ] * v1 . Pod 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									var  nonCriticalPods  [ ] * v1 . Pod 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									for  _ ,  p  :=  range  pods  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-22 08:04:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  kubetypes . IsCriticalPod ( p )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-16 05:27:49 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											criticalPods  =  append ( criticalPods ,  p ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											nonCriticalPods  =  append ( nonCriticalPods ,  p ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									sort . Sort ( sliceutils . PodsByCreationTime ( criticalPods ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									sort . Sort ( sliceutils . PodsByCreationTime ( nonCriticalPods ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									for  _ ,  pod  :=  range  append ( criticalPods ,  nonCriticalPods ... )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 06:57:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										existingPods  :=  kl . podManager . GetPods ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Always add the pod to the pod manager. Kubelet relies on the pod
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// manager as the source of truth for the desired state. If a pod does
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// not exist in the pod manager, it means that it has been deleted in
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// the apiserver and no action (other than cleanup) is required.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . podManager . AddPod ( pod ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 07:28:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  kubepod . IsMirrorPod ( pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											kl . handleMirrorPod ( pod ,  start ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-30 06:57:17 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  ! kl . podIsTerminated ( pod )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// Only go through the admission process if the pod is not
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// terminated.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// We failed pods that we rejected, so activePods include all admitted
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// pods that are alive.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											activePods  :=  kl . filterOutTerminatedPods ( existingPods ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// Check if we can admit the pod; if not, reject it.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  ok ,  reason ,  message  :=  kl . canAdmitPod ( activePods ,  pod ) ;  ! ok  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kl . rejectPod ( pod ,  reason ,  message ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										mirrorPod ,  _  :=  kl . podManager . GetMirrorPodByPod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . dispatchWork ( pod ,  kubetypes . SyncPodCreate ,  mirrorPod ,  start ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-26 01:39:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . probeManager . AddPod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// HandlePodUpdates is the callback in the SyncHandler interface for pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// being updated from a config source.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  HandlePodUpdates ( pods  [ ] * v1 . Pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									start  :=  kl . clock . Now ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  _ ,  pod  :=  range  pods  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . podManager . UpdatePod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 07:28:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  kubepod . IsMirrorPod ( pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											kl . handleMirrorPod ( pod ,  start ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// TODO: Evaluate if we need to validate and reject updates.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										mirrorPod ,  _  :=  kl . podManager . GetMirrorPodByPod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . dispatchWork ( pod ,  kubetypes . SyncPodUpdate ,  mirrorPod ,  start ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-14 17:29:18 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// HandlePodRemoves is the callback in the SyncHandler interface for pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// being removed from a config source.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  HandlePodRemoves ( pods  [ ] * v1 . Pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									start  :=  kl . clock . Now ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  _ ,  pod  :=  range  pods  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . podManager . DeletePod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-13 07:28:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  kubepod . IsMirrorPod ( pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											kl . handleMirrorPod ( pod ,  start ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Deletion is allowed to fail because the periodic cleanup routine
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// will trigger deletion again.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-01 07:56:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  err  :=  kl . deletePod ( pod ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-21 01:54:37 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											glog . V ( 2 ) . Infof ( "Failed to delete pod %q, err: %v" ,  format . Pod ( pod ) ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-26 01:39:41 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . probeManager . RemovePod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// HandlePodReconcile is the callback in the SyncHandler interface for pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// that should be reconciled.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  HandlePodReconcile ( pods  [ ] * v1 . Pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-09 11:13:09 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  _ ,  pod  :=  range  pods  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Update the pod in pod manager, status manager will do periodically reconcile according
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// to the pod manager.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										kl . podManager . UpdatePod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 06:37:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// After an evicted pod is synced, all dead containers in the pod can be removed.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  eviction . PodIsEvicted ( pod . Status )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  podStatus ,  err  :=  kl . podCache . Get ( pod . UID ) ;  err  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												kl . containerDeletor . deleteContainersInPod ( "" ,  podStatus ,  true ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-09 11:13:09 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// HandlePodSyncs is the callback in the syncHandler interface for pods
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// that should be dispatched to pod workers for sync.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  HandlePodSyncs ( pods  [ ] * v1 . Pod )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									start  :=  kl . clock . Now ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-08-19 08:52:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  _ ,  pod  :=  range  pods  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										mirrorPod ,  _  :=  kl . podManager . GetMirrorPodByPod ( pod ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-10 01:24:31 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . dispatchWork ( pod ,  kubetypes . SyncPodSync ,  mirrorPod ,  start ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// LatestLoopEntryTime returns the last time in the sync loop monitor.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  LatestLoopEntryTime ( )  time . Time  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									val  :=  kl . syncLoopMonitor . Load ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  val  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  time . Time { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  val . ( time . Time ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-07 07:40:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// updateRuntimeUp calls the container runtime status callback, initializing
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// the runtime dependent modules when the container runtime first comes up,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// and returns an error if the status check fails.  If the status check is OK,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// update the container runtime uptime in the kubelet runtimeState.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 18:19:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  updateRuntimeUp ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-02 12:39:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									s ,  err  :=  kl . containerRuntime . Status ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 03:12:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										glog . Errorf ( "Container runtime sanity check failed: %v" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 18:19:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-02 12:39:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									// Only check specific conditions when runtime integration type is cri,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// because the old integration doesn't populate any runtime condition.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-07 01:20:57 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  kl . kubeletConfiguration . EnableCRI  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-02 12:39:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										if  s  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Container runtime status is nil" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Periodically log the whole runtime status for debugging.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// TODO(random-liu): Consider to send node event when optional
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// condition is unmet.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										glog . V ( 4 ) . Infof ( "Container runtime status: %v" ,  s ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-03 09:23:57 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										networkReady  :=  s . GetRuntimeCondition ( kubecontainer . NetworkReady ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  networkReady  ==  nil  ||  ! networkReady . Status  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Container runtime network not ready: %v" ,  networkReady ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kl . runtimeState . setNetworkState ( fmt . Errorf ( "runtime network not ready: %v" ,  networkReady ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// Set nil if the containe runtime network is ready.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											kl . runtimeState . setNetworkState ( nil ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// TODO(random-liu): Add runtime error in runtimeState, and update it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// when runtime is not ready, so that the information in RuntimeReady
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// condition will be propagated to NodeReady condition.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										runtimeReady  :=  s . GetRuntimeCondition ( kubecontainer . RuntimeReady ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-02 12:39:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// If RuntimeReady is not set or is false, report an error.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  runtimeReady  ==  nil  ||  ! runtimeReady . Status  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											glog . Errorf ( "Container runtime not ready: %v" ,  runtimeReady ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 03:12:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . oneTimeInitializer . Do ( kl . initializeRuntimeDependentModules ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-01-05 04:03:28 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . runtimeState . setRuntimeSync ( kl . clock . Now ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-05 18:19:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-23 23:58:44 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// updateCloudProviderFromMachineInfo updates the node's provider ID field
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// from the given cadvisor machine info.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  updateCloudProviderFromMachineInfo ( node  * v1 . Node ,  info  * cadvisorapi . MachineInfo )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-14 16:33:14 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									if  info . CloudProvider  !=  cadvisorapi . UnknownProvider  && 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										info . CloudProvider  !=  cadvisorapi . Baremetal  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// The cloud providers from pkg/cloudprovider/providers/* that update ProviderID
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// will use the format of cloudprovider://project/availability_zone/instance_name
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// here we only have the cloudprovider and the instance name so we leave project
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// and availability zone empty for compatibility.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										node . Spec . ProviderID  =  strings . ToLower ( string ( info . CloudProvider ) )  + 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											":////"  +  string ( info . InstanceID ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// GetConfiguration returns the KubeletConfiguration used to configure the kubelet.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 09:03:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  GetConfiguration ( )  componentconfig . KubeletConfiguration  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									return  kl . kubeletConfiguration 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-03-30 21:20:20 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// BirthCry sends an event that the kubelet has started up.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  BirthCry ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// Make an event that kubelet restarted.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									kl . recorder . Eventf ( kl . nodeRef ,  v1 . EventTypeNormal ,  events . StartingKubelet ,  "Starting kubelet." ) 
							 
						 
					
						
							
								
									
										
										
										
											2014-11-11 05:13:57 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-09 04:41:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// StreamingConnectionIdleTimeout returns the timeout for streaming connections to the HTTP server.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-01-09 04:41:38 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  StreamingConnectionIdleTimeout ( )  time . Duration  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  kl . streamingConnectionIdleTimeout 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-06 15:56:30 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// ResyncInterval returns the interval used for periodic syncs.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-18 06:31:46 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  ResyncInterval ( )  time . Duration  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  kl . resyncInterval 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// ListenAndServe runs the kubelet HTTP server.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-11 04:14:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  ListenAndServe ( address  net . IP ,  port  uint ,  tlsOptions  * server . TLSOptions ,  auth  server . AuthInterface ,  enableDebuggingHandlers  bool )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									server . ListenAndServeKubeletServer ( kl ,  kl . resourceAnalyzer ,  address ,  port ,  tlsOptions ,  auth ,  enableDebuggingHandlers ,  kl . containerRuntime ,  kl . criHandler ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-26 20:31:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 12:26:36 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// ListenAndServeReadOnly runs the kubelet HTTP server in read-only mode.
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-26 20:31:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  ListenAndServeReadOnly ( address  net . IP ,  port  uint )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-29 08:05:02 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									server . ListenAndServeKubeletReadOnlyServer ( kl ,  kl . resourceAnalyzer ,  address ,  port ,  kl . containerRuntime ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-26 20:31:54 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:48:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 09:14:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Delete the eligible dead container instances in a pod. Depending on the configuration, the latest dead containers may be kept around.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  ( kl  * Kubelet )  cleanUpContainersInPod ( podId  types . UID ,  exitedContainerID  string )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  podStatus ,  err  :=  kl . podCache . Get ( podId ) ;  err  ==  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 06:37:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										removeAll  :=  false 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										if  syncedPod ,  ok  :=  kl . podManager . GetPodByUID ( podId ) ;  ok  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											// When an evicted pod has already synced, all containers can be removed.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											removeAll  =  eviction . PodIsEvicted ( syncedPod . Status ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 09:14:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 06:37:23 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										kl . containerDeletor . deleteContainersInPod ( exitedContainerID ,  podStatus ,  removeAll ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 09:14:52 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-08 00:58:55 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// isSyncPodWorthy filters out events that are not worthy of pod syncing
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:48:43 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  isSyncPodWorthy ( event  * pleg . PodLifecycleEvent )  bool  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									// ContatnerRemoved doesn't affect pod state
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  event . Type  !=  pleg . ContainerRemoved 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 04:27:09 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// parseResourceList parses the given configuration map into an API
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// ResourceList or returns an error.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  parseResourceList ( m  utilconfig . ConfigurationMap )  ( v1 . ResourceList ,  error )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									rl  :=  make ( v1 . ResourceList ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
									for  k ,  v  :=  range  m  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										switch  v1 . ResourceName ( k )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										// Only CPU and memory resources are supported.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										case  v1 . ResourceCPU ,  v1 . ResourceMemory : 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											q ,  err  :=  resource . ParseQuantity ( v ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											if  q . Sign ( )  ==  - 1  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
												return  nil ,  fmt . Errorf ( "resource quantity for %q cannot be negative: %v" ,  k ,  v ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-19 04:50:58 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
											rl [ v1 . ResourceName ( k ) ]  =  q 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
										default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											return  nil ,  fmt . Errorf ( "cannot reserve %q resource" ,  k ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  rl ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-16 04:27:09 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// ParseReservation parses the given kubelet- and system- reservations
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// configuration maps into an internal Reservation instance or returns an
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// error.
 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-14 07:11:12 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								func  ParseReservation ( kubeReserved ,  systemReserved  utilconfig . ConfigurationMap )  ( * kubetypes . Reservation ,  error )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									reservation  :=  new ( kubetypes . Reservation ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  rl ,  err  :=  parseResourceList ( kubeReserved ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										reservation . Kubernetes  =  rl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  rl ,  err  :=  parseResourceList ( systemReserved ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										return  nil ,  err 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										reservation . System  =  rl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  reservation ,  nil 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-05 02:50:51 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Gets the streaming server configuration to use with in-process CRI shims.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								func  getStreamingConfig ( kubeCfg  * componentconfig . KubeletConfiguration ,  kubeDeps  * KubeletDeps )  * streaming . Config  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									config  :=  & streaming . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										// Use a relative redirect (no scheme or host).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										BaseURL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
											Path :  "/cri/" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										StreamIdleTimeout :      kubeCfg . StreamingConnectionIdleTimeout . Duration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										StreamCreationTimeout :  streaming . DefaultConfig . StreamCreationTimeout , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										SupportedProtocols :     streaming . DefaultConfig . SupportedProtocols , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									if  kubeDeps . TLSOptions  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
										config . TLSConfig  =  kubeDeps . TLSOptions . Config 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
									return  config 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								}