栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Kubernetes节点磁盘管理

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kubernetes节点磁盘管理

Kubernetes集群运行一段时间后,通常会出现磁盘占用过高的问题。这里聊聊排查这类问题的方法和思路。

问题点

如果是正常的Linux服务器出现这种情况,解决方案无非是ssh到该主机查看大文件然后进行删除。Kubernetes上也是如此,但问题在于,其中的节点由Kubernetes自己管理,登录秘钥管理人员很可能不知道。

所以通常的问题点是:无法进入Kubernetes节点。就磁盘问题来说,是无法进入节点的文件系统。

进入节点

有两个进入节点的方式

使用Lens管理软件,它是一个非常厉害的Kubernetes IDE,提供直接进入节点的能力。自建pod,将节点根目录挂载在该pod的子目录。即挂载整个文件系统

本文专注第二种方式,这类deployment的Manifest如下,关键点:节点亲和性设置到想要管理的节点

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: admin-entry
  name: admin-entry
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: admin-entry
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: admin-entry
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchexpressions:
                  - key: kubernetes.io/hostname
                    operator: In
                    values:
                      - cn-shenzhen.172.18.18.192
      containers:
        - image: 'busybox:latest'
          name: admin-entry
          resources:
            requests:
              cpu: 10m
              memory: 512Mi
          stdin: true
          tty: true
          volumeMounts:
            - mountPath: /host-dir
              name: volume-1611735574911
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      volumes:
        - hostPath:
            path: /
            type: ''
          name: volume-1611735574911

然后创建

# 创建
kubectl apply -f xxx.yaml
# 进入pod
kubectl exec -it admin-entry-xxx -- sh
大文件占用排查

与文件相关的有两个命令

du:统计列举文件或文件夹的大小df:列出整个文件系统的占用情况。列出的是磁盘设备的占用率

一般大文件排查用du命令。涉及到三个参数

-h:以人类可读的方式展示-d N:展示指定层级的目录-a:不只展示文件夹,文件也展示

其它参数通过du --help查看,对当前这个问题有如下:

# 进入挂载的目录
/ # cd /host-dir/
# 列出当前文件夹下第一层文件夹的大小
/host-dir # du -h -d 1
0	./sys
4.0K	./media
384.0K	./root
4.0K	./srv
37.5M	./etc
46.0M	./opt
32.0K	./tmp
2.2G	./usr
4.3M	./run
4.0K	./home
131.2M	./boot
0	./proc
4.0K	./mnt
33.3G	./var
16.0K	./lost+found
0	./dev
35.7G	.

可以看出主要占用在/var下。继续排查发现占用高主要问题有两个

/var/lib/docker/overlay2,docker创建的容器、镜像、其他资源占用,不能随便删除/var/log,产生的日志,这里我们可以删除不用的,能节省较多空间 总结

本文说的这种进入节点的方式,只能管理文件系统,但是无法管理pod之外的其它进程。使用lens则可以。

对于Kubernetes的磁盘占用率过高,通过上述两种清理闲置镜像 + 多余log文件的形式,可以节省出较多空间。如果能加个定期任务做这两件事,基本可以直接解决该问题。

#!/bin/sh
docker image prune -a -f;
rm /var/log/messages*
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740961.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号