拓冰建站拓冰建站
首页 / 资讯中心 / 正文

kubeasz 3.6.6 版本解读:支持 Kubernetes v1.32、containerd 2.0 大版本升级与集群安装逻辑优化

kubeasz 3.6.6 版本解读支持 Kubernetes v1.32、containerd 2.0 大版本升级与集群安装逻辑优化【免费下载链接】kubeasz使用Ansible脚本安装K8S集群介绍组件交互原理方便直接不受国内网络环境影响项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz导读kubeasz 3.6.6 是 kubeasz 开源项目在 Kubernetes 1.32 时代的一个重要版本核心工作围绕三件事展开组件版本整体升级k8s v1.32.3、etcd v3.5.20、containerd 2.0.4、runc v1.2.6 等、国内镜像加速体系重构同步修复 ezdown 下载与 containerd/docker 双运行时的镜像拉取问题以及集群安装逻辑优化新增节点不再重复执行网络插件安装避免业务 Pod 被意外重启。本文以 kubeasz-3.6.6.md 为骨架结合仓库内 roles 与 playbooks 的源码实现逐条拆解本次版本的更新细节与落地影响帮助读者在升级或重装集群时做出准确的版本与配置决策。版本更新一览kubeasz 3.6.6 将核心组件全部推进到一个相对稳定的版本组合具体如下组件版本说明k8sv1.32.3Kubernetes 控制面与节点组件版本etcdv3.5.20集群状态存储containerd2.0.4容器运行时从 1.7.x 跨大版本升级runcv1.2.6底层容器运行时从 1.1.x 跨大版本升级calicov3.28.3默认网络插件之一coredns1.11.4集群 DNScniv1.6.2CNI 插件二进制集合harborv2.12.2私有镜像仓库这些版本号直接体现在 example/config.yml 的K8S_VER、SANDBOX_IMAGE、calico_ver、corednsVer、HARBOR_VER等变量中ezdown 脚本会根据这些变量下载对应的二进制与离线镜像包。国内镜像加速设置全面更新ezdown 与运行时配置同步修复本次版本的一个关键修复是更新国内 docker 镜像仓库加速设置解决 ezdown 脚本无法下载镜像问题并同步更新了 containerd 的镜像仓库加速设置。这一改动涉及两个层面ezdown 侧脚本下载镜像所用的国内加速仓库地址更新解决此前加速地址失效导致离线包无法下载的问题运行时侧安装集群时写入各节点容器运行时containerd/docker的镜像加速配置保证集群运行期拉取镜像同样走加速通道。docker 运行时的加速配置当CONTAINER_RUNTIME docker时kubeasz 通过 roles/docker/templates/daemon.json.j2 渲染 Docker daemon 配置其中registry-mirrors与 3.6.6 更新的加速仓库列表保持一致{ registry-mirrors: [ https://docker.1ms.run, https://hub1.nat.tf, https://docker.1panel.live, https://hub.rat.dev, https://docker.amingg.com ] }该模板由 roles/docker/tasks/main.yml 渲染到/etc/docker/daemon.json并且只在ENABLE_MIRROR_REGISTRY|bool为 true 时写入见 example/config.yml 中ENABLE_MIRROR_REGISTRY: true的默认值。containerd 2.0 的镜像加速机制hosts.tomlcontainerd 2.0 不再支持 Docker 风格的registry-mirrors配置而是采用registry hosts 目录机制在config.toml中通过config_path指向certs.d目录目录下按域名存放hosts.toml文件。kubeasz 3.6.6 的 roles/containerd/templates/config.toml.j2 中对应配置为[plugins.io.containerd.cri.v1.images.registry] config_path {{ CONTAINERD_CONFIG_DIR }}/certs.d其中CONTAINERD_CONFIG_DIR默认值为/etc/containerd见 example/config.yml。针对docker.io的加速配置由 roles/containerd/templates/docker.io/hosts.toml.j2 生成内容为server https://docker.io [host.https://docker.1ms.run] capabilities [pull, resolve] [host.https://hub1.nat.tf] capabilities [pull, resolve] [host.https://docker.1panel.live] capabilities [pull, resolve] [host.https://hub.rat.dev] capabilities [pull, resolve] [host.https://docker.amingg.com] capabilities [pull, resolve]该文件由 roles/containerd/tasks/main.yml 中的任务配置docker.io 加速镜像在ENABLE_MIRROR_REGISTRY|bool为真时写入/etc/containerd/certs.d/docker.io/hosts.toml。需要说明的是模板中注释提示加速仓库列表是动态变化的可在相关状态页查看当前可用仓库这意味着后续若加速地址失效只需更新模板中的 host 列表重新执行安装即可无需改动整体架构。私有仓库insecure registry的信任配置除了公网加速3.6.6 的 containerd 任务还完整支持私有仓库信任。安装时会根据INSECURE_REG列表为每个仓库生成 hosts.toml相关逻辑在 roles/containerd/tasks/main.yml 的准备INSECURE REGISTRY 目录与配置信任 INSECURE REGISTRY 仓库两个任务中模板为 roles/containerd/templates/hosts.toml.j2server {{ item }} [host.{{ item }}] capabilities [pull, resolve] skip_verify trueskip_verify true表示对该地址跳过 TLS 证书校验适用于自签证书的私有仓库。默认配置中的示例见 example/config.ymlINSECURE_REG: - http://easzlab.io.local:5000 - https://reg.yourcompany.com对 Harbor 私有仓库kubeasz 还会生成带 Basic Auth 认证头的 hosts.toml见 roles/containerd/templates/HARBOR_REGISTRY/hosts.toml.j2模板中保留了echo -n username:password | base64生成Authorization头的注释说明实际部署前需要替换为真实凭据。containerd 大版本升级1.7.x → 2.0.x 与 runc 1.1.x → 1.2.x本次版本最重大的组件变更是将 containerd 从 1.7.x 跨大版本升级到 2.0.4runc 从 1.1.x 升级到 1.2.6同时更新了主要配置文件。配置文件迁移要点containerd 2.0 对 CRI 插件的配置结构做了重要调整1.x 时代以io.containerd.grpc.v1.cri为根配置段2.0 则拆分为io.containerd.cri.v1.images镜像/注册表相关与io.containerd.cri.v1.runtime运行时相关两个独立插件段。从 roles/containerd/templates/config.toml.j2 可以看到 kubeasz 已完整适配新版结构[plugins.io.containerd.cri.v1.images] snapshotter overlayfs ... [plugins.io.containerd.cri.v1.images.pinned_images] sandbox {{ SANDBOX_IMAGE }} [plugins.io.containerd.cri.v1.images.registry] config_path {{ CONTAINERD_CONFIG_DIR }}/certs.d [plugins.io.containerd.cri.v1.runtime] ... [plugins.io.containerd.cri.v1.runtime.containerd] default_runtime_name runc [plugins.io.containerd.cri.v1.runtime.containerd.runtimes.runc] runtime_type io.containerd.runc.v2 ... [plugins.io.containerd.cri.v1.runtime.containerd.runtimes.runc.options] SystemdCgroup true几个值得注意的配置项snapshotter overlayfs镜像层存储驱动sandbox {{ SANDBOX_IMAGE }}pause 基础镜像默认来自easzlab.io.local:5000/easzlab/pause对应 example/config.yml 中的SANDBOX_IMAGESystemdCgroup truerunc 使用 systemd cgroup 驱动这是与 kubelet 配置CGROUP_DRIVER对齐的关键max_container_log_line_size 16384单行日志最大长度enable_unprivileged_ports true/enable_unprivileged_icmp true允许非特权容器绑定低端口与使用 ICMP是 containerd 2.0 较新版本引入的能力。每次安装都会重建 containerd 的安装逻辑版本说明中明确每次执行脚本 containerd 都会被重新安装不管原先是否已经运行。这一点在 roles/containerd/tasks/main.yml 中体现得非常直接- name: 下载 containerd 二进制文件 copy: src{{ item }} dest{{ bin_dir }}/containerd-bin/ mode0755 with_fileglob: - {{ base_dir }}/bin/containerd-bin/* tags: upgrade - name: 创建 containerd 配置文件 template: srcconfig.toml.j2 dest{{ CONTAINERD_CONFIG_DIR }}/config.toml tags: upgrade - name: 创建systemd unit文件 template: srccontainerd.service.j2 dest/etc/systemd/system/{{ CONTAINERD_SERVICE_NAME }} tags: upgrade - name: 开启 containerd 服务 shell: systemctl daemon-reload systemctl restart {{ CONTAINERD_SERVICE_NAME }} tags: upgrade - name: 轮询等待containerd服务运行 shell: systemctl is-active {{ CONTAINERD_SERVICE_NAME }} register: containerd_status until: active in containerd_status.stdout retries: 8 delay: 2 tags: upgrade这些任务没有when条件判断因此无论节点上是否已存在旧版 containerd都会重新拷贝二进制、重写config.toml与 systemd unit 文件然后daemon-reload restart并轮询等待服务恢复 active重试 8 次、每次间隔 2 秒。这意味着升级时无需手动卸载旧版本重新执行即可完成 containerd 2.0 的切换由于是重启而非仅启动运行中的容器会被重建生产环境升级前应规划好业务中断窗口。runc 1.2.x 与 CRI 兼容runc 升级到 1.2.x 后配置模板中仍使用runtime_type io.containerd.runc.v2的 shim v2 接口kubeasz 通过 containerd 的 runtimes 段统一管理无需在 kubelet 侧做额外配置降低了用户在大版本切换时的适配成本。集群安装逻辑优化新增节点不再重复执行网络插件安装3.6.6 的第二个重要安装逻辑变更由社区贡献者 gogeof 提交新增节点不再重复执行网络插件安装避免部分网络插件自动重启业务 pod。问题背景在旧逻辑中向已有集群添加新节点ezctl add-node时会在新节点上重新完整执行网络插件角色。而 calico、cilium 等网络插件的任务中通常包含针对整个集群的操作例如重建 DaemonSet、删除并重建 Secret 等这会导致已运行节点的网络组件被重启进而连带重启节点上的业务 Pod。以 roles/calico/tasks/main.yml 为例其中包含这类集群级操作- name: 删除旧 calico-etcd-secrets shell: {{ base_dir }}/bin/kubectl -n kube-system delete secrets calico-etcd-secrets || echo NotFound - name: 创建 calico-etcd-secrets shell: cd {{ cluster_dir }}/ssl \ {{ base_dir }}/bin/kubectl create secret generic -n kube-system calico-etcd-secrets \ --from-fileetcd-caca.pem \ --from-fileetcd-keycalico-key.pem \ --from-fileetcd-certcalico.pem - name: 配置 calico DaemonSet yaml文件 template: srccalico-{{ calico_ver_main }}.yaml.j2 dest{{ cluster_dir }}/yml/calico.yaml - name: 运行 calico网络 shell: {{ base_dir }}/bin/kubectl apply -f {{ cluster_dir }}/yml/calico.yaml上述任务使用run_once: true且connection: local在部署机上执行 kubectl一旦在 add-node 流程中被重复触发kubectl apply会更新整个集群的 calico DaemonSet触发所有节点网络组件滚动重启。3.6.6 的改进网络插件角色从 addnode 流程中移除对比 playbooks/22.addnode.yml 可以看到新版本中新增节点流程只保留节点侧的角色- hosts: {{ NODE_TO_ADD }} roles: - { role: os-harden, when: OS_HARDEN|bool } - { role: chrony, when: groups[chrony]|length 0 } - prepare - { role: docker, when: CONTAINER_RUNTIME docker } - { role: containerd, when: CONTAINER_RUNTIME containerd } - kube-lb - kube-node网络插件角色calico/cilium/flannel/kube-router已不再出现在 add-node 流程中。新节点加入后kubelet 会通过已有的/etc/cni/net.d配置roles/kube-node/tasks/main.yml 中生成的10-default.conf直接接入现有集群网络DaemonSet 形式的网络组件会自动调度到新节点上无需在 add-node 时手动重装。这一调整带来的收益是扩容操作对存量业务的干扰降到最低集群在线扩容的安全性显著提升。ezctl 脚本优化从 ezdown 加载变量方式重构3.6.6 还优化了ezctl脚本从ezdown加载变量的方式由贡献者 RadPaperDinosaur 提交。此前 ezctl 与 ezdown 之间通过各自维护的变量副本保持同步容易因版本不一致导致参数错位新版本改为统一从 ezdown 加载变量避免两处定义漂移减少了手工维护成本。对于使用者来说这一改动是透明的ezctl的安装、添加节点、卸载等日常命令用法不变但底层变量来源更统一降低了因脚本版本不匹配引发的安装失败概率。网络服务 IP 生成规则修复版本说明中的第三个修复项为修复CLUSTER_DNS_SVC_IPCLUSTER_KUBERNETES_SVC_IP地址生成规则由贡献者 yunpiao 提交。这两个变量是集群内部的约定地址与证书、Service 紧密相关CLUSTER_KUBERNETES_SVC_IPKubernetes Servicekubernetes.default的 ClusterIP必须写入 apiserver 证书的 SAN见 roles/kube-master/templates/kubernetes-csr.json.j2CLUSTER_DNS_SVC_IPkube-dns/coredns Service 的 ClusterIP写入 roles/cluster-addon/templates/dns/coredns.yaml.j2 等 DNS 清单并被 roles/cluster-addon/templates/dns/nodelocaldns-ipvs.yaml.j2 用作上游转发地址。两个变量的生成规则分别位于 roles/kube-master/vars/main.yml 与 roles/cluster-addon/vars/main.yml# roles/kube-master/vars/main.yml CLUSTER_KUBERNETES_SVC_IP: {{ SERVICE_CIDR.split(.)[0] }}.{{ SERVICE_CIDR.split(.)[1] }}.{{ SERVICE_CIDR.split(.)[2] }}.{{ SERVICE_CIDR.split(.)[3]|regex_replace(/.*, )|int 1 }} # roles/cluster-addon/vars/main.yml CLUSTER_DNS_SVC_IP: {{ SERVICE_CIDR.split(.)[0] }}.{{ SERVICE_CIDR.split(.)[1] }}.{{ SERVICE_CIDR.split(.)[2] }}.{{ SERVICE_CIDR.split(.)[3]|regex_replace(/.*, )|int 2 }}即在SERVICE_CIDR网段内x.x.x.1预留给 Kubernetes Servicex.x.x.2预留给集群 DNS。修复的核心在于对SERVICE_CIDR掩码部分的解析通过regex_replace(/.*, )先剥离/xx掩码再取第四段并做整数加法。旧规则的边界缺陷主要体现在掩码解析与加法运算的处理上修复后能保证在类似10.68.0.0/16、172.21.0.0/16等常见 Service CIDR 配置下生成正确的保留地址。在实际使用中这两个地址必须与 apiserver 证书、coredns Service、kubelet 配置中的clusterDNS保持一致因此本次修复对证书校验、DNS 解析等环节都有直接影响。其他变更conformance 文档更新kubeasz 维护的 docs/mixes/conformance.md 同步更新用于记录集群通过 Kubernetes 一致性测试Conformance Test的验证情况为生产环境落地提供参照。升级与使用建议结合 3.6.6 的版本特性给出以下实操建议升级前备份跨大版本升级 containerd 会触发运行时重启建议先参考 docs/op/upgrade.md 规划维护窗口并使用 playbooks/94.backup.yml 备份 etcd 数据确认加速仓库可用性本次更新了国内加速仓库列表若后续镜像拉取变慢或失败检查certs.d/docker.io/hosts.toml中的 host 列表是否仍然有效扩容场景3.6.6 起新增节点ezctl add-node不会重装网络插件扩容动作对存量业务的影响已最小化可放心使用 playbooks/22.addnode.yml 对应的 ezctl 流程校验 Service CIDR 相关地址安装前确认SERVICE_CIDR配置正确x.x.x.1/x.x.x.2两个保留地址的生成规则已在 3.6.6 修复升级集群时建议同步检查证书 SAN 与 coredns 配置的一致性。总结kubeasz 3.6.6 是一个版本就绪 体验优化型版本通过 k8s v1.32.3 与 containerd 2.0.x/runc 1.2.x 的大版本组合让新集群开箱即用新版组件通过国内镜像加速仓库的更新与 containerdcerts.d/hosts.toml机制的适配缓解了国内网络环境下的镜像拉取难题通过调整 add-node 流程与 ezctl 变量加载逻辑降低了集群扩容和日常维护的操作风险。对于计划升级到 Kubernetes 1.32 或排查镜像拉取问题的用户本版本是一个值得跟进的重要里程碑。【免费下载链接】kubeasz使用Ansible脚本安装K8S集群介绍组件交互原理方便直接不受国内网络环境影响项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门