tke集群用lxcfs实现容器资源展示隔离

2022-03-30 15:47:54 浏览数 (1)

容器技术提供了不同于传统虚拟机技术的环境隔离方式。通常的 Linux 容器对容器打包和启动进行了加速,但也降低了容器的隔离强度。其中 Linux 容器最为知名的问题就是资源视图隔离问题。

容器可以通过 cgroup 的方式对资源的使用情况进行限制,包括: 内存,CPU 等。但是需要注意的是,如果容器内的一个进程使用一些常用的监控命令,如: free, top 等命令其实看到还是物理机的数据,而非容器的数据。这是由于容器并没有做到对 /proc, /sys 等文件系统的资源视图隔离。

lxcfs 是通过文件挂载的方式,把 cgroup 中关于系统的相关信息读取出来,通过 docker 的 volume 挂载给容器内部的 proc 系统。 然后让 docker 内的应用读取 proc 中信息的时候以为就是读取的宿主机的真实的 proc。

下面我们来说下如何在tke集群用lxcfs来对容器资源进行视图隔离。

1. tlinux2.4操作系统tke集群开启lxcfs

如果你的集群节点操作系统是用的腾讯云的tlinux2.4,则可以修改节点内存参数开启这个特性,腾讯云对tlinux2.4做了特性订制。

代码语言:javascript复制
# 全局开关
sysctl -w kernel.stats_isolated=1
# 容器级别开关
sysctl -w kernel.container_stats_isolated=0

具体参考文档说明https://cloud.tencent.com/document/product/213/53867

2. 非 tlinux2.4操作系统tke集群开启lxcfs

如果你的节点操作系统部署tlinux2.4,是centos或者ubuntu,则需要参考文档在集群部署下lxcfs的DaemonSet,具体yaml如下

代码语言:javascript复制
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: lxcfs
  namespace: kube-system
  labels:
    name: lxcfs
spec:
  selector:
    matchLabels:
      name: lxcfs
  template:
    metadata:
      labels:
        name: lxcfs
    spec:
      priorityClassName: system-node-critical
      hostPID: true
      tolerations:
      - operator: Exists
      containers:
        - name: lxcfs-monitor
          image: ccr.ccs.tencentyun.com/tkeimages/lxcfs:4.0.8
          imagePullPolicy: Always
          command: ["/lxcfs-monitor.sh"]
          args: ["/var/lib/lxc"]
          resources:
            limits:
              cpu: 50m
              memory: 50Mi
          securityContext:
            privileged: true  
        - name: lxcfs
          image: ccr.ccs.tencentyun.com/tkeimages/lxcfs:4.0.8
          imagePullPolicy: Always
          command: ["/start.sh"]
          args: ["5", "/var/lib/lxc"]
          env:
          - name: ENV_DEBUG_COMM
            value: "true"
          - name: ENV_DEBUG_PID_CID
            value: "true"
          resources:
            limits:
              cpu: 2
              memory: 256Mi
          securityContext:
            privileged: true          
          volumeMounts:
            - name: lxcfs
              mountPath: /var/lib/lxc/lxcfs
              mountPropagation: Bidirectional
      volumes:
        - name: lxcfs
          hostPath:
            path: /var/lib/lxc/lxcfs
            type: DirectoryOrCreate

0 人点赞