在容器中查看容器资源使用时(如 top 命令)会看到整机的资源,这是因为容器隔离技术本身带来的缺陷(/proc下为主机资源数据)导致,长期以来都是通过部署 lXCFS 的方式解决,但如今,在 TKE 原生节点和超级节点 Pod 中已经支持通过注解的方式配置容器资源视图隔离。
1. 该特性依赖腾讯云内核团队提供的 cgroupfs 功能模块,原生节点和超级节点 Pod 默认支持。如果在不支持的操作系统上使用,不会生效,但也不会导致Pod启动失败,可以放心使用。
2. 在 TKE 支持维护的集群版本 v1.26.1-tke.3、v1.24.4-tke.11、v1.22.5-tke.21、v1.20.6-tke.40、v1.18.4-tke.41 及以上版本支持使用注解的方式配置容器资源视图隔离,或 containerd 满足版本高于 1.4.3-tke.3 或 1.6.9-tke.3。
参考:TKE Kubernetes Revision 版本历史
给 Pod上设置对应的cloud.tencent.com/cgroupfs
annotations,配置方式如下示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
namespace: default
spec:
selector:
matchLabels:
app: test
template:
metadata:
annotations:
cloud.tencent.com/cgroupfs: "*" # pod中所有的容器都应用cgroupfs的能力
# 或者
# cloud.tencent.com/cgroupfs: "container1,container2" #pod中仅容器1和容器2应用cgroupfs的能力
labels:
app: test
spec:
containers:
- args:
- "360000"
command:
- sleep
image: ubuntu:22.04
imagePullPolicy: Always
name: test
resources:
limits:
cpu: "1"
memory: 100Mi
requests:
cpu: 100m
memory: 10Mi
检验资源视图是否隔离成功:
登录到容器中通过 top 和 free 命令查看资源视图,可以看到已经显示隔离后的数据了,说明配置的隔离注解是生效的,如下图:
注意:建议使用 ubuntu 容器镜像进行测试验证,如果使用 busybox 镜像,由于 free 命令是busybox 维护的精简版本,可能会遇到显示的还是节点资源数据,但实际上已经是生效的情况。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。