Kubespray 部署前如何用 bootstrap_os 角色为裸机节点安装 Python 并准备 Ansible 执行环境? Kubespray 部署前如何用 bootstrap_os 角色为裸机节点安装 Python 并准备 Ansible 执行环境【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray在裸机上部署 Kubernetes 集群之前节点往往没有安装 PythonAnsible 无法在其上执行任何模块后续 Kubespray playbook 会直接失败。Kubespray 提供了bootstrap_os角色来解决这个问题它先配置包管理器、在节点上安装 Python、安装 Ansible 包管理模块所需的系统包并在需要时把主机名设置为 inventory 中的名字。完成这一步后这些裸机节点就具备了运行完整cluster.yml部署的前提。适用环境是 README.md 中列出的受支持发行版Debian Bookworm/Trixie、Ubuntu 22.04/24.04/26.04、CentOS Stream/RHEL 9/10、Fedora 39–42、openSUSE Leap 16.x/Tumbleweed、Alma Linux 9/10、Rocky Linux 9/10 等且控制机需要能通过 SSH 访问每个节点。准备条件一台运行 Ansible 的控制机Kubespray 目录所在位置。裸机节点运行受支持的 Linux 发行版控制机可 SSH 登录bootstrap-os 文档 将 SSH 访问列为必需项。按 docs/ansible/ansible.md 的建议把 Kubespray 使用的 Ansible 版本装进 Python 虚拟环境VENVDIRkubespray-venv KUBESPRAYDIRkubespray python3 -m venv $VENVDIR source $VENVDIR/bin/activate cd $KUBESPRAYDIR pip install -r requirements.txt如果pip install报错Could not find a version that satisfies the requirement ansible...说明控制机上的 Python 版本与 Kubespray 支持的 Ansible 版本不兼容。docs/ansible/ansible.md 给出的兼容关系为Ansible 版本Python 版本2.18.0, 2.19.03.11–3.13此外Kubespray 自带自定义模块位于library/目录需要设置环境变量让 Ansible 能找到它们export ANSIBLE_LIBRARYkubespray_dir/library创建 bootstrap playbookdocs/operating_systems/bootstrap-os.md 给出的示例 playbook 如下。注意必须关闭 fact gathering因为此时节点上可能还没有 Python无法运行事实收集模块- hosts: all gather_facts: false # not all hosts might be able to run modules yet roles: - kubespray_defaults - bootstrap_os保存为仓库根目录下的 playbook 文件如bootstrap.yml从 Kubespray 目录运行Ansible 才能按名称解析到roles/kubespray_defaults和roles/bootstrap_os两个角色。执行顺序说明kubespray_defaults先加载默认变量bootstrap_os随后完成节点侧初始化。roles/bootstrap_os/tasks/main.yml 的实际流程是先用raw方式读取节点的/etc/os-release这一步不依赖 Python按ID/VARIANT_ID匹配发行版对应的 vars 和 tasks 文件然后调用system_packages角色安装系统包创建~/.ansible/tmp目录权限 0700重新收集 facts最后按需设置主机名。配置需要调整的变量以下变量来自 roles/bootstrap_os/defaults/main.yml 和 bootstrap-os 文档按节点实际情况通过 inventory 的 group_vars、host_vars 或-e覆盖override_system_hostname: true默认值即 true角色会把机器主机名设置为 Ansible inventory 中的{{ inventory_hostname }}。如果不想让角色改动节点主机名将其设为false。http_proxy/https_proxy节点需要走代理下载软件包时设置角色会把代理写入包管理器配置。以 Debian/Ubuntu 为例roles/bootstrap_os/tasks/debian.yml 会先检查/etc/apt/apt.conf中是否已有代理配置没有才追加Acquire::http::proxy/Acquire::https::proxy条目。centos_fastestmirror_enabled: false是否启用 CentOS 系 yum 的 fastestmirror 插件。coreos_locksmithd_disable: falseFlatcar 上是否禁用负责滚动重启的locksmithd。执行 bootstrap在 Kubespray 目录下已激活 venv 并设置ANSIBLE_LIBRARY运行ansible-playbook -i 你的inventory文件 bootstrap.yml角色内部的关键行为以发行版为例说明具体任务见 roles/bootstrap_os/tasks/debian.ymlDebian 系发行版默认不带 Python角色先用raw: which python3探测节点上是否已有 Python仅在没有时才执行apt-get update DEBIAN_FRONTENDnoninteractive apt-get install -y python3-minimal。包安装任务roles/system_packages/tasks/main.yml按发行版对应的变量清单安装 Python 之外的系统包带重试机制retries: pkg_install_retries。主机名设置在override_system_hostname为真时执行Flatcar、Fedora CoreOS、SUSE、ClearLinux 等发行版除外。验证结果角色判断节点是否具备 Python 的方式是raw: which python3探测任务不依赖节点侧 Python。因此 bootstrap 成功后可以在任一节点上确认ssh 节点地址 which python3能返回 Python 路径即说明节点已具备运行 Ansible 模块的条件。若启用了override_system_hostname: true同时可以用hostname确认节点主机名已被设置为 inventory 中的名称。常见问题与限制控制机报 Ansible 版本找不到No matching distribution found不是网络问题而是控制机 Python 版本过低或过高按上文兼容表调整控制机 Python 版本后重装。版本不对齐的其他来源Ansible collections 或 Python 依赖版本错误同样会导致问题必要时使用 docs/ansible/ansible.md 中给出的 Kubespray 官方 Docker 镜像quay.io/kubespray/kubespray并配合 bind mount 挂载 inventory 与 SSH key 运行确保工具链版本正确。需要代理的节点务必通过 inventory 变量传入http_proxy/https_proxy不要手动在每个节点改配置否则角色写入的代理规则可能与你的设置不一致。后续用--tags/--skip-tags过滤任务时例如跳过 bootstrap_os文档明确提醒只有在完全清楚后果时再使用这两个参数。验证通过后节点侧的 Python 与包管理环境已就绪可以进入 Kubespray 的正常部署流程执行cluster.yml。【免费下载链接】kubesprayDeploy a Production Ready Kubernetes Cluster项目地址: https://gitcode.com/GitHub_Trending/ku/kubespray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考