部署k8s碰到的问题

时间:2023-01-28 09:54:38

1.failed to garbage collect required amount of images

同时观察到磁盘空间不足的节点有大量pod处于Evicted 0/1状态,但并未进行重新调度。

原因描述:

当容器集群中的节点(宿主机)磁盘使用率达到85%之后,会触发自动的容器镜像回收策略,以便于释放足够的宿主机磁盘。该事件发生于当触发镜像回收策略之后,磁盘空间仍然不足以达到健康阈值(默认为80%)。通常该错误是由于宿主机磁盘被占用太多导致。当磁盘空间占用率持续增长(超过90%),会导致该节点上的所有容器被驱逐,也就是当前节点由于磁盘压力不再对外提供服务,直到磁盘空间释放。

解决方案:

检查节点的磁盘分配情况,通常有以下一些常见情况导致磁盘占用率过高:

  1. 有大量日志在磁盘上没有清理;
  2. 请清理日志。有进程在宿主机不停的写文件;
  3. 请控制文件大小,将文件存储至OSS或者NAS。下载的或者是其他的静态资源文件占用空间过大;静态资源请存储至OSS或CDN。

参考:

https://blog.csdn.net/kingu_crimson/article/details/126178991

https://huaweicloud.csdn.net/63311e36d3efff3090b52c8d.html#16_failed_to_garbage_collect_required_amount_of_images_25

2. helm timeout问题:Error: timed out waiting for the condition解决

通过设置

--timeout 600 --debug

可以防止timeout

参考:

kubernetes - helm test failure: timed out waiting for the condition - Stack Overflow

Helm install `timed out waiting for the condition` and reports release "Failed" · Issue #11904 · helm/charts · GitHub

使用 GPU-Operator 与 KubeSphere 简化深度学习训练与 GPU 监控 - kubesphere - 博客园

3. UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress

可以通过

helm ls --namespace <namespace>

 或者

helm ls -a

来确定helm启动的pod。

参考:

https://*.com/questions/71599858/upgrade-failed-another-operation-install-upgrade-rollback-is-in-progress

HELM部署异常:Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress_dreamer_chen的博客-CSDN博客

5.ubuntu报错:source: not found

原因可能是Shell的解释器不是bash,需把Shell的解释器更改为bash

参考:

如何解决ubuntu系统下source: not found错误?_Alibaba Cloud Toolkit-阿里云帮助中心

6. Unable to connect to the server: Access violation 

 这是因为设置了http_proxy/https_proxy代理,去掉了就可以了。

参考:

https://zhuanlan.zhihu.com/p/40931670

7. ansible playbook中设置代理

预先设置http_proxy环境变量

ansible-playbook --extra-vars "http_proxy=$http_proxy" ...

proxy - Dynamicly set HTTP_PROXY in an ansible playbook - Stack Overflow

如何仅为特定的 ansible 任务设置代理? | 

配置环境 (在代理环境中) — 国内最专业的Ansible中文官方学习手册 

Ansible 使用配置 - 明明改变世界 - 博客园 

在 ansible playbook 中动态设置 HTTP_PROXY | 

Ansible使用代理上网 - Varden - 博客园 

8.mux_client_read_packet: read header failed: Broken pipe Received exit status

还不清楚

9.linux脚本实现超时重传

while timeout -k 70 60 bash -c '这里写你的代码' ; [ $? = 124 ]
do
echo "命令超时正在重试"
sleep 2  # Pause before retry
done

这段脚本的意思就是60秒超时之后发送SIGTERM,如果SIGTERM没有使这个命令终止的话那就发送 SIGKILL指令。
$? 表示上个命令的返回状态,124表示超时。
需要注意的是 如果命令前面不加bash -c的话,文件里面也没有#!/bin/bash,那么默认就是以sh来执行的,这可能导致一些shell脚本无法使用。

参考:

linux shell脚本超时重试 | 码农家园

Linux shell脚本重试机制 - 走看看