From b385e92d9474dff2307400a6d55ad3cf0a0774b2 Mon Sep 17 00:00:00 2001 From: bergzhao <13611129507@163.com> Date: Tue, 21 Apr 2020 21:48:59 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E6=94=AF=E6=8C=81=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E8=B5=84=E6=BA=90=E8=B0=83=E5=BA=A6=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=20#424?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 + bcs-common/pkg/mesosdriver/client.go | 6 +- .../container/cni/cni_pod.go | 30 +- .../container/cnm/cnm_pod.go | 54 ++-- .../bcs-container-executor/container/task.go | 50 ++-- .../device-plugin-manager/plugin-manager.go | 43 ++- .../src/manager/sched/offer/offerpool.go | 9 +- .../src/manager/sched/offer/offers_test.go | 259 ------------------ .../manager/sched/scheduler/task_operate.go | 10 +- .../sched/scheduler/trans_launchapp.go | 6 +- .../sched/scheduler/trans_reschedule.go | 7 +- .../manager/sched/scheduler/trans_scaleapp.go | 6 +- .../sched/scheduler/trans_updateapp.go | 6 +- .../src/manager/sched/task/task.go | 6 +- .../bcs-scheduler/src/types/application.go | 12 +- .../cpuset-device/container.go | 210 +++++++++++--- .../cpuset-device/manager.go | 45 +-- bcs-services/bcs-cpuset-device/types/types.go | 25 +- 18 files changed, 340 insertions(+), 446 deletions(-) delete mode 100644 bcs-mesos/bcs-scheduler/src/manager/sched/offer/offers_test.go diff --git a/Makefile b/Makefile index 0f889c2575..f3ef7a0f8d 100644 --- a/Makefile +++ b/Makefile @@ -68,6 +68,8 @@ pre: @echo "git tag: ${GITTAG}" mkdir -p ${PACKAGEPATH} mkdir -p ${EXPORTPATH} + go fmt ./... + cd ./scripts && chmod +x vet.sh && ./vet.sh api:pre mkdir -p ${PACKAGEPATH}/bcs-services diff --git a/bcs-common/pkg/mesosdriver/client.go b/bcs-common/pkg/mesosdriver/client.go index 263f128524..594c452110 100644 --- a/bcs-common/pkg/mesosdriver/client.go +++ b/bcs-common/pkg/mesosdriver/client.go @@ -51,7 +51,7 @@ func NewMesosPlatform(conf *Config) (*MesosDriverClient, error) { //init http client m.cli = httpclient.NewHttpClient() //if https - if m.conf.ClientCert!=nil && m.conf.ClientCert.IsSSL { + if m.conf.ClientCert != nil && m.conf.ClientCert.IsSSL { blog.Infof("NetworkDetection http client cert ssl") m.cli.SetTlsVerity(m.conf.ClientCert.CAFile, m.conf.ClientCert.CertFile, m.conf.ClientCert.KeyFile, m.conf.ClientCert.CertPasswd) @@ -84,7 +84,7 @@ func (m *MesosDriverClient) getModuleAddr(clusterid string) (string, error) { //update agent external resources func (m *MesosDriverClient) UpdateAgentExtendedResources(er *commtypes.ExtendedResource) error { - by,_ := json.Marshal(er) + by, _ := json.Marshal(er) _, err := m.requestMesosApiserver(m.conf.ClusterId, http.MethodPut, "agentsettings/extendedresource", by) if err != nil { blog.Errorf("update agent %s external resources error %s", er.InnerIP, err.Error()) @@ -107,7 +107,7 @@ func (m *MesosDriverClient) requestMesosApiserver(clusterid, method, url string, } uri := fmt.Sprintf("%s/mesosdriver/v4/%s", addr, url) m.cli.SetHeader("BCS-ClusterID", clusterid) - blog.V(3).Infof("request %s body(%s)",uri, string(payload)) + blog.V(3).Infof("request %s body(%s)", uri, string(payload)) var by []byte switch method { diff --git a/bcs-mesos/bcs-container-executor/container/cni/cni_pod.go b/bcs-mesos/bcs-container-executor/container/cni/cni_pod.go index a3ba719c53..7f9ea827e7 100644 --- a/bcs-mesos/bcs-container-executor/container/cni/cni_pod.go +++ b/bcs-mesos/bcs-container-executor/container/cni/cni_pod.go @@ -94,7 +94,7 @@ func NewPod(operator container.Container, tasks []*container.BcsContainerTask, conTasks: taskMap, networkTaskId: tasks[0].TaskId, runningContainer: make(map[string]*container.BcsContainerInfo), - pluginManager: device_plugin_manager.NewDevicePluginManager(), + pluginManager: device_plugin_manager.NewDevicePluginManager(), } if len(tasks[0].NetworkIPAddr) != 0 { //ip injected by executor @@ -138,7 +138,7 @@ type CNIPod struct { networkTaskId string netImage string //device plugin manager - pluginManager *device_plugin_manager.DevicePluginManager + pluginManager *device_plugin_manager.DevicePluginManager } //IsHealthy check pod is healthy @@ -254,7 +254,7 @@ func (p *CNIPod) Init() error { HostName: p.cniHostName, } p.netTask.Resource = &bcstypes.Resource{ - Cpus: 1, + Cpus: 1, } netflag := container.BcsKV{ @@ -390,32 +390,29 @@ func (p *CNIPod) Start() error { task.HostName = "" var extendedErr error //if task contains extended resources, need connect device plugin to allocate resources - for _,ex :=range task.ExtendedResources { + for _, ex := range task.ExtendedResources { logs.Infof("task %s contains extended resource %s, then allocate it", task.TaskId, ex.Name) - deviceIds,err := p.pluginManager.ListAndWatch(ex) - if err!=nil { - logs.Errorf("task %s ListAndWatch extended resources %s failed, err: %s\n", + deviceIds, err := p.pluginManager.ListAndWatch(ex) + if err != nil { + extendedErr = fmt.Errorf("task %s ListAndWatch extended resources %s failed, err: %s\n", task.TaskId, ex.Name, err.Error()) - extendedErr = err break } //allocate device - if len(deviceIds)= len(req.DevicesIDs) { @@ -291,10 +296,14 @@ func (c *CpusetDevicePlugin) Allocate(ctx context.Context, reqs *pluginapi.Alloc if mnode == nil { return nil, fmt.Errorf("no enough cpuset to allocated container") } - cpuset, _ := mnode.AllocateCpuset(len(req.DevicesIDs)) + cpuset, err := mnode.AllocateCpuset(len(req.DevicesIDs)) + if err != nil { + blog.Errorf(err.Error()) + return nil, err + } response := pluginapi.ContainerAllocateResponse{ Envs: map[string]string{ - EnvBkbcsAllocateCpuset: strings.Join(cpuset, ","), + EnvBkbcsAllocateCpuset: fmt.Sprintf("node:%s;cpuset:%s", mnode.Id, strings.Join(cpuset, ",")), }, } diff --git a/bcs-services/bcs-cpuset-device/types/types.go b/bcs-services/bcs-cpuset-device/types/types.go index e5614f8d32..b8bb6e3b12 100644 --- a/bcs-services/bcs-cpuset-device/types/types.go +++ b/bcs-services/bcs-cpuset-device/types/types.go @@ -63,6 +63,29 @@ func (c *CpusetNode) AllocateCpuset(number int) ([]string, error) { } } - blog.Infof("node %s allocate cpuset(%v), and AllocatedCpuset(%v)", c.Id, cpuset, c.AllocatedCpuset) + blog.Infof("node %s allocate cpuset(%v), and AllocatedCpuset(%v) AllCpuset(%v)", + c.Id, cpuset, c.AllocatedCpuset, c.Cpuset) return cpuset, nil } + +func (c *CpusetNode) ReleaseCpuset(cpuset []string) { + c.Lock() + defer c.Unlock() + + allocated := make([]string, 0) + for _, o := range c.AllocatedCpuset { + release := false + for _, r := range cpuset { + if o == r { + release = true + break + } + } + if !release { + allocated = append(allocated, o) + } + } + c.AllocatedCpuset = allocated + blog.Infof("node %s release cpuset(%v), and AllocatedCpuset(%v) AllCpuset(%v)", + c.Id, cpuset, c.AllocatedCpuset, c.Cpuset) +}