Kubelet垃圾回收--更改硬盘使用回收策略

作者遇到node节点的proxy组件状态为ImagePullBackOff问题,经探索发现是硬盘使用达85%时,kubelet删除长时间不用的pod及镜像所致,释放空间到80%以下会停止驱逐。作者提出将硬盘使用阀值调大,最终应结合pod优先级及抢占式解决,待测试后补更。

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

Kubelet垃圾回收官网地址:https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/

首先我碰到的问题是node节点的proxy组件状态为ImagePullBackOff,What?我镜像哪去了?Proxy组件挂掉之后导致调度到该节点的pod全部都不能用!!!赶紧将镜像load进来先恢复服务,在排查问题…

经过探索得知当硬盘使用达到85%,kubelet就会删除该节点上长时间不用的pod及镜像,kube-proxy是安装集群是就已经安装好的,结果不言而喻,而释放空间的百分比只要到了80%以下,kubelet就会停止驱逐操作…这也是为啥我登录到服务器之后看到的空间还有很多的原因。

我的解决方法是将硬盘使用的阀值调大:

编辑:
vim /etc/systemd/system/kubelet.service.d/10-kubelet.conf
并在ExecStart后添加:--eviction-hard=nodefs.available<5%

最终的解决方法因该是调大硬盘使用的阀值并结合pod优先级及抢占式来解决垃圾回收问题,但是我这里没有测试pod优先级,所以就先说这么多,等测试完成之后在补更。

<think>我们正在讨论如何续期kubelet-client-current.pem证书。根据引用内容,这个证书是kubelet的客户端证书,用于kubelet与APIServer之间的认证。续期方法有两种:自动轮换和手动续期。用户特别提到了kubelet-client-current.pem,所以我们重点关注这个证书。根据引用[2]和[3]: -自动轮换:当配置了自动轮换后,kubelet会自动更新这个证书。kubelet-client-current.pem是一个符号链接,指向当前有效的客户端证书(如kubelet-client-2020-11-15-15-57-15.pem)。-如果自动轮换没有正常工作,可能会导致证书过期,此时需要手动干预。 **步骤概述:**1.**检查证书状态**:确认证书是否过期或即将过期。 2. **自动轮换配置**:如果尚未配置自动轮换,则进行配置(推荐)。3.**手动续期**:如果自动轮换配置后仍未更新,或者需要立即续期,则进行手动操作。 **详细步骤:**###一、检查证书有效期在节点上执行:```bashopenssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem-noout -dates``` 输出示例:``` notBefore=Nov1507:52:152020GMTnotAfter=Nov1507:52:152021 GMT```###二、配置自动轮换(推荐) 如果尚未配置自动轮换,请按以下步骤操作:1.**确保kube-controller-manager启用相关特性**编辑文件`/etc/kubernetes/manifests/kube-controller-manager.yaml`(在Master节点上),添加或确保以下参数:```yamlspec:containers:-command:---feature-gates=RotateKubeletClientCertificate=true#启用客户端证书轮换- --cluster-signing-duration=87600h0m0s#设置CA签名有效期(可选,延长CA有效期)```2.**配置kubelet**编辑kubelet配置文件`/var/lib/kubelet/config.yaml`,添加:```yamlfeatureGates:RotateKubeletClientCertificate:true#启用客户端证书轮换rotateCertificates: true#允许kubelet自动轮换证书```3.**重启kubelet**```bashsystemctldaemon-reloadsystemctlrestart kubelet``` >**注意**:自动轮换需要kube-controller-manager的证书签发功能正常工作[^3]。###三、手动续期(如果自动轮换未触发) 如果证书已经过期,自动轮换可能无法正常工作,需要手动操作:1.**删除旧证书**(可选,备份后删除)```bashmv/var/lib/kubelet/pki/kubelet-client-current.pem/tmp/kubelet-client-current.pem.bak``` 2. **重启kubelet触发重新申请**```bashsystemctlrestart kubelet``` 3. **检查kubelet是否自动生成新证书**查看新证书:```bashls -l /var/lib/kubelet/pki/kubelet-client-current.pemopensslx509-in/var/lib/kubelet/pki/kubelet-client-current.pem -noout-dates``` 4. **如果重启后未生成新证书**(可能CSR未被批准)-检查未批准的CSR:```bashkubectl getcsr```-批准该节点的CSR(假设CSR名称为`node-name-csr`):```bashkubectlcertificate approve<node-name-csr>``` 5. **手动获取证书**(参考引用[3])如果批准后证书未自动下发,可手动保存:```bashkubectlget csr <node-name-csr>-ojsonpath='{.status.certificate}' |base64--decode> /var/lib/kubelet/pki/kubelet-client-current.pemsystemctl restartkubelet```###四、验证-查看新证书有效期:```bashopensslx509-in/var/lib/kubelet/pki/kubelet-client-current.pem -noout-dates``` -检查kubelet日志:```bashjournalctl-ukubelet |grep certificate``` >**关键提示**:> -手动操作后建议配置自动轮换以避免再次过期[^2][^5]> -确保节点时间同步(NTP)[^4]§§相关问题§§1.如何检查Kubernetes集群中所有节点的kubelet证书有效期?2.kube-controller-manager的证书自动签发功能依赖哪些条件?3.为什么kubelet客户端证书轮换需要批准CertificateSigningRequest?4.如何批量修复多节点集群中的过期 kubelet证书?</think>### 如何续期 kubelet-client-current.pem 证书 kubelet-client-current.pem 是 kubelet 的**客户端证书**,用于 kubelet 与 API Server 的认证。续期方法如下: --- #### 一、自动续期(推荐方案) **前提条件**:已配置证书自动轮换功能(Kubernetes ≥ 1.8) 1. **检查自动轮换状态** ```bash # 查看证书符号链接(自动轮换成功会生成新证书) ls -l /var/lib/kubelet/pki/kubelet-client-current.pem ``` 正常输出示例(带时间戳的证书文件): `lrwxrwxrwx ... kubelet-client-current.pem -> kubelet-client-2025-06-01-12-34-56.pem` 2. **触发自动续期** ```bash # 重启 kubelet 触发证书轮换 sudo systemctl restart kubelet # 查看日志确认 journalctl -u kubelet | grep -i "certificate" ``` 成功日志示例: `Certificate rotation request completed, new certificate is in use` > **验证**: > ```bash > openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates > ``` > 输出中的 `notAfter` 应为未来时间(默认1年有效期)[^2] --- #### 二、手动续期(适用于自动轮换失效或证书已过期) ##### 步骤1:删除旧证书(强制 kubelet 重新申请) ```bash # 备份旧证书 sudo cp /var/lib/kubelet/pki/kubelet-client-current.pem{,.bak} # 删除证书文件(实际删除符号链接指向的文件) sudo rm -f $(readlink -f /var/lib/kubelet/pki/kubelet-client-current.pem) sudo rm /var/lib/kubelet/pki/kubelet-client-current.pem # 删除符号链接 ``` ##### 步骤2:重启 kubelet 触发证书申请 ```bash sudo systemctl restart kubelet ``` ##### 步骤3:批准证书签名请求(CSR) ```bash # 查看待处理的 CSR kubectl get csr | grep Pending # 批准该节点的 CSR(替换 NODE_NAME) kubectl certificate approve <NODE_NAME>-csr ``` ##### 步骤4:手动保存新证书(可选) 如果证书未自动下发[^3]: ```bash # 获取证书内容(替换 NODE_NAME) kubectl get csr <NODE_NAME>-csr -o jsonpath='{.status.certificate}' | base64 --decode | sudo tee /var/lib/kubelet/pki/kubelet-client-current.pem # 重启 kubelet sudo systemctl restart kubelet ``` --- #### 三、配置自动轮换(未开启时) 若未配置自动轮换,需修改以下配置: 1. **Master 节点**:编辑 Controller Manager ```yaml # /etc/kubernetes/manifests/kube-controller-manager.yaml command: - --feature-gates=RotateKubeletClientCertificate=true # 启用客户端证书轮换 - --cluster-signing-duration=87600h # 设置CA有效期(10年) ``` 2. **工作节点**:修改 kubelet 配置 ```yaml # /var/lib/kubelet/config.yaml rotateCertificates: true # 启用证书轮换 featureGates: RotateKubeletClientCertificate: true ``` 3. **重启服务** ```bash sudo systemctl daemon-reload sudo systemctl restart kubelet ``` --- #### 关键说明: 1. 证书路径:`/var/lib/kubelet/pki/kubelet-client-current.pem` 是符号链接,指向带时间戳的实际证书[^2] 2. 续期机制: - 客户端证书由 kubelet 主动申请,Controller Manager 签发[^1] - 证书过期前会自动轮换(默认提前 70% 有效期) 3. 过期处理:若证书已过期导致 kubelet 无法启动,需从正常节点复制证书或按手动流程操作[^4] > **故障排查**: > ```bash > journalctl -u kubelet | grep -i "certificate" # 查看证书错误 > ntpdate -u pool.ntp.org # 检查时间同步 > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值