我命由我,不由天!


  • 搜索
prometheus docker golang linux kubernetes

k3s配置镜像回收百分比

发表于 2020-12-30 | 分类于 kubernetes | 1 | 阅读次数 1245

起因:

Studio调试,kubelet根据镜像回收策略,当大于80%硬盘空间时,会自动删除没有在用的镜像。而一般服务的镜像都是在running的所以并不会删除,而一些测试和训练的镜像就不会一直在使用,所以有很大概率会被删除。而最终导致训练测试的ImagePullERROR

解决方法:

  1. 删除原先所在/目录下的文件,而保证80%以下的硬盘存储量。这方法得找到不需要的大文件删除,并且还得保持一直在这个容量以下。稍有不慎达到80就会自动删除
  2. 扩大自动删除的标准,从80扩大到100这样。

从理论上来说第二种更好弄,只要设置下参数就可以达到效果。所以就有了这篇文章

解决:

首先从k8s官网获得有用信息user-configuration,镜像垃圾回收可以通过kubelet的命令行参数来设置

问题:k3s怎么设置kubelet的启动命令行参数呢?

因为对k3s不熟悉,只知道k8s可以通过更改配置yaml达到动态加载参数的效果
image.png
其实看到这里kubelet的yaml也没在这里,所以这条路是行不通的。

不过k3s也是有相同功能的,将yaml文件放入到/var/lib/rancher/k3s/server/manifests里就能实现自动kubectl apply的功能

研读官方文档,查找k3s架构,two hours later...

然后找到一篇文章关于架构方面的讲解。里面很大一部分将k3s比起k8s省略了些什么东西,添加了些什么这些都是官网或者github上都有描述的东西,最有价值的是

image.png

这里可以看到k3s Agent才是运行kubelet启动pod的关键。

然后就是官网找配置K3s Agent的地方,功夫不负有心人agent-config 这不是满满的设置吗?

使用k3s agent --help查看到

image.png

这里可以设置 kubelet的参数

然后就是拼接参数的尝试

k3s agent --kubelet-arg image-gc-high-threshold
image.png

不对,少token,那怎么获得token呢?

k3s-github 里的quick start介绍有说,worker nodes怎么加入集群,那时候有token的位置在/var/lib/rancher/k3s/server/node-token

然后加上token

k3s agent --kubelet-arg  image-gc-high-threshold --token K10f362021ccf675051108b452f4ec39a5c49e4a309d996f383162b3364eaef575a::server:0c51ee658a7acaf5f8e2b73ddfedc087

image.png

还是不对需要加上server

k3s agent --kubelet-arg  image-gc-high-threshold --token K10f362021ccf675051108b452f4ec39a5c49e4a309d996f383162b3364eaef575a::server:0c51ee658a7acaf5f8e2b73ddfedc087 --server 127.0.0.1

image.png

从这issues,发现需要server的格式

从cat /etc/rancher/k3s/k3s.yaml

image.png

加上

k3s agent --kubelet-arg  image-gc-high-threshold --token K10f362021ccf675051108b452f4ec39a5c49e4a309d996f383162b3364eaef575a::server:0c51ee658a7acaf5f8e2b73ddfedc087 --server https://127.0.0.1:6443

image.png
最后报错信息:strconv.ParseInt: parsing "true"
golang中字符串转换成int类型失败,转换的是true
image.png
的确赋值为true

image.png
然后发现提示信息中说是int32类型,然后是[0-100]的值,100为禁用镜像回收

尝试

k3s agent --kubelet-arg  image-gc-high-threshold=95 --token K10f362021ccf675051108b452f4ec39a5c49e4a309d996f383162b3364eaef575a::server:0c51ee658a7acaf5f8e2b73ddfedc087 --server https://127.0.0.1:6443

image.png

这最后好像报了挺多的问题,也不知道成功没有?

测试
emmmm,失败了,还是会删除镜像,这是为什么?
这一看就是k3s agent 是重新起了个agent,而服务器是需要restart或者reload这个 agent就可以了

那前面做的都没有用了吗?

是的没有用了

回想下,添加启动参数可以用什么?systemctl就可以实现啊

image.png
可是并没有k3s-agent.service,我需要怎么添加呢?

再看github中安装示例,当只有一个节点的时候或者是主节点的时候是没有agent的,只需要启动server就行了,那就是只需要在server里添加吗?
使用k3s server --help ,发现是有kubelet的选项的
image.png
image.png

那完事!
image.png

systemctl daemon-reload
systemctl restart k3s.service

真的完事了吗?怎么又删除镜像了啊???

观察训练时的磁盘占用量在不停的增加。
想到local-path-positioner 的挂载,之前在/var/lib下,也就和根目录为相同空间,而临时生成的pvc占据了大量空间,而将移至/data1下
image.png

  • 本文作者: Dante
  • 本文链接: https://gaodongfei.com/archives/k3s-config-garbage-percent
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
k3s
容器底层原理
  • 文章目录
  • 站点概览
Dante

Dante

119 日志
5 分类
5 标签
RSS
Creative Commons
0%
© 2023 Dante
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
沪ICP备2020033702号