mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 22:46:12 +00:00
Add a dockercfg_path parameter to the Mesos scheduler (the main purpose is to handle private repos auth).
This is implemented by copying the dockercfg file in the executor work directory.
This commit is contained in:
parent
dee21c89cd
commit
57f18a0e04
@ -137,6 +137,7 @@ type SchedulerServer struct {
|
||||
KubeletSyncFrequency time.Duration
|
||||
KubeletNetworkPluginName string
|
||||
StaticPodsConfigPath string
|
||||
DockerCfgPath string
|
||||
|
||||
executable string // path to the binary running this service
|
||||
client *client.Client
|
||||
@ -212,6 +213,7 @@ func (s *SchedulerServer) addCoreFlags(fs *pflag.FlagSet) {
|
||||
fs.StringVar(&s.MesosAuthPrincipal, "mesos-authentication-principal", s.MesosAuthPrincipal, "Mesos authentication principal.")
|
||||
fs.StringVar(&s.MesosAuthSecretFile, "mesos-authentication-secret-file", s.MesosAuthSecretFile, "Mesos authentication secret file.")
|
||||
fs.StringVar(&s.MesosAuthProvider, "mesos-authentication-provider", s.MesosAuthProvider, fmt.Sprintf("Authentication provider to use, default is SASL that supports mechanisms: %+v", mech.ListSupported()))
|
||||
fs.StringVar(&s.DockerCfgPath, "dockercfg-path", s.DockerCfgPath, "Path to a dockercfg file that will be used by the docker instance of the minions.")
|
||||
fs.BoolVar(&s.Checkpoint, "checkpoint", s.Checkpoint, "Enable/disable checkpointing for the kubernetes-mesos framework.")
|
||||
fs.Float64Var(&s.FailoverTimeout, "failover-timeout", s.FailoverTimeout, fmt.Sprintf("Framework failover timeout, in sec."))
|
||||
fs.UintVar(&s.DriverPort, "driver-port", s.DriverPort, "Port that the Mesos scheduler driver process should listen on.")
|
||||
@ -265,33 +267,39 @@ func (s *SchedulerServer) AddHyperkubeFlags(fs *pflag.FlagSet) {
|
||||
|
||||
// returns (downloadURI, basename(path))
|
||||
func (s *SchedulerServer) serveFrameworkArtifact(path string) (string, string) {
|
||||
serveFile := func(pattern string, filename string) {
|
||||
pathSplit := strings.Split(path, "/")
|
||||
|
||||
var basename string
|
||||
if len(pathSplit) > 0 {
|
||||
basename = pathSplit[len(pathSplit)-1]
|
||||
} else {
|
||||
basename = path
|
||||
}
|
||||
|
||||
return s.serveFrameworkArtifactWithFilename(path, basename), basename
|
||||
}
|
||||
|
||||
// returns downloadURI
|
||||
func (s *SchedulerServer) serveFrameworkArtifactWithFilename(path string, filename string) string {
|
||||
serveFile := func(pattern string, filepath string) {
|
||||
s.mux.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
|
||||
http.ServeFile(w, r, filename)
|
||||
http.ServeFile(w, r, filepath)
|
||||
})
|
||||
}
|
||||
|
||||
// Create base path (http://foobar:5000/<base>)
|
||||
pathSplit := strings.Split(path, "/")
|
||||
var base string
|
||||
if len(pathSplit) > 0 {
|
||||
base = pathSplit[len(pathSplit)-1]
|
||||
} else {
|
||||
base = path
|
||||
}
|
||||
serveFile("/"+base, path)
|
||||
serveFile("/"+filename, path)
|
||||
|
||||
hostURI := ""
|
||||
if s.AdvertisedAddress != "" {
|
||||
hostURI = fmt.Sprintf("http://%s/%s", s.AdvertisedAddress, base)
|
||||
hostURI = fmt.Sprintf("http://%s/%s", s.AdvertisedAddress, filename)
|
||||
} else if s.HA && s.HADomain != "" {
|
||||
hostURI = fmt.Sprintf("http://%s.%s:%d/%s", SCHEDULER_SERVICE_NAME, s.HADomain, ports.SchedulerPort, base)
|
||||
hostURI = fmt.Sprintf("http://%s.%s:%d/%s", SCHEDULER_SERVICE_NAME, s.HADomain, ports.SchedulerPort, filename)
|
||||
} else {
|
||||
hostURI = fmt.Sprintf("http://%s:%d/%s", s.Address.String(), s.Port, base)
|
||||
hostURI = fmt.Sprintf("http://%s:%d/%s", s.Address.String(), s.Port, filename)
|
||||
}
|
||||
log.V(2).Infof("Hosting artifact '%s' at '%s'", path, hostURI)
|
||||
log.V(2).Infof("Hosting artifact '%s' at '%s'", filename, hostURI)
|
||||
|
||||
return hostURI, base
|
||||
return hostURI
|
||||
}
|
||||
|
||||
func (s *SchedulerServer) prepareExecutorInfo(hks hyperkube.Interface) (*mesos.ExecutorInfo, *uid.UID, error) {
|
||||
@ -332,9 +340,13 @@ func (s *SchedulerServer) prepareExecutorInfo(hks hyperkube.Interface) (*mesos.E
|
||||
ci.Arguments = append(ci.Arguments, fmt.Sprintf("--max-log-age=%d", s.MinionLogMaxAgeInDays))
|
||||
}
|
||||
|
||||
if s.DockerCfgPath != "" {
|
||||
uri := s.serveFrameworkArtifactWithFilename(s.DockerCfgPath, ".dockercfg")
|
||||
ci.Uris = append(ci.Uris, &mesos.CommandInfo_URI{Value: proto.String(uri), Executable: proto.Bool(false), Extract: proto.Bool(false)})
|
||||
}
|
||||
|
||||
//TODO(jdef): provide some way (env var?) for users to customize executor config
|
||||
//TODO(jdef): set -address to 127.0.0.1 if `address` is 127.0.0.1
|
||||
//TODO(jdef): propagate dockercfg from RootDirectory?
|
||||
|
||||
apiServerArgs := strings.Join(s.APIServerList, ",")
|
||||
ci.Arguments = append(ci.Arguments, fmt.Sprintf("--api-servers=%s", apiServerArgs))
|
||||
|
@ -60,6 +60,7 @@ dest-file
|
||||
disable-filter
|
||||
docker-endpoint
|
||||
docker-exec-handler
|
||||
dockercfg-path
|
||||
driver-port
|
||||
dry-run
|
||||
duration-sec
|
||||
|
Loading…
Reference in New Issue
Block a user