// NewAPIServer creates a new APIServer object with default parameters func NewAPIServer() *APIServer { s := APIServer{ InsecurePort: 8080, InsecureBindAddress: util.IP(net.ParseIP("127.0.0.1")), BindAddress: util.IP(net.ParseIP("0.0.0.0")), SecurePort: 6443, APIRate: 10.0, APIBurst: 200, APIPrefix: "/api", EventTTL: 1 * time.Hour, AuthorizationMode: "AlwaysAllow", AdmissionControl: "AlwaysAdmit", EtcdPathPrefix: master.DefaultEtcdPathPrefix, OldEtcdPathPrefix: master.DefaultEtcdPathPrefix, EnableLogsSupport: true, MasterServiceNamespace: api.NamespaceDefault, ClusterName: "qingyuan", CertDirectory: "/var/run/qingyuan", RuntimeConfig: make(util.ConfigurationMap), QingletConfig: client.QingletConfig{ Port: ports.QingletPort, EnableHttps: true, HTTPTimeout: time.Duration(5) * time.Second, }, } return &s }
// NewProxyServer creates a new ProxyServer object with default parameters func NewProxyServer() *ProxyServer { return &ProxyServer{ BindAddress: util.IP(net.ParseIP("0.0.0.0")), HealthzPort: 10249, HealthzBindAddress: util.IP(net.ParseIP("127.0.0.1")), OOMScoreAdj: -899, ResourceContainer: "/qing-proxy", } }
// NewSchedulerServer creates a new SchedulerServer with default parameters func NewSchedulerServer() *SchedulerServer { s := SchedulerServer{ Port: ports.SchedulerPort, Address: util.IP(net.ParseIP("127.0.0.1")), FailoverTimeout: time.Duration((1 << 62) - 1).Seconds(), ExecutorRunProxy: true, ExecutorSuicideTimeout: execcfg.DefaultSuicideTimeout, MesosAuthProvider: sasl.ProviderName, MesosMaster: defaultMesosMaster, MesosUser: defaultMesosUser, ReconcileInterval: defaultReconcileInterval, ReconcileCooldown: defaultReconcileCooldown, Checkpoint: true, FrameworkName: defaultFrameworkName, HA: false, mux: http.NewServeMux(), QingletCadvisorPort: 4194, // copied from github.com/qingyuancloud/QingYuan/blob/release-0.14/cmd/qinglet/app/server.go QingletSyncFrequency: 10 * time.Second, } // cache this for later use. also useful in case the original binary gets deleted, e.g. // during upgrades, development deployments, etc. if filename, err := osext.Executable(); err != nil { log.Fatalf("failed to determine path to currently running executable: %v", err) } else { s.executable = filename s.KMPath = filename } return &s }
// SimpleRunQinglet is a simple way to start a Qinglet talking to dockerEndpoint, using an API Client. // Under the hood it calls RunQinglet (below) func SimpleQinglet(client *client.Client, dockerClient dockertools.DockerInterface, hostname, rootDir, manifestURL, address string, port uint, masterServiceNamespace string, volumePlugins []volume.VolumePlugin, tlsOptions *qinglet.TLSOptions, cadvisorInterface cadvisor.Interface, configFilePath string, cloud cloudprovider.Interface, osInterface qingcontainer.OSInterface) *QingletConfig { imageGCPolicy := qinglet.ImageGCPolicy{ HighThresholdPercent: 90, LowThresholdPercent: 80, } diskSpacePolicy := qinglet.DiskSpacePolicy{ DockerFreeDiskMB: 256, RootFreeDiskMB: 256, } kcfg := QingletConfig{ QingClient: client, DockerClient: dockerClient, HostnameOverride: hostname, RootDirectory: rootDir, ManifestURL: manifestURL, PodInfraContainerImage: dockertools.PodInfraContainerImage, Port: port, Address: util.IP(net.ParseIP(address)), EnableServer: true, EnableDebuggingHandlers: true, HTTPCheckFrequency: 1 * time.Second, FileCheckFrequency: 1 * time.Second, SyncFrequency: 3 * time.Second, MinimumGCAge: 10 * time.Second, MaxPerPodContainerCount: 2, MaxContainerCount: 100, RegisterNode: true, MasterServiceNamespace: masterServiceNamespace, VolumePlugins: volumePlugins, TLSOptions: tlsOptions, CadvisorInterface: cadvisorInterface, ConfigFile: configFilePath, ImageGCPolicy: imageGCPolicy, DiskSpacePolicy: diskSpacePolicy, Cloud: cloud, NodeStatusUpdateFrequency: 10 * time.Second, ResourceContainer: "/qinglet", OSInterface: osInterface, CgroupRoot: "", ContainerRuntime: "docker", Mounter: mount.New(), DockerDaemonContainer: "/docker-daemon", SystemContainer: "", MaxPods: 32, DockerExecHandler: &dockertools.NativeExecHandler{}, } return &kcfg }
// NewSchedulerServer creates a new SchedulerServer with default parameters func NewSchedulerServer() *SchedulerServer { s := SchedulerServer{ Port: ports.SchedulerPort, Address: util.IP(net.ParseIP("127.0.0.1")), AlgorithmProvider: factory.DefaultProvider, } return &s }
// NewQingletServer will create a new QingletServer with default values. func NewQingletServer() *QingletServer { return &QingletServer{ SyncFrequency: 10 * time.Second, FileCheckFrequency: 20 * time.Second, HTTPCheckFrequency: 20 * time.Second, EnableServer: true, Address: util.IP(net.ParseIP("0.0.0.0")), Port: ports.QingletPort, ReadOnlyPort: ports.QingletReadOnlyPort, PodInfraContainerImage: dockertools.PodInfraContainerImage, RootDirectory: defaultRootDir, RegistryBurst: 10, EnableDebuggingHandlers: true, MinimumGCAge: 1 * time.Minute, MaxPerPodContainerCount: 2, MaxContainerCount: 100, AuthPath: util.NewStringFlag("/var/lib/qinglet/qingyuan_auth"), // deprecated QingConfig: util.NewStringFlag("/var/lib/qinglet/qingconfig"), CadvisorPort: 4194, HealthzPort: 10248, HealthzBindAddress: util.IP(net.ParseIP("127.0.0.1")), RegisterNode: true, // will be ignored if no apiserver is configured OOMScoreAdj: -900, MasterServiceNamespace: api.NamespaceDefault, ImageGCHighThresholdPercent: 90, ImageGCLowThresholdPercent: 80, LowDiskSpaceThresholdMB: 256, NetworkPluginName: "", HostNetworkSources: qinglet.FileSource, CertDirectory: "/var/run/qingyuan", NodeStatusUpdateFrequency: 10 * time.Second, ResourceContainer: "/qinglet", CgroupRoot: "", ContainerRuntime: "docker", DockerDaemonContainer: "/docker-daemon", SystemContainer: "", ConfigureCBR0: false, DockerExecHandlerName: "native", } }
// NewCMServer creates a new CMServer with a default config. func NewCMServer() *CMServer { s := CMServer{ Port: ports.ControllerManagerPort, Address: util.IP(net.ParseIP("127.0.0.1")), ConcurrentEndpointSyncs: 5, ConcurrentRCSyncs: 5, NodeSyncPeriod: 10 * time.Second, ResourceQuotaSyncPeriod: 10 * time.Second, NamespaceSyncPeriod: 5 * time.Minute, PVClaimBinderSyncPeriod: 10 * time.Second, RegisterRetryCount: 10, PodEvictionTimeout: 5 * time.Minute, SyncNodeList: true, ClusterName: "qingyuan", } return &s }
func NewQingletExecutorServer() *QingletExecutorServer { k := &QingletExecutorServer{ QingletServer: app.NewQingletServer(), RunProxy: true, ProxyExec: "./qing-proxy", ProxyLogfile: "./proxy-log", SuicideTimeout: config.DefaultSuicideTimeout, } if pwd, err := os.Getwd(); err != nil { log.Warningf("failed to determine current directory: %v", err) } else { k.RootDirectory = pwd // mesos sandbox dir } k.Address = util.IP(net.ParseIP(defaultBindingAddress())) k.ShutdownFD = -1 // indicates unspecified FD return k }