第六章 K8s Service 概念原理2 学习笔记
1. kubectl edit 命令详解
1.1 核心作用
kubectl edit 可直接修改存储在 etcd 中的资源对象原始配置,授课中类比为修改资源对象的「底层基因」,从根源改变其运行逻辑,修改后无需额外执行 apply/replace 操作即可生效。
1.2 实操示例:修改 Deployment 触发滚动更新
- 修改目标:对应 Service 关联的 Deployment 控制器
- 场景1:镜像版本变更
将容器镜像版本从 1.0 修改为 2.0,保存退出后会自动触发滚动更新,通过kubectl get pod可观察到 Pod 重建过程,更新完成后通过 curl 访问对应 Service 可确认返回版本已变为 2.0。 - 场景2:滚动更新策略参数校验
尝试修改滚动更新策略的maxSurge参数(即允许超出当前副本数的最大比例),若输入超出合法范围的错误值(如 25000、25.0000 等),保存时会触发配置校验,自动回滚非法输入或提示配置错误,禁止错误值写入 etcd。
1.3 命令使用说明
- 基础语法:
kubectl edit <资源类型> <资源名称> - 编辑体验:默认调用系统配置的默认编辑器,操作逻辑与直接编辑 YAML 资源清单文件完全一致。
2. 修改 kube-proxy 工作模式(iptables 切换为 IPVS)
2.1 前置背景
kube-proxy 是 K8s 集群中实现 Service 流量转发与负载均衡的核心组件,默认工作模式为 iptables,本小节演示如何将其切换为性能更高的 IPVS 模式。
2.2 完整操作步骤
- 编辑 kube-proxy 的 ConfigMap 配置:
执行命令:kubectl edit configmap kube-proxy -n kube-system注意:kube-proxy 的 ConfigMap 存储在
kube-system命名空间,不属于默认 default 命名空间,操作时必须指定-n kube-system参数,否则默认在 default 命名空间查找会报错。 - 修改配置项:找到 ConfigMap 中的
mode字段,默认值为iptables,将其修改为ipvs后保存退出。 - 重启 kube-proxy Pod 使配置生效:
由于应用不会自动重载配置,必须手动删除 Pod 触发重建才能加载新配置:- 先通过标签选择器筛选 kube-system 命名空间下的 kube-proxy Pod:
kubectl get pod -n kube-system -l k8s-app=kube-proxy - 删除筛选出的 Pod:
kubectl delete pod -n kube-system -l k8s-app=kube-proxy - kube-proxy 的 Pod 会被集群控制器自动重建,重建完成后新配置生效。
- 先通过标签选择器筛选 kube-system 命名空间下的 kube-proxy Pod:
2.3 生效验证
- 执行
ipvsadm命令可查看生成的 IPVS 负载均衡规则,可观察到对应 Service 的 ClusterIP、端口、轮询算法(round robin)以及后端真实 Pod 的 IP 地址列表。 - 执行
kubectl get svc可查看 Service 的配置信息,确认 IPVS 规则与 Service 定义匹配。
2.4 IPVS 模式核心原理
访问 Service 的 ClusterIP 时,请求会先到达本机的 IPVS 集群,IPVS 按照配置的负载均衡算法(默认 round robin 轮询)将请求转发到后端匹配的 Pod 上,最终实现 Service 的负载均衡能力。
AI 总结
本小节围绕 K8s Service 的底层配置与原理展开,首先讲解了直接修改 etcd 存储资源对象的 kubectl edit 命令用法,包括修改 Deployment 触发滚动更新的逻辑、配置合法性校验机制;随后实操演示了将 kube-proxy 默认的 iptables 工作模式切换为 IPVS 模式的完整流程,并梳理了 IPVS 实现 Service 负载均衡的核心转发逻辑,帮助理解 K8s Service 底层的流量处理机制。