Kubespray项目中的Ansible使用指南
kubespray 项目地址: https://gitcode.com/gh_mirrors/kub/kubespray
前言
Kubespray是一个基于Ansible的Kubernetes部署工具,它通过Ansible playbook实现了Kubernetes集群的自动化部署和管理。本文将详细介绍在Kubespray项目中如何正确使用Ansible,包括环境准备、Inventory配置、变量优先级以及常用操作等核心内容。
Ansible环境准备
安装推荐方式
Kubespray支持多个Ansible版本,建议使用Python虚拟环境来隔离Ansible环境:
# 创建虚拟环境
VENVDIR=kubespray-venv
KUBESPRAYDIR=kubespray
python3 -m venv $VENVDIR
source $VENVDIR/bin/activate
# 安装依赖
cd $KUBESPRAYDIR
pip install -U -r requirements.txt
Python版本兼容性
Kubespray对Ansible和Python版本有特定要求,以下是主要兼容性对照表:
| Ansible版本 | Python版本要求 | |------------|--------------| | ≥ 2.15.5 | 3.9-3.11 |
如果安装时出现版本不兼容错误,请检查Python版本是否符合要求。
Inventory配置详解
Inventory是Ansible管理的主机清单,在Kubespray中有特定的分组规则:
核心分组
- kube_node:运行Pod的工作节点
- kube_control_plane:运行控制平面组件(API Server等)的节点
- etcd:组成etcd集群的节点(建议至少3个保证高可用)
分组关系注意事项
- 不要随意修改
k8s_cluster
的子组关系 - 如果希望节点同时承担控制平面和工作节点角色,需同时加入
kube_control_plane
和kube_node
组 - 如需独立不调度的工作节点,只需加入
kube_control_plane
组
完整Inventory示例
node1 ansible_host=95.54.0.12 ip=10.3.0.1
node2 ansible_host=95.54.0.13 ip=10.3.0.2
node3 ansible_host=95.54.0.14 ip=10.3.0.3
[kube_control_plane]
node1
node2
[etcd]
node1
node2
node3
[kube_node]
node2
node3
[k8s_cluster:children]
kube_node
kube_control_plane
变量优先级与覆盖
Kubespray中变量定义有明确的优先级规则:
| 变量来源 | 说明 | |---------|------| | role默认值 | 最佳覆盖方式 | | inventory group_vars | 推荐在all.yml
、k8s_cluster.yml
中覆盖 | | 主机facts | Kubespray内部使用的状态标志 | | role和include变量 | 不推荐直接覆盖 | | 额外变量(-e) | 最高优先级,总是生效 |
常用Ansible标签
Kubespray定义了丰富的Ansible标签,用于精确控制执行流程:
核心组件标签
etcd
:etcd集群配置kube-apiserver
:API Server配置kubelet
:Kubelet服务配置network
:网络插件配置
网络插件标签
calico
:Calico网络插件flannel
:Flannel网络插件cilium
:Cilium网络插件
运行时标签
docker
:Docker容器运行时containerd
:Containerd运行时crio
:CRI-O运行时
完整标签列表可通过scripts/gen_tags.sh
脚本生成。
实用命令示例
仅执行DNS配置
ansible-playbook -i inventory/sample/hosts.ini cluster.yml \
--tags preinstall,facts \
--skip-tags=download,bootstrap-os
准备本地容器镜像
ansible-playbook -i inventory/sample/hosts.ini cluster.yml \
-e download_run_once=true \
-e download_localhost=true \
--tags download \
--skip-tags upload,upgrade
通过堡垒机访问
对于私有网络中的节点,可通过堡垒机进行访问:
[bastion]
bastion ansible_host=x.x.x.x
配置后,Ansible将通过堡垒机连接到内网节点执行操作。
注意事项
- 使用标签(--tags/--skip-tags)时需明确知道其影响范围
- Mitogen支持已被弃用,不建议使用
- Ansible 2.9后项目结构有变化,但Kubespray已做适配
通过本文介绍,您应该已经掌握了在Kubespray项目中有效使用Ansible的核心要点。合理利用这些知识,可以更灵活地部署和管理Kubernetes集群。
kubespray 项目地址: https://gitcode.com/gh_mirrors/kub/kubespray
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考