k8sQ&A:no space left on device

本文针对Kubernetes集群中常见的三个问题进行了解析:kube-node状态显示notready的原因及其解决办法;pod启动失败提示资源不足的问题定位;以及pod调度失败的现象与解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一:no space left on device

kube-node节点的状态是notready,原因是kubelet启动时报错“no space left on device:”:

218的kube-node节点的状态是notready,分配和申请资源OK,但是服务启动有问题:启动失败

分析:218上kubelt节点启动7s后失败,原因是: no space left on device:
 journalctl -u  kubelet
:140] Failed to watch directory "/sys/fs/cgroup/memory/system.slice/run-29422.scope": inotify_add_watch /sys/fs/cgroup/memory/system.slice/run-29422422.scope": inotify_add_watch /sys/fs/cgroup/memory/system.slice/run-29422.scope: no space left on device
:140] Failed to watch directory "/sys/fs/cgroup/memory/system.slice": inotify_add_watch /sys/fs/cgroup/memory/system.slice/run-29422.scope: no spaceify_add_watch /sys/fs/cgroup/memory/system.slice/run-29422.scope: no space left on device

t.go:1339] Failed to start cAdvisor inotify_add_watch /sys/fs/cgroup/memory/system.slice/run-29422.scope: no space left on devicey/system.slice/run-29422.scope: no space left on device

 

ode=exited, status=255/n/a

 

 

218上内存和存储资源如下:

[root@hps218 system.slice]# free -m
              total        used        free      shared  buff/cache   available
Mem:           4001        1624         721         222        1655        1477
Swap:          4351         143        4208

[root@hps218 system.slice]# df -h

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G   55M  2.0G   3% /dev/shm
tmpfs                    2.0G  220M  1.8G  11% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root   99G   17G   78G  18% /
/dev/mapper/centos-data  296G  3.8G  277G   2% /data
/dev/mapper/centos-home   44G  169M   42G   1% /home
/dev/sda1                477M  147M  301M  33% /boot
tmpfs                    2.0G   12K  2.0G   1% /data/ips/app/work/node/kubelet/pods/6204604d-6b7b-11e8-958a-000c295deb47/volumes/kubernetes.io~secret/default-token-6xmh2
tmpfs                    2.0G   12K  2.0G   1% /data/ips/app/work/node/kubelet/pods/63725613-6b7b-11e8-958a-000c295deb47/volumes/kubernetes.io~secret/heapster-token-5slgw

218上查看kubelet的日志:都是资源充足:

kubectl describe nodes 10.20.16.218

Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/hostname=10.20.16.218
Annotations:        node.alpha.kubernetes.io/ttl=0
                    volumes.kubernetes.io/controller-managed-attach-detach=true
CreationTimestamp:  Sat, 09 Jun 2018 08:18:16 +0800
Taints:             <none>
Unschedulable:      false
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----             ------  -----------------                 ------------------                ------                       -------
  OutOfDisk        False   Mon, 11 Jun 2018 11:35:40 +0800   Mon, 11 Jun 2018 11:05:33 +0800   KubeletHasSufficientDisk     kubelet has sufficient disk space available
  MemoryPressure   False   Mon, 11 Jun 2018 11:35:40 +0800   Mon, 11 Jun 2018 11:05:33 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure     False   Mon, 11 Jun 2018 11:35:40 +0800   Mon, 11 Jun 2018 11:05:33 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure      False   Mon, 11 Jun 2018 11:35:40 +0800   Sat, 09 Jun 2018 08:18:16 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready            True    Mon, 11 Jun 2018 11:35:40 +0800   Mon, 11 Jun 2018 11:06:03 +0800   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  10.20.16.218
  Hostname:    10.20.16.218
Capacity:
 cpu:                2
 ephemeral-storage:  309504832Ki
 hugepages-2Mi:      0
 memory:             4097940Ki
 pods:               110
Allocatable:
 cpu:                2
 ephemeral-storage:  285239652699
 hugepages-2Mi:      0
 memory:             3995540Ki
 pods:               110
System Info:
 Machine ID:                 edb038c4975745dbaf2abf3c7fb54d32
 System UUID:                564DFD41-7F6F-DC56-E6ED-43B11018119C
 Boot ID:                    2384972f-22a8-4979-9252-b7cebea31a43
 Kernel Version:             4.4.47-1.el7.x86_64
 OS Image:                   CentOS Linux 7 (Core)
 Operating System:           linux
 Architecture:               amd64
 Container Runtime Version:  docker://1.12.6
 Kubelet Version:            v1.10.3-beta.0.10+18f4924fc90ffc
 Kube-Proxy Version:         v1.10.3-beta.0.10+18f4924fc90ffc
PodCIDR:                     172.30.0.0/24
ExternalID:                  10.20.16.218
Non-terminated Pods:         (2 in total)
  Namespace                  Name                   CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ---------                  ----                   ------------  ----------  ---------------  -------------
  kube-system                docker-health-gjrh6    0 (0%)        0 (0%)      0 (0%)           0 (0%)
  kube-system                heapster-fzpp5         0 (0%)        0 (0%)      0 (0%)           0 (0%)
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  CPU Requests  CPU Limits  Memory Requests  Memory Limits
  ------------  ----------  ---------------  -------------
  0 (0%)        0 (0%)      0 (0%)           0 (0%)
Events:
  Type    Reason                   Age                From                   Message
  ----    ------                   ----               ----                   -------
  Normal  Starting                 1h                 kubelet, 10.20.16.218  Starting kubelet.
  Normal  NodeHasSufficientDisk    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientDisk
  Normal  NodeHasSufficientMemory  1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientMemory
  Normal  NodeHasNoDiskPressure    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasNoDiskPressure
  Normal  NodeHasSufficientPID     1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientPID
  Normal  Starting                 1h                 kubelet, 10.20.16.218  Starting kubelet.
  Normal  NodeHasSufficientDisk    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientDisk
  Normal  NodeHasSufficientMemory  1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientMemory
  Normal  NodeHasNoDiskPressure    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasNoDiskPressure
  Normal  NodeHasSufficientPID     1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientPID
  Normal  Starting                 1h                 kubelet, 10.20.16.218  Starting kubelet.
  Normal  NodeHasSufficientDisk    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientDisk
  Normal  NodeHasSufficientMemory  1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientMemory
  Normal  NodeHasNoDiskPressure    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasNoDiskPressure
  Normal  NodeHasSufficientPID     1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientPID
  Normal  Starting                 1h                 kubelet, 10.20.16.218  Starting kubelet.
  Normal  NodeHasSufficientDisk    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientDisk
  Normal  NodeHasSufficientMemory  1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientMemory
  Normal  NodeHasSufficientPID     1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasSufficientPID
  Normal  NodeHasNoDiskPressure    1h                 kubelet, 10.20.16.218  Node 10.20.16.218 status is now: NodeHasNoDiskPressure

  Normal  Starting                 1h                 kubelet, 10.20.16.218  Starting kubelet.

 

【定位】"/sys/fs/cgroup/memory/system.slice/run-29422.scope""/sys/fs/cgroup/memory/system.slice/目录下run-*.scope"文件过多导致的。

解决方法:

 

 sudo sysctl fs.inotify.max_user_watches=1048576

之后 

[ips@hps219 bin]$ ./kubectl get nodes
NAME           STATUS    ROLES     AGE       VERSION
10.20.16.218   Ready     <none>    2d        v1.10.3-beta.0.10+18f4924fc90ffc
10.20.16.219   Ready     <none>    1h        v1.10.3-beta.0.10+18f4924fc90ffc

 

问题二:问题描述及现象:主机资源充足,但是pod启动失败,报错资源不够,最终是node资源不够

问题描述:应用app1,未设置分区亲和性,运行中,添加一个分区亲和性:测试域-测试2区(值25主机满足要求)后,13min后,新的pod仍然未被拉起;

环境:http://10.19.10.26:8080

版本:mysql换成oracle的版本

问题详情:

操作步骤:

1、app1应用,新增一个分区亲和性,亲和性选择

3个node节点的cpu资源是充足的,请见截图,10.19.10.25 标签是test2

kubectl get pod/deploy-app1-5fbf695d5d-cmf4m -n ns-business -o yaml

查看pod未被拉起的原因是:

 message: '0/3 nodes are available: 2 Insufficient cpu, 2 node(s) didn''t match

node selector.'

重启应用后,报错是:

'0/3 nodes are available: 1 Insufficient cpu, 2 node(s) didn''t match

 

问题定位:

最终结论:环境问题,node节点中的资源不足。(因为一套K8s环境复用)。

首先要查看下node的资源。

定位过程:

监控中主机监控的cpu使用率跟node节点中的资源不一样。

查看主机cpu、namespace(使用只有10%)的cpu都是ok的;

查看一个node主机上的资源:

 kubectl describe node 10.19.10.25 

查看一台node主机上的所有pod资源(跨namespace的):

kubectl get pods  -A -o wide  |grep 10.19.10.25

删除资源:例如

kubectl delete svc/svc-app0619-canary -n ns-yancheng

kubectl delete deploy/deploy-app0619-canary -n ns-yancheng

删除结束后,

 

kubectl describe node 10.19.10.25  查看资源已经降低了很多,到50%以下了:

重启服务后,服务启动成功,pod被调度到分区对应的主机上。

 

 

 

问题三:调度失败:查看原因:

原因是:部署环境时,master节点自动会被打污点,避免被调度到该节点上。

问题现象:配置了亲和性,但是未被调度到对应的node节点:

定位过程:

kubectl get pod/deploy-app1-5f795cc4cb-hmvzr -n ns-jiangsu -o yaml有爆粗信息:

  message: '0/2 nodes are available: 1 node(s) didn''t match node selector, 1 node(s) had taints that the pod didn''t tolerate.'

kubectl get pod/deploy-app1-5f795cc4cb-hmvzr  -n ns-jiangsu -o yaml

  tolerations:

  - effect: NoExecute

    key: node.kubernetes.io/not-ready

    operator: Exists

    tolerationSeconds: 300

  - effect: NoExecute

    key: node.kubernetes.io/unreachable

    operator: Exists

    tolerationSeconds: 300

Node35里有污点信息:

kubectl get node 10.15.49.35 -o yaml 

  taints:

  - effect: NoSchedule

    key: node-role.kubernetes.io/master

[foot@h-w89jpoji ~]$ kubectl get nodes --show-labels

NAME          STATUS   ROLES    AGE     VERSION         LABELS

10.15.49.34   Ready    <none>   5d16h   v1.15.6-dirty   XXX=true,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,footdomain=test,kubernetes.io/arch=amd64,kubernetes.io/hostname=10.15.49.34,kubernetes.io/os=linux

10.15.49.35   Ready    master   5d16h   v1.15.6-dirty   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=10.15.49.35,kubernetes.io/os=linux,node-role.kubernetes.io/master=,tag1=11,testzone=test1

节点亲和性是pod的一种属性,它使 Pod 被吸引到一类特定的节点。 这可能出于一种偏好,也可能是硬性要求。 

Taint(污点)则相反,它使节点能够排斥一类特定的 Pod。

容忍度(Tolerations)是应用于 Pod 上的,允许(但并不要求)Pod 调度到带有与之匹配的污点的节点上。

污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod,是不会被该节点接受的。

 

<think>首先,用户的问题是:"mkdir cannot create directory 'date' No space left on device fix"。这看起来像是用户在使用mkdir命令时遇到了错误:"cannot create directory 'date': No space left on device",意思是无法创建目录'date',因为设备上没有空间了。用户希望找到解决方案。 我的系统级指令要求: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户提供的引用: - 引用[1]:提到容器启动失败,因为无法创建临时目录,原因是磁盘空间不足,并建议不要使用软链,因为像k8s这样的系统不支持。 - 引用[2]:提供了解决方法:清理无效数据文件释放磁盘空间或修改docker数据的存放路径。 - 引用[3]:似乎是关于Oracle的重新链接选项,但不太相关。 用户指出这些引用仅供参考,真正的需求是解决mkdir时的"No space left on device"错误。 关键点:用户的问题是关于文件系统空间不足导致无法创建目录的错误,不是特定于容器的。所以,我需要提供通用的解决方案。 步骤: 1. **确认问题**:错误消息表明磁盘空间不足,无法创建新目录。 2. **诊断原因**: - 文件系统满了(inodes或数据块)。 - 用户可能没有写入权限,但错误是"no space",所以更可能是空间问题。 3. **解决方案**: - 检查磁盘使用情况:使用命令如`df -h`查看磁盘空间,`df -i`查看inode使用情况。 - 清理空间:删除不必要的文件,清空日志,卸载未使用的软件等。 - 如果空间不足,可以考虑扩展磁盘或移动数据到更大的分区。 4. **结构化回答**: - 先解释错误原因。 - 提供逐步解决步骤。 - 确保清晰易懂。 5. **生成相关问题**:在回答末尾添加相关问题,以帮助用户深入学习。 6. **引用**:自然地添加引用标识。引用[1]和[2]提到空间不足和解决方法,所以我可以引用它们来支持我的建议。 7. **语言**:使用中文。 大纲回答: - **引言**:解释错误含义。 - **原因**:简述为什么发生。 - **解决方案步骤**: 1. 检查磁盘空间。 2. 清理空间。 3. 考虑其他选项如修改目录位置。 - **生成相关问题**。 在回答中引用: - 当提到清理日志或修改路径时,引用引用[2]。 - 引用[1]提到避免软链,但用户问题不直接相关,所以我可能不直接引用它,除非必要。 最终回答结构: 1. 解释错误。 2. 提供诊断步骤。 3. 提供解决步骤。 4. 添加相关问题。</think>### 解决“mkdir cannot create directory 'date': No space left on device”错误 当您使用`mkdir`命令创建目录时遇到“No space left on device”错误,这通常表示文件系统空间不足,无法分配新数据块或inode(文件系统索引节点)。此错误可能由磁盘空间耗尽或inode资源耗尽引起。以下我将逐步指导您诊断和解决此问题,确保方案真实可靠。解决过程包括检查空间使用情况、清理无效文件、以及调整存储路径等通用方法。 #### 错误原因分析 - **磁盘空间不足**:文件系统数据块已满,无法为新目录分配空间。 - **inode耗尽**:文件系统inode(用于管理文件和目录的元数据)已用尽,即使剩余数据空间也无法创建新条目。 - 常见场景包括日志文件堆积、临时文件未清理或分区大小不合理[^1]。 #### 逐步解决方案 按照以下步骤操作,以释放空间或优化存储: 1. **检查磁盘使用情况** 首先,确认文件系统的空间和inode状态。 - 运行`df -h`命令查看各分区磁盘空间使用率: ```bash df -h # 显示人类可读的磁盘空间(例如:/dev/sda1 使用率95%) ``` - 运行`df -i`命令检查inode使用情况: ```bash df -i # 如果Use%接近100%,表示inode耗尽 ``` 如果输出显示某个分区(如`/`或`/var`)使用率接近100%,则需清理或扩展该分区。 2. **清理无效文件释放空间** 针对空间或inode不足,删除不必要的文件: - **清理日志和临时文件**:系统日志(如`/var/log`)常占用大量空间。 ```bash sudo rm -rf /var/log/*.log # 删除旧日志文件(谨慎操作,备份重要日志) sudo journalctl --vacuum-size=100M # 清理systemd日志,保留100MB ``` 清理日志是常见且有效的空间释放方法[^2]。 - **查找大文件**:使用`du`命令定位占用空间大的目录。 ```bash sudo du -h --max-depth=1 / | sort -h # 扫描根目录下各子目录大小,排序输出 ``` 删除无用的缓存文件(如`/tmp`或用户目录下的缓存)。 - **卸载未使用软件**:移除不再需要的应用程序。 ```bash sudo apt autoremove # Debian/Ubuntu系统清理残留包 ``` 3. **修改数据存放路径(可选)** 如果清理后空间仍不足,将数据迁移到大容量分区: - **移动目录到新位置**:例如,将`/date`目录移到空闲分区`/mnt/big_disk`。 ```bash sudo mv /path/to/date /mnt/big_disk/ # 移动目录 sudo ln -s /mnt/big_disk/date /path/to/date # 创建软链(不推荐,见注意事项) ``` 但**避免使用软链**,因为某些系统(如Kubernetes)不支持软链,可能导致兼容问题[^1]。 - **扩展分区或添加存储**:如果使用云服务或物理磁盘,通过工具(如`fdisk`或云控制台)扩展分区大小。 4. **重启服务(必要时)** 清理后重启相关服务,确保更改生效: ```bash sudo systemctl restart docker # 如果涉及容器服务 ``` #### 注意事项 - **预防措施**:定期监控磁盘空间,设置cron任务自动清理日志(例如:`logrotate`)。 - **权限问题**:确保您对目标目录有写入权限(使用`ls -ld /path`检查)。 - **风险提示**:删除文件前备份数据,避免误删系统关键文件。 通过以上步骤,您应能成功创建目录并解决空间不足错误。如果问题持续,请提供`df -h`和`df -i`的输出,以便进一步诊断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值