当前位置: 首页 > article >正文

K8S运维实战之集群证书升级与容器运行时更换全记录

第一部分:Kubernetes集群证书升级实战

tips:此博文只演示一个节点作为示范,所有的集群节点步骤都可以参考。

项目背景

某金融业务系统Kubernetes集群即将面临生产证书集中过期风险(核心组件证书剩余有效期不足90天),需在不影响业务连续性的前提下完成全集群证书轮换。原证书体系采用kubeadm默认1年有效期配置,本次升级后需确保服务端证书有效期延长至10年,客户端证书实现自动续期能力。

实施计划

  1. 影响评估(2小时)

    • 检查当前证书有效期及签发关系

    • 确定证书更新顺序(Master节点先行,Worker节点自动续期)

  2. 操作窗口(22:00-24:00)

    • 按Master节点→Worker节点顺序执行

    • 单节点隔离式操作,业务POD保持跨节点高可用

  3. 回退方案

    • 快照备份ETCD数据及/etc/kubernetes目录

    • 准备原版本kubeadm应急回退包

实施过程

1. 证书健康状态检查

# 查看集群证书有效期分布
kubeadm certs check-expiration | grep -E 'CERTIFICATE|RESIDUAL'

输出关键指标:

apiserver          356d       # 服务端证书即将过期
kubelet-client     356d       # 客户端证书即将过期
CA                 9y         # CA根证书无需处理

2. Master节点证书更新

# 执行证书批量更新(需在Master节点操作)
kubeadm certs renew all# 验证新证书有效期
kubeadm certs check-expiration | grep 'apiserver'

更新后观察:

apiserver          364d       # 有效期已重置

3. 组件服务重启

# 滚动重启控制平面组件
for comp in kube-apiserver kube-controller-manager kube-scheduler etcd; dosystemctl restart $comp && systemctl status $comp --no-pager
done

4. Worker节点自动续期配置

# 配置控制器自动续期参数(Master节点操作)
vim /etc/kubernetes/manifests/kube-controller-manager.yaml 
...
spec:containers:- command:- kube-controller-manager...# 所签名证书的有效期限。每个 CSR 可以通过设置 spec.expirationSeconds 来请求更短的证书。- --cluster-signing-duration=87600h0m0s# 启用controner manager自动签发CSR证书,可以不配置,默认就是启用的,但是建议配置上!害怕未来版本发生变化!- --feature-gates=RotateKubeletServerCertificate=true

5. 客户端证书验证

# 模拟证书过期(Worker节点操作)
timedatectl set-time '2026-04-09' && systemctl restart kubelet# 观察证书自动轮换
ls -l /var/lib/kubelet/pki/kubelet-client-current.pem

输出验证结果:

kubelet-client-2026-04-09-15-30-29.pem  # 新证书已生成

实施结果

  1. 全集群证书有效期延长至10年

  2. 建立客户端证书自动续期机制

  3. 业务POD零中断,API Server请求成功率保持99.99%


第二部分:生产环境容器运行时迁移(Docker→Containerd)

项目背景

在K8S1.23.17版本中,默认的ContainerRuntime为Docker,但是为了更高效的调用容器管理工具,于是决定将Docker与containerd拆分,让K8S直连containerd容器管理工具以至于提高机器性能;某电商平台需将生产集群容器运行时从Docker平滑迁移至Containerd。迁移涉及3个可用区共计100+节点,首期选择非核心业务Worker节点进行技术验证。

实施计划

  1. 兼容性验证(8小时)

    • 测试各类业务POD在Containerd环境下的运行状态

    • 验证监控链路、日志采集等配套系统的适配性

  2. 灰度迁移方案

    • 采用"节点驱逐→运行时更换→业务回迁"三阶段操作

    • 每个先迁移1个Worker节点验证稳定性

  3. 监控指标

    • 容器启动耗时(P99<3s)

    • 运行时资源消耗(内存增长<15%)

详细迁移步骤

1. 节点驱逐预处理

# 设置节点不可调度并驱逐业务POD(Master操作)
kubectl drain worker233 --ignore-daemonsets --delete-emptydir-data

关键检查点:

node/worker233 drained    # 确认节点已驱逐完成

2. 停止kubelet && 旧运行时卸载

# 停止kubelet服务(Worker节点)
systemctl disable --now kubelet
# 停止Docker服务(Worker节点)
systemctl disable --now docker# 清理残留配置
rm -rf /etc/docker /var/lib/docker
# 我这里自己准备了一键卸载脚本
./install-docker.sh r

3. Containerd部署

# 我这里也准备了一键部署containerd服务脚本./install-ctr.sh i
# 使用离线包安装(版本1.6.36)
tar Cxzvvf /usr/local containerd-1.6.36-linux-amd64.tar.gz# 生成默认配置文件
containerd config default > /etc/containerd/config.toml# 配置阿里云镜像加速
sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml

4. Kubelet适配配置

# 修改运行时接入点
cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6 --container-runtime-endpoint=unix:///run/containerd/containerd.sock --container-runtime=remote"ll /run/containerd/containerd.sock
srw-rw---- 1 root root 0 Apr 15 19:57 /run/containerd/containerd.sock

5. worker节点重新上线

# 重启运行时服务
systemctl enable --now containerd# 恢复节点调度
kubectl uncordon worker233# 运行时状态验证
kubectl get node worker233 -o jsonpath='{.status.nodeInfo.containerRuntimeVersion}'

预期输出:

containerd://1.6.36

实施结果

  1. 完成首批8个Worker节点迁移,容器启动耗时降低22%

  2. 节点内存占用减少18%,符合预期优化目标

  3. 业务监控指标无异常波动,日志采集链路正常


最后项目总结

通过本次双轨制运维改造:

  1. 建立证书全生命周期管理体系,消除因证书过期导致的集群故障风险

  2. 完成容器运行时技术栈升级,为后续Kubernetes版本升级铺平道路

  3. 形成标准化运维操作手册,包含7类异常场景的应急处置方案

后续计划:

  • 3周内完成全量Worker节点运行时迁移

  • 建设证书过期主动告警机制

  • 开展containerd调优专项工作


【操作注意要点】

  1. 证书更新后必须重启关联系统服务(apiserver等)

  2. Containerd配置需统一镜像仓库地址避免拉取失败

  3. 生产环境建议采用Ansible进行批量节点操作

相关文章:

K8S运维实战之集群证书升级与容器运行时更换全记录

第一部分&#xff1a;Kubernetes集群证书升级实战 tips:此博文只演示一个节点作为示范&#xff0c;所有的集群节点步骤都可以参考。 项目背景 某金融业务系统Kubernetes集群即将面临生产证书集中过期风险&#xff08;核心组件证书剩余有效期不足90天&#xff09;&#xff0c…...

IntelliJ IDEA clean git password

IntelliJ IDEA clean git password 清除git密码 方法一&#xff1a;&#xff08;这个要特别注意啊&#xff0c;恢复默认设置&#xff0c;你的插件什么要重新下载了&#xff09; File->Manage IDE Settings->Restore Default Settings以恢复IDEA的默认设置(可选); 清空…...

【已更新完毕】2025泰迪杯数据挖掘竞赛C题数学建模思路代码文章教学:竞赛智能客服机器人构建

完整内容请看文末最后的推广群 基于大模型的竞赛智能客服机器人构建 摘要 随着国内学科和技能竞赛的增多&#xff0c;参赛者对竞赛相关信息的需求不断上升&#xff0c;但传统人工客服存在效率低、成本高、服务不稳定和用户体验差的问题。因此&#xff0c;设计一款智能客服机器…...

2025年4月19日 记录大模型出现的计算问题

2025年4月19日 记录大模型出现的计算问题&#xff0c;用了四个大模型计算json的数值&#xff0c;3个错误&#xff0c;1个正确 问题 Class Train Val answer 2574 853 screen 5025 1959 blackBoard 7847 3445 teacher 8490 3228 stand…...

ACI EP Learning Whitepaper 3. Disabling IP Data-plane Learning 功能

目录 1. 使用场景 1.1 未disable IP data-plane learning时 1.2 disable IP data-plane learning后 2. 一代Leaf注意事项 3. L2 未知单播注意事项 1. 使用场景 Windows网卡的动态负载均衡绑定模式等。或多个设备共享相同VIP并通过ARP/GARP/ND来宣告VIP切换时,这些外部设…...

C++入门七式——模板初阶

目录 函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 模板参数的匹配原则 类模板 类模板的定义格式 类模板的显式实例化 当面对下面的代码时&#xff0c;大家会不会有一种无力的感觉&#xff1f;明明这些代码差不多&#xff0c;只是因为类型不…...

计算机网络 - 在浏览器中输入 URL 地址到显示主页的过程?

第一步&#xff0c;浏览器通过 DNS 来解析 URL&#xff0c;得到相应的 ip 地址&#xff08;到哪里找) 和 方法&#xff08;做什么&#xff09; 第二步&#xff0c;浏览器于服务器建立 TCP 三次握手连接 第三步&#xff0c;建立好连接后&#xff0c;浏览器会组装 HTTP 请求报文…...

【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 检查硬件和驱动状态 测试RDMA通信 报错修复 对于交换机的配置&#xff0c;可以看这篇&#xff1a; 【教程】详解配置多台主机通过交换机实现互…...

(二)Trae 配置C++ 编译

Trae配置c编译 零 CMake 编译C0.1 下载安装0.2 安装设置0.3 三种编译方式(见 下文 一 二 三)0.4 调试 (见 下文四) 一 使用MSVC方式编译1.1 安装编译环境1.2安装插件1.3 设置文件 二 使用GCC方式2.1 安装编译环境2.1.1下载:[MinGw](https://gcc-mcf.lhmouse.com/)2.1.2安装:(以…...

Doris 本地部署集群重启后报错

报错描述 Docker 版本&#xff1a; apache/doris:fe-2.1.9 apache/doris:be-2.1.9 连接 MySQL 报错&#xff1a; ERROR 2003 (HY000): Cant connect to MySQL server on 127.0.0.1:9030 (111)FE 日志&#xff1a; INFO (UNKNOWN fe_e7cff187_69d4_42ee_90be_147e87310549(-1…...

日本公司如何实现B2B商城订货系统的自动化和个性化?

在日本构建具备前后台日文本地化、业务员代客下单、一客一价、智能拆单发货的B2B电商系统&#xff0c;需结合日本商业习惯与技术实现。以下是关键模块的落地方案&#xff1a; 一、系统架构设计 1. 前端本地化 语言与UI适配 采用全日语界面&#xff0c;包含敬语体系&#xff08…...

自动化测试相关协议深度剖析及A2A、MCP协议自动化测试应用展望

一、不同协议底层逻辑关联分析 1. OPENAPI协议 OPENAPI 协议核心在于定义 API 的规范结构&#xff0c;它使用 YAML 或 JSON 格式来描述 API 的端点、请求参数、响应格式等信息。其底层逻辑是构建一个清晰、标准化的 API 描述文档&#xff0c;方便不同的客户端和服务端进行对接…...

ReAct、CoT 和 ToT:大模型提示词推理架构的对比分析

ReAct、CoT 和 ToT&#xff1a;大模型提示词推理架构的对比分析 在大型语言模型&#xff08;LLM&#xff09;的研究与应用中&#xff0c;如何有效提升模型在复杂任务上的推理能力是关键问题之一。目前&#xff0c;ReAct&#xff08;Reasoning and Acting&#xff09;、CoT&…...

用魔法打败魔法——获取软件安装路径

用魔法打败魔法——获取软件安装路径 &#x1f31f;嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 目录 背景普通方法用魔法一句话 1.首先新建‘PC自动化应…...

2024-04-19| Java: Documented注解学习 JavaDoc

在 Java 中&#xff0c;Documented 是一个元注解&#xff08;meta-annotation&#xff09;&#xff0c;用于标记其他注解&#xff0c;表明这些注解应该被包含在 JavaDoc 文档中。以下是关于 Documented 注解的作用的简要说明&#xff1a; 作用 记录注解信息到 JavaDoc&#x…...

Spring Boot常用注解全解析:从入门到实战

&#x1f331; Spring Boot常用注解全解析&#xff1a;从入门到实战 #SpringBoot核心 #注解详解 #开发技巧 #高效编程 一、核心启动与配置注解 1. SpringBootApplication 作用&#xff1a;标记主启动类&#xff0c;整合了Configuration、EnableAutoConfiguration和Component…...

【重学Android】1.关于@Composer注解的一点知识笔记

最新因为一些原因&#xff0c;开始重新学习Android及kotlin编程&#xff0c;也觉得可以顺带记录下这个过程中的一些知识点&#xff0c;也可以用作日后自己查找复习。 Composable 注解在 Android 开发中的使用 Composable 是 Jetpack Compose&#xff08;Android 的现代声明式…...

【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning

Probabilistic Forecasts of Bike-Sharing Systems forJourney Planning abstract 我们研究了对共享单车系统&#xff08;BSS&#xff09;车站未来自行车可用性进行预测的问题。这是相关的&#xff0c;以便提出建议&#xff0c;保证用户能够进行旅行的概率足够高。为此&#x…...

大数据平台简介

一、分布式系统基础架构 &#xff08;一&#xff09;定义与核心特征 分布式系统是由多台计算机&#xff08;节点&#xff09;通过网络协作组成的系统&#xff0c;对外表现为一个统一整体。其核心特征包括&#xff1a; 去中心化&#xff1a;节点平等或分角色协作&#xff08;如…...

加一:从简单问题到复杂边界的深度思考

加一&#xff1a;从简单问题到复杂边界的深度思考 引言 在算法世界里&#xff0c;有些问题看似简单&#xff0c;实则暗藏玄机&#xff0c;其中“加一”问题就是一个典型例子。所谓“加一”&#xff0c;通常指的是给一个由数字组成的数组表示的整数加一&#xff0c;这听起来简…...

高精度算法(加、减、乘、除、阶乘和)​

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 唯有主动付出&#xff0c;才有丰富的果…...

实战设计模式之备忘录模式

概述 与解释器模式、迭代器模式一样&#xff0c;备忘录模式也是一种行为设计模式。备忘录模式允许我们保存一个对象的状态&#xff0c;并在稍后恢复到这个状态。该模式非常适合于需要回滚、撤销或历史记录等功能的应用场景。通过使用备忘录模式&#xff0c;开发者可以轻松添加诸…...

keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?

在Keil5 μVision V5.40.0.0版本中,增加了对STM32CubeMX作为全局生成器的支持,这一更新主要带来了以下三方面的提升: 开发流程整合STM32CubeMX原本就支持生成Keil项目代码,但新版本将这一集成升级为“全局生成器”级别,意味着STM32CubeMX生成的代码能直接成为Keil项目的核…...

吉尔吉斯斯坦工商会代表团赴齐河德瑞新能源汽车考察

德州齐河&#xff0c;2025年4月15日电 时中美贸易突变之际&#xff0c;乘国家一带一路之风。 展中国新能源之宏图&#xff0c;塑国贸体系之新方向。 今日上午&#xff0c;吉尔吉斯斯坦共和国工商会代表团一行三人受邀抵达济南&#xff0c;开启对德瑞新能源科技有限公司&…...

无人机在农业中的应用与挑战!

一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如&#xff0c;湖北秭归县使用大疆T100无人机吊运脐橙&#xff0c;单次85公斤的运输任务仅需2分钟&#xff0c;而人工需1小时&#xff0c;综合成本降低250元…...

放松大脑的方法

帮助一个人放松大脑&#xff0c;需要结合生理调节、心理技巧和环境优化。以下是一些科学有效的方法&#xff0c;涵盖即时缓解和长期习惯培养&#xff1a; 一、即时放松技巧&#xff08;快速起效&#xff09; 1. 深呼吸法&#xff08;4-7-8呼吸&#xff09; 方法&#xff1a;吸…...

QT网络拓扑图绘制实验

前言 在网络通讯中&#xff0c;我qt常用的是TCP或者UDP协议&#xff0c;就比方说TCP吧&#xff0c;一台服务器有时可能会和多台客户端相连接&#xff0c;我之前都是处理单链接情况&#xff0c;最近研究图结构的时候&#xff0c;突然就想到了这个问题。那么如何解决这个问题呢&…...

英语四级翻译题练习文章示例

大学正慢慢成为过去吗?Are universiities slowly becoming a thing of the past? 1.1900年前后&#xff0c;法国艺术家让-马克科泰接受委托绘制一组图画&#xff0c;描绘他认为的2000年人们可能过上的生活。Around 1900, the French artist Jean-Marc Cote was commissioned …...

支持中文对齐的命令行表格打印python库——tableprint

文章目录 快速入门 还在为表格中含有中文&#xff0c;命令行打印无法对齐而苦恼吗&#xff1f; 还在为冗长的数据添加代码而抓狂吗&#xff1f; tableprint来了&#xff01;&#xff01;&#xff01;&#xff0c;它完美的解决了上述两个问题&#xff0c;快来试试吧&#xff01;…...

从《周游记3》演绎歌剧版《菊花台》,周杰伦婚礼曲目意大利文版惊喜亮相

今天&#xff08;4月19日&#xff09;22:00&#xff0c;由魔胴西西里咖啡冠名的户外实境互动综艺《周游记3》第四期即将播出。本期节目中&#xff0c;“J式之旅”发起人周杰伦和林暐恒、杜国璋、陈冠霖、陈冠廷&#xff0c;将继续意大利之旅&#xff0c;从那不勒斯的百年老店到…...