diff --git a/pkg/kubelet/cm/BUILD b/pkg/kubelet/cm/BUILD index c2e456aa108..14078151500 100644 --- a/pkg/kubelet/cm/BUILD +++ b/pkg/kubelet/cm/BUILD @@ -166,7 +166,7 @@ filegroup( "//pkg/kubelet/cm/cpumanager:all-srcs", "//pkg/kubelet/cm/cpuset:all-srcs", "//pkg/kubelet/cm/devicemanager:all-srcs", - "//pkg/kubelet/cm/topologymanager/socketmask:all-srcs", + "//pkg/kubelet/cm/topologymanager:all-srcs", "//pkg/kubelet/cm/util:all-srcs", ], tags = ["automanaged"], diff --git a/pkg/kubelet/cm/topologymanager/BUILD b/pkg/kubelet/cm/topologymanager/BUILD new file mode 100644 index 00000000000..cdd0dbce856 --- /dev/null +++ b/pkg/kubelet/cm/topologymanager/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "policy.go", + "topology_manager.go", + ], + importpath = "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager", + visibility = ["//visibility:public"], + deps = [ + "//pkg/kubelet/cm/topologymanager/socketmask:go_default_library", + "//pkg/kubelet/lifecycle:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/kubelet/cm/topologymanager/socketmask:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/kubelet/cm/topologymanager/policy.go b/pkg/kubelet/cm/topologymanager/policy.go new file mode 100644 index 00000000000..ac5bfa443e7 --- /dev/null +++ b/pkg/kubelet/cm/topologymanager/policy.go @@ -0,0 +1,29 @@ +/* +Copyright 2019 The Kubernetes Authors. + +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 topologymanager + +import ( + "k8s.io/kubernetes/pkg/kubelet/lifecycle" +) + +//Policy interface for Topology Manager Pod Admit Result +type Policy interface { + //Returns Policy Name + Name() string + //Returns Pod Admit Handler Response based on hints and policy type + CanAdmitPodResult(admit bool) lifecycle.PodAdmitResult +} diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go new file mode 100644 index 00000000000..8c1cf9fb799 --- /dev/null +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -0,0 +1,53 @@ +/* +Copyright 2019 The Kubernetes Authors. + +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 topologymanager + +import ( + "k8s.io/api/core/v1" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/socketmask" + "k8s.io/kubernetes/pkg/kubelet/lifecycle" +) + +//Manager interface provides methods for Kubelet to manage pod topology hints +type Manager interface { + //Manager implements pod admit handler interface + lifecycle.PodAdmitHandler + //Adds a hint provider to manager to indicate the hint provider + //wants to be consoluted when making topology hints + AddHintProvider(HintProvider) + //Adds pod to Manager for tracking + AddContainer(pod *v1.Pod, containerID string) error + //Removes pod from Manager tracking + RemoveContainer(containerID string) error + //Interface for storing pod topology hints + Store +} + +//HintProvider interface is to be implemented by Hint Providers +type HintProvider interface { + GetTopologyHints(pod v1.Pod, container v1.Container) ([]TopologyHint, bool) +} + +//Store interface is to allow Hint Providers to retrieve pod affinity +type Store interface { + GetAffinity(podUID string, containerName string) TopologyHint +} + +// TopologyHint is a struct containing Socket Mask for a Pod +type TopologyHint struct { + SocketAffinity socketmask.SocketMask +}