我已经启动了一个带有 https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/#static-policy的 Kubernetes pod(单个容器)。它的 CPU 请求/限制为 10。这一切似乎都按预期工作:
cat /sys/fs/cgroup/cpuset/cpuset.cpus
11-20
我现在想做的是为几个对上下文切换非常敏感的非常特定的线程保留几个核心。是否可以只用几个 CPU 创建一个子 cpuset ? cgroup
文件系统以只读方式挂载:
mount | fgrep cpuset
cgroup on /sys/fs/cgroup/cpuset (ro,nosuid,nodev,noexec,relatime,cpuset)
…因此,使用 https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpusets.html#how-do-i-use-cpusets 的通常过程不能开箱即用。我还没有找到将 /sys/fs/cgroup/cpuset/
挂载为读写的方法。
我在字里行间的解读是,这是所有预期的行为,并且不支持允许 pod 进一步细分其 CPU。不过,有没有办法在我缺少的 pod 中创建一个 cpuset ?
回答1
您可以尝试为容器设置 SYS_ADMIN 权限,但这可能会导致一些安全问题。
例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
namespace: test
spec:
replicas: 1
selector:
matchLabels:
app: demo-deployment
template:
metadata:
labels:
app: demo-deployment
spec:
containers:
- name: demo-deployment
image: ---
securityContext:
runAsUser: 0
capabilities:
add: [SYS_ADMIN]
volumeMounts:
- name: cgroup
mountPath: /sys/fs/cgroup
volumes:
- name: cgroup
hostPath:
path: /sys/fs/cgroup
type: Directory