// launchExecutorServer returns a chan that closes upon kubelet-executor death. since the kubelet- // executor doesn't support failover right now, the right thing to do is to fail completely since all // pods will be lost upon restart and we want mesos to recover the resources from them. func (ms *MinionServer) launchExecutorServer(containerID string) <-chan struct{} { allArgs := os.Args[2:] // filter out minion flags, leaving those for the executor executorFlags := pflag.NewFlagSet("executor", pflag.ContinueOnError) executorFlags.SetOutput(ioutil.Discard) ms.AddExecutorFlags(executorFlags) executorArgs, _ := filterArgsByFlagSet(allArgs, executorFlags) // disable resource-container; mesos slave doesn't like sub-containers yet executorArgs = append(executorArgs, "--kubelet-cgroups=") appendOptional := func(name, value string) { if value != "" { executorArgs = append(executorArgs, "--"+name+"="+value) } } appendOptional("cgroup-root", ms.cgroupRoot) // forward global cadvisor flag values to the executor // TODO(jdef) remove this code once cadvisor global flags have been cleaned up appendOptional(flagutil.Cadvisor.HousekeepingInterval.NameValue()) appendOptional(flagutil.Cadvisor.GlobalHousekeepingInterval.NameValue()) // forward containerID so that the executor may pass it along to containers that it launches var ctidOpt tasks.Option ctidOpt = func(t *tasks.Task) tasks.Option { oldenv := t.Env[:] t.Env = append(t.Env, "MESOS_EXECUTOR_CONTAINER_UUID="+containerID) return func(t2 *tasks.Task) tasks.Option { t2.Env = oldenv return ctidOpt } } // run executor and quit minion server when this exits cleanly execDied := make(chan struct{}) ms.launchHyperkubeServer(hyperkube.CommandExecutor, executorArgs, executorLogFilename, tasks.NoRespawn(execDied), ctidOpt) return execDied }
// launchExecutorServer returns a chan that closes upon kubelet-executor death. since the kubelet- // executor doesn't support failover right now, the right thing to do is to fail completely since all // pods will be lost upon restart and we want mesos to recover the resources from them. func (ms *MinionServer) launchExecutorServer(containerID string) <-chan struct{} { allArgs := os.Args[1:] // filter out minion flags, leaving those for the executor executorFlags := pflag.NewFlagSet("executor", pflag.ContinueOnError) executorFlags.SetOutput(ioutil.Discard) ms.AddExecutorFlags(executorFlags) executorArgs, _ := filterArgsByFlagSet(allArgs, executorFlags) // disable resource-container; mesos slave doesn't like sub-containers yet executorArgs = append(executorArgs, "--kubelet-cgroups=") if ms.cgroupRoot != "" { executorArgs = append(executorArgs, "--cgroup-root="+ms.cgroupRoot) } // forward containerID so that the executor may pass it along to containers that it launches var ctidOpt tasks.Option ctidOpt = func(t *tasks.Task) tasks.Option { oldenv := t.Env[:] t.Env = append(t.Env, "MESOS_EXECUTOR_CONTAINER_UUID="+containerID) return func(t2 *tasks.Task) tasks.Option { t2.Env = oldenv return ctidOpt } } // run executor and quit minion server when this exits cleanly execDied := make(chan struct{}) ms.launchHyperkubeServer(hyperkube.CommandExecutor, executorArgs, executorLogFilename, tasks.NoRespawn(execDied), ctidOpt) return execDied }