Kubernetes v1.3 发布演进全解析:从 Changelog 看 Attach/Detach 控制器、驱逐机制与升级迁移路径

Kubernetes v1.3 发布演进全解析:从 Changelog 看 Attach/Detach 控制器、驱逐机制与升级迁移路径
Kubernetes v1.3 发布演进全解析从 Changelog 看 Attach/Detach 控制器、驱逐机制与升级迁移路径【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes本文以 CHANGELOG-1.3.md 为主体完整解读 Kubernetes v1.3 系列v1.3.0 至 v1.3.10的发布脉络从 v1.3.0 的核心功能亮点、升级前的强制迁移步骤与已知问题到各补丁版本的关键修复并结合当前仓库源码印证 Attach/Detach 控制器、kubelet 驱逐机制等架构级变更的真实实现位置帮助读者掌握 1.3 时代的升级决策要点与对应源码落点。一、文档定位与版本全貌Kubernetes 仓库将历史发布记录按次要版本归档在 CHANGELOG/ 目录下CHANGELOG-1.3.md 即覆盖 v1.3 全生命周期的那份发布说明共包含 17 个版本条目正式版v1.3.0、v1.3.1、v1.3.2、v1.3.3、v1.3.4、v1.3.5、v1.3.6、v1.3.7、v1.3.8、v1.3.9、v1.3.10Beta 版v1.3.0-beta.1、v1.3.0-beta.2、v1.3.0-beta.3Alpha 版v1.3.0-alpha.1 至 v1.3.0-alpha.5每个版本条目遵循固定结构Downloads制品清单与校验值、Changelog since 上一版本、Action Required需要用户采取行动的不兼容变更如 beta.1/beta.3/alpha.1~alpha.5 均设此节、Other notable changes其他显著变更部分版本v1.3.3、v1.3.0还带 Known Issues 节。文档头部的自动生成的目录!-- BEGIN MUNGE: GENERATED_TOC --区块列出了全部 17 个版本锚点其中 v1.3.0 是唯一拥有完整 Highlights 与升级前置说明的版本条目。二、v1.3.0 核心功能亮点Highlights 全量继承发布说明将 v1.3.0 的亮点归纳为六大类以下逐条保留其原始定位与成熟度标注授权与认证Authorization / SecurityAlphaRBAC 授权 API 组首次出现1.3.0-alpha.5 中以 Role Based Access Control API alpha 版本落地后续 beta.3 升级 federation 组版本时也与之联动BetaPodSecurityPolicy 对象用于限制 Pod 使用安全敏感特性alpha.5 引入类型定义并附带可强制执行的准入控制器安全基线TLS 最低版本设定为 1.2因 TLS1.0/1.1 存在已知漏洞alpha.5 的 Setting TLS1.2 minimum 条目引入新增 Webhook Token Authenticatoralpha.4 引入权限收敛L7 LB 控制器与磁盘 attach 控制器移至 master 运行节点不再需要相应特权。联邦Federationfederation API 组从 alpha 提升为beta所有联邦集群中的 Service 统一注册到 Cloud DNSAWS 与 GCP 两家提供方相关控制器链在 alpha.5/beta.1 逐步成型federation service controller 负责向所有注册集群同步 Service 并更新全局 DNS 记录beta.3 又修复了 DNS 记录更新逻辑。有状态应用Stateful AppsAlphaPetSets 管理有状态应用beta.3 阶段还优化了 PetSet 卷跨可用区创建AlphaInit containers在应用容器启动前按序执行一次性初始化任务任一 init 容器失败会阻止应用启动beta.2 的 Experimental Features 节对其有专门描述配套实验特性alpha.4 引入 JobTemplate、ScheduledJobsbatch/v2alpha1为定时批处理铺路。kubectl 与升级操作kubectl rolling-update对 Pod/RC 更新失败进行重试beta.3kubectl drain不再删除带本地存储的 Podbeta.1新增kubectl rollout status用于观察 Deployment 滚动状态alpha.4 实现JSON 解析错误时显示行号alpha.4新增-t作为--tty的简写alpha.4。资源与稳定性Resources节点内存压力下可选地驱逐 Pod 以提升稳定性kubelet evictionalpha.5 的 Kubelet evicts pods when available memory falls below configured eviction thresholds 条目引入AlphaNVIDIA GPU 支持kubelet 启用--experimental-nvidia-gpus后可通过alpha.kubernetes.io/nvidia-gpu资源声明 GPUalpha.4 条目落地loadBalancer 与 nodePort 类型 Service 纳入配额quota系统alpha.3 分别落地。三、升级前必须执行的迁移步骤Important Steps before Upgrading这是 v1.3.0 条目中最具操作价值的部分发布说明原文明确给出了升级前置条件与命令序列。Docker 运行时版本约束支持的 Docker Engine 版本仅两个v1.10 与 v1.11发布说明分别引用了 issue #19720 与 #23397 作为兼容性依据。v1.9 仍兼容但不推荐更早版本一律不支持。ThirdPartyResource 作用域迁移强制步骤ThirdPartyResource 对象在 1.3 中从命名空间级namespaced-scoped改为集群级cluster-scoped且该改造在 alpha.4 的 Action Required 节中即被标注为不兼容变更Make ThirdPartyResource a root scoped object。官方给出的迁移三步法如下升级前使用1.2.x 客户端导出并删除现有对象kubectl get thirdpartyresource --all-namespaces -o yaml tprs.yaml kubectl delete -f tprs.yaml升级到 v1.3.0 后使用1.3 的 server 与客户端在根作用域重新注册kubectl create -f tprs.yamlkubectl 命令弃用--container-port标志被标记为弃用alpha.4 的 mark container-port flag as deprecated 条目后续版本将移除应改用--target-port。其他 Action Required 事项按 beta/alpha 版本归集版本需要行动的事项beta.3kubelet 默认自动检测云提供方可用选项退出该行为使用cluster/saltbase/salt/kube-dns下 kube-dns 清单时需替换__PILLAR__FEDERATIONS__DOMAIN__MAP__/pillar[federations_domain_map]为--federationsmyfederationfederation.test形式不支持联邦则删除federation 组版本升至 v1beta1beta.1genericapiserver 修正 ExternalHost 生成逻辑federation-controller-manager 改为通过 Secret 获取 federation-apiserver 的 kubeconfigalpha.5引入 NetworkUnavailable 节点条件路由未建立前不向该节点调度kube-controller-manager 内新增垃圾回收控制器与孤儿化 finalizer 逻辑QoS 策略提升至 Pod 级别NodeController 增加 CIDR 分配器alpha.4第三方资源开始做校验kube-system 命名空间改为自动创建--container-port弃用etcd3 存储后端相关标志alpha.1apiserver 默认关闭 swagger UI需通过标志显式开启恢复对接安全 etcd 的能力alpha.5kube-up 不兼容变更开启集群自动扩缩容KUBE_ENABLE_NODE_AUTOSCALERtrue时必须同时设置KUBE_AUTOSCALER_MIN_NODES与KUBE_AUTOSCALER_MAX_NODES四、v1.3.0 已知问题清单Known Issues 全量继承发布说明按四个维度列出了官方已知问题升级前需要逐条对照Kubernetes 核心kube-proxy 因 Docker 缺陷偶发崩溃issue #24000重启 docker daemon 可解决CORS 仅在非安全模式下生效issue #24086压力下删除后的 PersistentVolumeClaim 有极小概率被错误重建issue #26082。Docker 运行时Debian Jessie 上 Aufs 存储驱动的 kernel crashissue #27885发布说明建议部署 node-problem-detector addon 自动发现此类内核问题——该 addon 恰好就是 v1.3.0-alpha.5 引入的 DaemonSet以 NodeCondition 和 Event 形式上报节点问题在 GCE 上默认启用docker v1.11 存在文件描述符泄漏containerd issue #275与每容器额外内存开销docker issue #21737v1.10 存在 RedHat 识别的一组上游修复项。Rkt 运行时已知问题清单指向发布说明外链的 rkt notes 文档rkt 在 1.3 时代仍是可选运行时网络 CNI 层面 alpha.5 修复了为 rkt 拉起lo接口的问题。五、云提供方专属说明Provider-specific Notesv1.3.0 对各云的适配改进原文如下均按文档原意继承AWS支持 ap-northeast-2首尔区域ECR 支持跨 Region 拉取镜像kube-up/kube-down 更可靠ELB 开启 ICMP Type 3 Code 4修复 ARP 缓存使用/dev/xvdXX设备名ELB 支持 proxy protocol经注解service.beta.kubernetes.io/aws-load-balancer-proxy-protocol、混合明文/加密端口经注解service.beta.kubernetes.io/aws-load-balancer-ssl-ports与监听器 SSL可指定 VPC CIDR实验特性修复超过 2 个安全组的问题。GCP支持将 gcr.io 用作 Docker 镜像仓库镜像大集群扩大 GCE master 根盘默认 clusterCIDR 从 /16 调整为 /14使默认集群可容纳 1000 节点允许 GCE 上使用 Debian JessieNode Problem Detector addon 可检测并上报内核死锁。OpenStack云提供方插件正式新增alpha.4 的 Openstack provider 条目首次引入beta.1 补充 LBaaS v2 支持v1.3.7 修复 LBAAS v2 多服务端口限制。vSphere云提供方插件更新alpha.4 引入 vSphere Cloud Provideralpha.5 实现 Volume Plugin。六、架构级变更的源码印证从 Release Notes 到代码落点v1.3 是 Kubernetes 存储与节点可靠性架构的分水岭。下面选取发布说明中三条影响最深的架构变更在当前仓库源码中逐一印证其落点与演化。6.1 Attach/Detach 控制器beta.1 引入发布说明对 1.3 新引入的 Attach/Detach Controller 有一段完整的设计描述核心机制为控制器监听 apiserver 中的已调度 Pod确保实现 volume Attacher 接口的卷被 attach 到 Pod 所在节点Pod 删除后控制器等待 kubelet 安全卸载卷以该卷不再出现在节点Node.Status.VolumesInUse中为准若超过预配置时长v1.3 中为 3 分钟仍未卸载则单方面强制 detach防止节点失联导致卷被永久占用向后兼容控制器只管理带注解volumes.kubernetes.io/controller-managed-attach-detach的节点1.3 节点启动时默认打上该注解行为受 kubelet 标志--enable-controller-attach-detach默认 true控制安全的滚动升级顺序先升级 master启动新控制器此时因节点均无注解而不接管任何卷再逐台升级节点节点升级后自动 opt-in控制器随即接管该节点上卷的 attach/detach。在当前仓库中该控制器的实现主体仍在 attach_detach_controller.go其头部注释即声明Package attachdetach implements a controller to manage volume attach and detach operations。值得注意的演化细节当前代码中TimerConfig结构体定义了ReconcilerMaxWaitForUnmountDurationattach_detach_controller.go#L71-L75用于等待卷被安全卸载的最长时间超时则认为节点或 kubelet 无响应并强制 detach——这正对应发布说明中 v1.3 的 3 分钟等待窗口而从源码结构看当前主代码库的默认值已调整为 6 分钟说明该等待时长在 1.3 之后的版本中经历了放宽。控制器周边的 cache、populator、reconciler、statusupdater 等子包位于 pkg/controller/volume/attachdetach/ 目录构成了完整的 DesiredStateOfWorld/ActualStateOfWorld 对账架构与发布说明描述的watch API server 等待卸载 超时强拆三阶段流程一一对应。6.2 kubelet Volume Managerbeta.2 引入beta.2 的 Other notable changes 记载A new volume manager was introduced in kubelet that synchronizes volume mount/unmount (and attach/detach, if attach/detach controller is not enabled)其意义在于消除了 Pod 创建循环与孤儿卷清理循环之间的竞态并把 unmount/detach 移出syncPod()路径使卷清理不再阻塞 syncPod 循环。当前仓库中该模块延续在 pkg/kubelet/volumemanager/ 目录与 6.1 的控制器共同组成 1.3 之后挂载/卸载在节点、附加/分离在 master的分层存储控制面。v1.3.4 的补丁 Allow mounts to run in parallel for non-attachable volumes 与 v1.3.6 的 Skip safe to detach check if node API object no longer exists 均是对这套机制的竞态与边界修正体现了该架构在 1.3 周期内经历的高强度打磨。6.3 kubelet 驱逐alpha.5 引入Highlights 中通过可选驱逐 Pod 提升节点稳定性对应的实现落地于 eviction_manager.go 所在的 pkg/kubelet/eviction/ 目录。从源码结构看当前实现已包含memory_threshold_notifier.go等按资源类型拆分的阈值通知器与平台相关的 defaults 文件defaults_linux.go/defaults_windows.go其低于配置驱逐阈值即触发的语义与 alpha.5 条目 Kubelet evicts pods when available memory falls below configured eviction thresholds 完全一致。同期 alpha.5 还向调度器引入了节点内存压力条件Introduce node memory pressure condition to scheduler使驱逐节点侧与避压调度控制面侧形成闭环。6.4 其他可印证的关键变更垃圾回收控制器alpha.5 的 Action Required 中两条 GC 条目Add garbage collector into kube-controller-manager、Add orphaning finalizer logic to GC对应当前仓库 pkg/controller/garbagecollector/ 目录这是孤儿对象回收能力的起点Taints 与 Tolerationsalpha.5 条目 Implement taints and tolerations 是节点污点/容忍度机制的首次实现当前仓库的 pkg/controller/tainteviction/ 目录污点驱逐延续了这一主线Init 容器beta.2 的 Experimental Features 描述与 alpha.5 的 Add init containers to pods 条目是如今每个 Pod 默认支持 initContainers 字段的历史起点通信层alpha.5 条目 Use protobufs by default to communicate with apiserver (still store JSONs in etcd) 确立了 apiserver 客户端协议与存储格式解耦的路线网络alpha.5 实现 NetworkPolicy v1beta1 API 对象v1.3.4 补丁 NetworkPolicy cherry-pick 1.3 说明该 API 在 1.3 周期内还在快速迭代Kubenet 的 host-port 支持经 iptables 实现alpha.5 条目与 v1.3.7 修复的 kubelet hostport logic which flushes KUBE-MARK-MASQ iptables chain 补丁相互印证。七、补丁版本v1.3.1 ~ v1.3.10修复脉络正式版 10 个补丁版本的显著变更按主题归集如下条目均出自 CHANGELOG-1.3.md 对应版本的 Other notable changes版本关键修复与变更v1.3.1修复 watch cache 过滤缺陷#29046此缺陷在 v1.3.2 中又以 #28968 的形式进一步修复说明其影响面广v1.3.2节点 CIDR 分配前先列出全部节点并占用 cidr map#29062ModifyConfig 起始阶段锁定全部可能的 kubecfg 文件#28232v1.3.3修复 kubelet working_set 计算#29154kube-proxy conntrack 限制按核数缩放成为新默认行为#28876GPU 资源校验修复#28743GCE 不再通过 metadata server 探测运行环境#28871kcm 重启不再重建 LB 云资源#29082。该版本还专门列出 4 条 Known Issues命名空间删除导致 PVC 卷未 detach#29051、GCE PD 在节点已不存在时 detach 失败#29358、批量建 Pod 时 default-token 卷挂载并行化问题#28616、service account secret 卸载时 device or resource busy#28750v1.3.4NetworkPolicy cherry-pick非可 attach 卷允许并行挂载#28939块设备增强卷与挂载日志#24797修复 ServiceAccount 的 RBAC authorizer#29071节点不存在时视为卷已 detach#29485修复命名空间删除导致 PVC 卷未 detach#29077即 v1.3.3 Known Issue 的闭环v1.3.5Dashboard UI 升级 v1.1.1允许限制子资源subresource访问#30001绑定后修复 PVC.Status.Capacity 与 AccessModes#29982OIDC 认证插件不再裁剪带尾斜杠的 issuer URL#29860rkt 场景拉起lo接口#29310v1.3.6处理 vSphere 卷 Attach 上限#29881请求超时随 terminationGracePeriodSeconds 提升#31275节点 API 对象不存在时跳过 safe-to-detach 检查#30737nodecontroller 在 kubeletVersion 1.2.0 时不再翻转 Pod readiness#30828cAdvisor 升级 v0.23.9 以修复容器文件系统统计可能损坏 devicemapper thin pool 的问题#30307v1.3.7AWS 修复卷设备分配竞态之外的区域/提供方修复ap-south-1 区域加入#28428vSphere 关键修复回合#31993OpenStack LBAAS v2 多端口#32001修复 kubelet hostport 逻辑误清 KUBE-MARK-MASQ iptables 链#32413修复 federation controller manager 注册 GKE 集群时 panic#30940v1.3.8AWS 卷设备分配竞态条件修复#31090v1.3.9正确测试 x509 中间证书#34524移除代理目标不必要的头部#34076v1.3.10GCI 与内建 kubelet 版本解耦#31367GCE debian 镜像升级以响应 CVE-2016-5195Dirty Cow#35825新增 RELEASE_INFRA_PUSH 相关代码以支持从 kubernetes/release 仓库推送#28922可以观察到清晰的主题线v1.3.1~v1.3.4 密集修复 watch cache 与卷 detach 竞态存储控制面新架构上线初期的阵痛v1.3.5~v1.3.7 转向提供方适配与安全基线v1.3.8~v1.3.10 收敛为低频安全与稳定性维护是典型的 LTS 前维护版本收尾形态。八、发布制品与完整性校验发布说明的 Downloads 部分记录了每个版本的制品与校验值其格式本身也体现了发布流程的演化早期版本v1.3.0 至 v1.3.0-beta.3仅校验kubernetes.tar.gz且同时给出sha1 与 md5两种哈希v1.3.3 起改用单列sha256v1.3.10 进一步将制品拆分为 kubernetes.tar.gz 与 kubernetes-src.tar.gz源码包并首次细分 Client Binaries 与 Server Binaries 两张清单。v1.3.10 的完整清单如下文件名与 sha256 均摘自发布说明原文主制品文件名sha256kubernetes.tar.gz0f61517fbab1feafbe1024da0b88bfe16e61fed7e612285d70e3ecb53ce518cfkubernetes-src.tar.gz7b1be0dcc12ae1b0cb1928b770c1025755fd0858ce7520907bacda19e5bfa53fClient Binaries9 种平台组合文件名sha256kubernetes-client-darwin-386.tar.gz64a7012411a506ff7825e7b9c64b50197917d6f4e1128ea0e7b30a121059da47kubernetes-client-darwin-amd64.tar.gz5d85843e643eaebe3e34e48810f4786430b5ecce915144e01ba2d8539aa77364kubernetes-client-linux-386.tar.gz06d478c601b1d4aa1fc539e9120adbcbbd2fb370d062516f84a064e465d8eadckubernetes-client-linux-amd64.tar.gzfe571542482b8ba3ff94b9e5e9657f6ab4fc0feb8971930dc80b7ae2548d669bkubernetes-client-linux-arm64.tar.gz176b52d35150ca9f08a7e90e33e2839b7574afe350edf4fafa46745d77bb5aa4kubernetes-client-linux-arm.tar.gz1c3bf4ac1e4eb0e02f785db725efd490beaf06c8acd26d694971ba510b60a94dkubernetes-client-linux-ppc64le.tar.gz172cd0af71fcba7c51e9476732dbe86ba251c03b1d74f912111e4e755be540cekubernetes-client-windows-386.tar.gzf2d2f82d7e285c98d8cc58a8a6e13a1122c9f60bb2c73e4cefe3555f963e56cdkubernetes-client-windows-amd64.tar.gzac0aa2b09dfeb8001e76f3aefe82c7bd2fda5bd0ef744ac3aed966b99c8dc8e5Server Binaries4 种 Linux 架构文件名sha256kubernetes-server-linux-amd64.tar.gzbf0d3924ff84c95c316fcb4b21876cc019bd648ca8ab87fd6b2712ccda30992bkubernetes-server-linux-arm64.tar.gz45e88d1c8edc17d7f1deab8d040a769d8647203c465d76763abb1ce445a98773kubernetes-server-linux-arm.tar.gz40ac46a265021615637f07d532cd563b4256dcf340a27c594bfd3501fe66b84ckubernetes-server-linux-ppc64le.tar.gzfaa5075ab3e6688666bbbb274fa55a825513ee082a3b17bcddb5b8f4fd6f9aa0这一清单形态本身即是 1.3 发布体系演进的缩影arm64 与 ppc64le 的交叉编译在 alpha.3Build Kubernetes, etcd and flannel for arm64 and ppc64le就已落地到 v1.3.10 时 server/client 制品的架构覆盖已完全成型beta.3 的 Add sources to server tarballs 条目则解释了 kubernetes-src.tar.gz 的由来。九、结语CHANGELOG-1.3.md 记录的不只是一串版本号v1.3 周期确立了三大延续至今的架构支柱——master 侧的 Attach/Detach 控制器现源码位于 pkg/controller/volume/attachdetach/、节点侧的 Volume Manager 与驱逐机制pkg/kubelet/volumemanager/、pkg/kubelet/eviction/、以及以 RBAC/NetworkPolicy/PodSecurityPolicy 为代表的声明式安全体系。对需要阅读历史发布行为、定位某条变更来源或对照升级约束的读者这份 Changelog 与当前源码目录之间的对应关系如 3 分钟等待窗口在当前代码中演化为 6 分钟的ReconcilerMaxWaitForUnmountDuration即是最佳的导读路径完整的版本索引可从 CHANGELOG/ 进入相邻版本继续追溯。【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

最新新闻

日新闻

周新闻

月新闻