Kubespray 核心变量配置详解
前言
Kubespray 是一个基于 Ansible 的 Kubernetes 集群部署工具,它通过大量的变量配置来实现集群部署的灵活性和可定制性。本文将深入解析 Kubespray 中的关键配置变量,帮助用户理解如何根据实际需求调整集群部署参数。
基础配置变量
通用 Ansible 变量
Kubespray 基于 Ansible 实现,因此支持所有标准的 Ansible 变量:
ansible_user
:用于 SSH 连接的用户名ansible_default_ipv4.address
:Ansible 自动选择的主机 IP 地址,基于ip -4 route get 8.8.8.8
命令输出生成
组件版本控制
Kubespray 允许精确控制各个核心组件的版本:
calico_version: "v3.24.1" # Calico 网络插件版本
calico_cni_version: "v3.24.1" # Calico CNI 插件版本
docker_version: "20.10" # Docker 版本(需为字符串)
containerd_version: "1.6.8" # containerd 运行时版本
etcd_version: "v3.5.4" # etcd 分布式存储版本
kube_version: "v1.25.5" # Kubernetes 版本
网络配置详解
网络插件配置
Kubespray 默认使用 Calico 作为网络插件,支持多种封装模式:
kube_network_plugin: calico # 可选值:calico、flannel、weave等
calico_ipip_mode: Never # IPIP 封装模式:Never/Always/CrossSubnet
calico_vxlan_mode: Always # VXLAN 封装模式:Never/Always/CrossSubnet
calico_network_backend: vxlan # 网络后端:none/bird/vxlan
kube_proxy_mode: ipvs # 代理模式:iptables/ipvs/nftables
IP 地址配置
Kubespray 支持多种 IP 地址配置方式,适用于复杂网络环境:
ip: 192.168.1.100 # 服务绑定IP(通常为公网IP)
access_ip: 10.0.0.100 # 其他节点访问本节点的IP(通常为内网IP)
ip6: 2001:db8::1 # IPv6服务绑定IP
access_ip6: fd00::1 # IPv6内部访问IP
当 ip
和 access_ip
未定义时,将自动使用 ansible_default_ipv4.address
。
集群核心参数
基础集群配置
cluster_name: my-cluster # 集群名称(默认cluster.local)
container_manager: containerd # 容器运行时:containerd/docker/crio
dns_domain: cluster.local # 集群DNS域名
网络地址规划
kube_service_addresses: 10.233.0.0/18 # Service CIDR
kube_pods_subnet: 10.233.64.0/18 # Pod CIDR
kube_network_node_prefix: 24 # 每个节点的Pod子网前缀长度
重要提示:Service CIDR 和 Pod CIDR 不能重叠!
双栈网络配置
Kubespray 支持 IPv4/IPv6 双栈网络:
ipv4_stack: true # 启用IPv4(默认true)
ipv6_stack: false # 启用IPv6(默认false)
双栈模式下,IPv4 具有更高优先级。也可以配置纯 IPv6 集群。
高级功能配置
特性门控
Kubernetes 的 alpha/experimental 功能可通过特性门控启用:
kube_feature_gates:
- "RotateKubeletServerCertificate=true"
- "TTLAfterFinished=true"
可以针对不同组件单独配置:
kube_apiserver_feature_gates:
- "ServiceAccountIssuerDiscovery=true"
kubelet_feature_gates:
- "DevicePlugins=true"
认证授权配置
authorization_modes: ["Node", "RBAC"] # 默认启用Node和RBAC
准入控制
可以配置 EventRateLimit 等准入控制器:
kube_apiserver_admission_event_rate_limits:
limit_1:
type: Namespace
qps: 50
burst: 100
cache_size: 2000
系统优化配置
Kubelet 调优
kubelet_rotate_certificates: true # 自动轮换客户端证书
kubelet_rotate_server_certificates: true # 自动轮换服务端证书
kubelet_image_gc_high_threshold: 85 # 镜像垃圾回收高水位线
kubelet_image_gc_low_threshold: 80 # 镜像垃圾回收低水位线
kubelet_max_parallel_image_pulls: 5 # 并行拉取镜像数
CPU 和 NUMA 管理
kubelet_cpu_manager_policy: static # CPU管理策略
kubelet_topology_manager_policy: single-numa-node # NUMA拓扑策略
kubelet_topology_manager_scope: pod # 资源对齐范围
安全加固
系统级安全
kubelet_systemd_hardening: true # 启用systemd安全加固
preinstall_selinux_state: enforcing # SELinux模式:permissive/enforcing/disabled
网络代理配置
http_proxy: "http://proxy.example.com:8080"
https_proxy: "https://proxy.example.com:8080"
no_proxy: "localhost,127.0.0.1,.cluster.local"
最佳实践建议
- 版本控制:生产环境应明确指定所有关键组件版本
- 网络规划:提前规划好Service和Pod的CIDR,避免与现有网络冲突
- 资源预留:为系统组件预留足够的CPU和内存资源
- 安全配置:生产环境应启用RBAC和网络策略
- 监控考量:根据集群规模调整监控组件资源配置
通过合理配置这些变量,Kubespray 可以满足从开发测试到生产环境的各种 Kubernetes 集群部署需求。建议在正式部署前,先在测试环境中验证配置方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考