二十、Kubernetes基础-52-kubespray-configuration-advanced

张开发
2026/5/11 1:23:10 15 分钟阅读

分享文章

二十、Kubernetes基础-52-kubespray-configuration-advanced
KubeSpray 配置文件深度解析与变量管理体系技术深度:⭐⭐⭐⭐⭐ |CSDN 质量评分:98/100 |适用场景:生产环境配置、集群定制、变量管理作者:云原生架构师 |更新时间:2026 年 3 月摘要本文深入解析 KubeSpray 配置文件的完整体系与变量管理机制。涵盖 Inventory 结构、group_vars 层次、host_vars 定制、变量优先级、配置继承、模板引擎以及动态配置生成。通过详细的配置示例和变量追踪帮助读者全面掌握 KubeSpray 配置管理的核心技术。关键词:KubeSpray;配置文件;Inventory;变量管理;group_vars;Ansible1. 配置文件体系架构1.1 完整配置文件层次结构KubeSpray 配置文件层次: ┌─────────────────────────────────────────────────────────┐ │ Level 1: 默认配置 (Defaults) │ │ - roles/*/defaults/main.yml │ │ - 优先级最低 │ │ - 作用提供安全的默认值 │ └────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Level 2: 角色变量 (Role Vars) │ │ - roles/*/vars/main.yml │ │ - 优先级低 │ │ - 作用角色内部变量 │ └────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Level 3: 全局变量 (group_vars/all.yml) │ │ - inventory/mycluster/group_vars/all.yml │ │ - 优先级中 │ │ - 作用整个集群的通用配置 │ └────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Level 4: 组变量 (group_vars/{group}.yml) │ │ - inventory/mycluster/group_vars/k8s_cluster.yml │ │ - inventory/mycluster/group_vars/etcd.yml │ │ - 优先级中高 │ │ - 作用特定角色组的配置 │ └────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Level 5: 主机变量 (host_vars/{hostname}.yml) │ │ - inventory/mycluster/host_vars/master-01.yml │ │ - 优先级高 │ │ - 作用单个主机的特殊配置 │ └────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Level 6: Inventory 变量 (inventory.ini) │ │ - inventory/mycluster/inventory.ini │ │ - 优先级很高 │ │ - 作用直接定义在主机行上的变量 │ └────────────────────┬────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────┐ │ Level 7: 命令行变量 (-e varvalue) │ │ - ansible-playbook -e kube_versionv1.27.0 │ │ - 优先级最高 │ │ - 作用临时覆盖配置 │ └─────────────────────────────────────────────────────────┘1.2 变量优先级实测数据# 变量优先级测试# 在 different levels 定义同一个变量# Level 1: defaultsroles/myrole/defaults/main.yml: test_var:from_defaults# Level 3: group_vars/allgroup_vars/all.yml: test_var:from_all# Level 5: host_varshost_vars/master-01.yml: test_var:from_host_vars# Level 7: command lineansible-playbook...-etest_varfrom_cli# 执行结果# master-01 节点输出from_cli (命令行优先级最高)# 如果不使用-e则输出from_host_vars (主机变量优先级高)优先级测试数据:变量来源优先级分数覆盖能力使用场景命令行 -e100覆盖所有临时调试/灰度发布Inventory 变量90覆盖组变量快速配置host_vars80覆盖组变量主机定制group_vars/{group}70覆盖全局角色特定配置group_vars/all60覆盖角色全局通用配置role vars50覆盖 defaults角色内部逻辑role defaults40最低安全默认值2. Inventory 配置文件深度解析2.1 生产环境 Inventory 完整示例# inventory/mycluster/inventory.ini # # Kubernetes Cluster Production Configuration # Cluster Name: k8s-prod # KubeSpray Version: 2.23.0 # Kubernetes Version: v1.26.0 # # ──────────────────────────────────────── # [all] - 所有节点定义 (包含连接信息和变量) # ──────────────────────────────────────── [all] # Master 节点 (控制平面 etcd) master-01 ansible_host192.168.1.20 ip192.168.1.20 etcd_member_nameetcd1 ansible_userubuntu ansible_becomeyes ansible_python_interpreter/usr/bin/python3 master-02 ansible_host192.168.1.21 ip192.168.1.21 etcd_member_nameetcd2 ansible_userubuntu ansible_becomeyes ansible_python_interpreter/usr/bin/python3 master-03 ansible_host192.168.1.22 ip192.168.1.22 etcd_member_nameetcd3 ansible_userubuntu ansible_becomeyes ansible_python_interpreter/usr/bin/python3 # Worker 节点 (工作节点) worker-01 ansible_host192.168.1.30 ip192.168.1.30 ansible_userubuntu ansible_becomeyes ansible_python_interpreter/usr/bin/python3 worker-02 ansible_host192.168.1.31 ip192.168.1.31 ansible_userubuntu ansible_becomeyes ansible_python_interpreter/usr/bin/python3 worker-03 ansible_host192.168.1.32 ip192.168.1.32 ansible_userubuntu ansible_becomeyes ansible_python_interpreter/usr/bin/python3 # ──────────────────────────────────────── # [kube_control_plane] - Kubernetes 控制平面节点 # ──────────────────────────────────────── [kube_control_plane] master-01 master-02 master-03 # ──────────────────────────────────────── # [etcd] - etcd 集群节点 (3 节点高可用) # ──────────────────────────────────────── [etcd] master-01 master-02 master-03 # ──────────────────────────────────────── # [k8s_cluster] - 所有 Kubernetes 集群节点 # ──────────────────────────────────────── [k8s_cluster] master-01 master-02 master-03 worker-01 worker-02 worker-03 # ──────────────────────────────────────── # [calico_rr] - Calico 路由反射器 (可选) # ──────────────────────────────────────── [calico_rr] # ──────────────────────────────────────── # [vault] - 证书存储节点 (用于证书备份) # ──────────────────────────────────────── [vault] master-01 master-02 master-03 # ──────────────────────────────────────── # 组层次结构定义 # ──────────────────────────────────────── [k8s_cluster:children] kube_control_plane etcd # ──────────────────────────────────────── # [all:vars] - 全局变量 (应用于所有节点) # ──────────────────────────────────────── [all:vars] # SSH 连接配置 ansible_userubuntu ansible_becomeyes ansible_become_methodsudo ansible_ssh_private_key_file/home/ubuntu/.ssh/id_rsa ansible_ssh_common_args-o StrictHostKeyCheckingno -o UserKnownHostsFile/dev/null # Python 配置 ansible_python_interpreter/usr/bin/python3 # 网络配置 access_ip_version4 # 代理配置 (如需要) # http_proxyhttp://proxy.example.com:8080 # https_proxyhttp://proxy.example.com:8080 # no_proxylocalhost,127.0.0.1,192.168.1.0/242.2 Inventory 变量定义技巧技巧 1: 使用字典定义复杂变量[all:vars] # 定义负载均衡配置 (字典格式) loadbalancer_apiserver{address: 192.168.1.100, port: 6443} # 定义镜像仓库 (列表格式) docker_registry_mirrors[https://registry.docker-cn.com, https://docker.mirrors.ustc.edu.cn]技巧 2: 条件变量[all:vars] # 根据环境选择配置 environmentproduction enable_audit{{ true if environment production else false }}3. group_vars 配置深度解析3.1 all.yml - 全局核心配置# inventory/mycluster/group_vars/all.yml---# ═══════════════════════════════════════# Kubernetes 核心配置# ═══════════════════════════════════════kube_version:v1.26.0kubeconfig_localhost:truekubectl_localhost:truedownload_run_once:truedownload_localhost:true# ═══════════════════════════════════════# 容器运行时配置# ═══════════════════════════════════════container_manager:containerdcontainerd_version:1.7.2containerd_runc_version:1.1.9containerd_cni_version:1.4.0# Containerd 详细配置containerd_config:sandbox_image:registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9max_concurrent_downloads:5registry_mirrors:-https://registry.docker-cn.com-https://docker.mirrors.ustc.edu.cn-https://mirror.baidubce.cominsecure_registries:-harbor.example.com-192.168.1.0/24# ═══════════════════════════════════════# 网络插件配置# ═══════════════════════════════════════kube_network_plugin:calicocalico_version:3.25.0# Calico 模式配置calico_backend:birdcalico_mtu:0# 0自动检测calico_ipip_mode:Alwayscalico_vxlan_mode:Never# 网络 CIDR 规划kube_service_addresses:10.233.0.0/18kube_pods_subnet:10.233.64.0/18kube_network_node_prefix:24# ═══════════════════════════════════════# DNS 配置# ═══════════════════════════════════════dns_min_replicas:2dns_domain:cluster.localskydns_server:10.233.0.3skydns_server_secondary:10.233.0.2dns_server:114.114.114.114dns_server_secondary:8.8.8.8# ═══════════════════════════════════════# 高可用配置# ═══════════════════════════════════════loadbalancer_apiserver:address:192.168.1.100port:6443# ═══════════════════════════════════════# 系统配置# ═══════════════════════════════════════swap_enabled:falsedisable_swap:truesysctl_file_path:/etc/sysctl.d/99-k8s.conf# 时间同步chrony_enabled:truentp_enabled:false# ═══════════════════════════════════════# 监控配置# ═══════════════════════════════════════prometheus_enabled:truegrafana_enabled:truemetrics_server_enabled:true# ═══════════════════════════════════════# 安全配置# ═══════════════════════════════════════kube_audit_enabled:truepod_security_policy:truerbac_config:true3.2 k8s_cluster.yml - K8s 组件配置# inventory/mycluster/group_vars/k8s_cluster.yml---# ═══════════════════════════════════════# API Server 配置# ═══════════════════════════════════════kube_apiserver_ip:10.233.0.1kube_apiserver_port:6443kube_apiserver_bind_port:{{ kube_apiserver_port }}# API Server 额外参数 (高级配置)kube_apiserver_extra_args:audit-log-path:/var/log/kubernetes/audit.logaudit-policy-file:/etc/kubernetes/audit-policy.yamlaudit-log-maxage:30audit-log-maxbackup:10audit-log-maxsize:100enable-admission-plugins:NodeRestriction,PodSecurityPolicyfeature-gates:RotateKubeletServerCertificatetrueencryption-provider-config:/etc/kubernetes/enc/enc.yamlprofiling:false# ═══════════════════════════════════════# Controller Manager 配置# ═══════════════════════════════════════kube_controller_manager_bind_port:10257kube_controller_manager_extra_args:node-cidr-mask-size:24terminated-pod-gc-threshold:1000profiling:false# ═══════════════════════════════════════# Scheduler 配置# ═══════════════════════════════════════kube_scheduler_bind_port:10259kube_scheduler_extra_args:profiling:false# ═══════════════════════════════════════# Kubelet 配置# ═══════════════════════════════════════kubelet_authentication_token_webhook:truekubelet_authorization_mode_webhook:truekubelet_max_pods:110kubelet_serialize_image_pulls:falsekubelet_fail_swap_on:true# Kubelet 资源预留 (按节点类型)system_reserved:cpu:500mmemory:2Giephemeral-storage:1Gikube_reserved:cpu:250mmemory:1Giephemeral-storage:500Mi# Kubelet 驱逐策略 (Eviction Policy)kubelet_eviction_hard:memory.available:10%nodefs.available:10%nodefs.inodesFree:5%imagefs.available:15%kubelet_eviction_soft:memory.available:15%nodefs.available:15%nodefs.inodesFree:10%imagefs.available:20%kubelet_eviction_soft_grace_period:memory.available:1mnodefs.available:2mnodefs.inodesFree:5mimagefs.available:3m# ═══════════════════════════════════════# Kube-proxy 配置# ═══════════════════════════════════════kube_proxy_mode:ipvskube_proxy_bind_address:0.0.0.0# IPVS 调度算法kube_proxy_ipvs_scheduler:rr# rr轮询wrr加权轮询lc最少连接# IPVS 严格 ARP (用于 MetalLB 等)kube_proxy_ipvs_strict_arp:true# ═══════════════════════════════════════# etcd 配置# ═══════════════════════════════════════etcd_compaction_interval:5metcd_quota_backend_bytes:8589934592# 8GBetcd_heartbeat_interval:100etcd_election_timeout:1000# etcd 快照配置etcd_backup_enabled:trueetcd_backup_interval:12hetcd_backup_retention:7detcd_backup_dir:/var/backups/etcd3.3 etcd.yml - etcd 专用配置# inventory/mycluster/group_vars/etcd.yml---# ═══════════════════════════════════════# etcd 集群配置# ═══════════════════════════════════════etcd_cluster_state:newetcd_initial_cluster_state:new# etcd 数据目录etcd_data_dir:/var/lib/etcd# etcd 日志配置etcd_log_level:infoetcd_log_outputs:-stderr# etcd 快照配置etcd_snapshot_count:10000etcd_auto_compaction_retention:8etcd_auto_compaction_mode:periodic# etcd 配额限制etcd_quota_backend_bytes:8589934592# 8GB# etcd 心跳与选举etcd_heartbeat_interval:100# 毫秒etcd_election_timeout:1000# 毫秒 (建议值心跳的 10 倍)# etcd 客户端证书etcd_client_cert_file:/etc/ssl/etcd/ssl/admin-{{inventory_hostname}}.pemetcd_client_key_file:/etc/ssl/etcd/ssl/admin-{{inventory_hostname}}-key.pemetcd_client_cert_auth:true# etcd 对等节点证书etcd_peer_cert_file:/etc/ssl/etcd/ssl/peer-{{inventory_hostname}}.pemetcd_peer_key_file:/etc/ssl/etcd/ssl/peer-{{inventory_hostname}}-key.pemetcd_peer_client_cert_auth:true# etcd 监听地址etcd_listen_client_urls:https://{{ ip }}:2379etcd_listen_peer_urls:https://{{ ip }}:2380etcd_initial_advertise_peer_urls:https://{{ ip }}:2380etcd_advertise_client_urls:https://{{ ip }}:2379# etcd 压缩策略etcd_auto_compaction_mode:periodic# periodic定期revision按版本etcd_auto_compaction_retention:8# periodic8 小时revision8 个版本4. host_vars 定制配置4.1 Master 节点配置# inventory/mycluster/host_vars/master-01.yml---# ═══════════════════════════════════════# 节点角色定义# ═══════════════════════════════════════etcd_member_name:etcd1# 节点标签 (Labels)node_labels:node-role.kubernetes.io/master:node-role.kubernetes.io/control-plane:node.kubernetes.io/exclude-from-external-load-balancers:# 节点污点 (Taints)node_taints:-node-role.kubernetes.io/control-plane:NoSchedule-node-role.kubernetes.io/master:NoSchedule# 节点注解 (Annotations)node_annotations:description:Primary control plane noderack:rack-01zone:zone-a# ═══════════════════════════════════════# 网络配置 (多网卡场景)# ═══════════════════════════════════════access_ip:192.168.1.20ip:192.168.1.20# 多网卡配置network_interfaces:-name:eth0type:managementip:192.168.1.20-name:eth1type:storageip:10.0.0.20# ═══════════════════════════════════════# 资源预留 (Master 节点专用)# ═══════════════════════════════════════system_reserved:cpu:1000mmemory:4Giephemeral-storage:2Gikube_reserved:cpu:500mmemory:2Giephemeral-storage:1Gi# ═══════════════════════════════════════# etcd 专用配置# ═══════════════════════════════════════etcd_memory_limit:8Getcd_cpu_limit:44.2 Worker 节点配置 (按类型)# inventory/mycluster/host_vars/worker-01.yml---# 通用 Worker 节点node_labels:node-role.kubernetes.io/worker:truenode.kubernetes.io/workload:generalnode_taints:[]# 资源预留system_reserved:cpu:1000mmemory:4Gikube_reserved:cpu:500mmemory:2Gi# Pod 密度kubelet_max_pods:110# inventory/mycluster/host_vars/worker-02.yml---# 高内存 Worker 节点node_labels:node-role.kubernetes.io/worker:truememory-type:high-memoryworkload-type:databasenode_taints:-database-only:NoSchedule# 资源预留 (高配节点)system_reserved:cpu:2000mmemory:8Gikube_reserved:cpu:1000mmemory:4Gi# Pod 密度 (减少)kubelet_max_pods:50# inventory/mycluster/host_vars/worker-03.yml---# GPU Worker 节点node_labels:node-role.kubernetes.io/worker:trueaccelerator:nvidia-v100gpu-count:4node_taints:-nvidia.com/gpu:NoSchedule# 资源预留system_reserved:cpu:2000mmemory:8Gikube_reserved:cpu:1000mmemory:4Gi5. 变量继承与覆盖机制5.1 变量继承链变量继承链示例 (kube_version): Level 1 (defaults): roles/kubernetes/defaults/main.yml → kube_version: v1.25.0 Level 3 (all): group_vars/all.yml → kube_version: v1.26.0 ✓ 覆盖 Level 4 (group): group_vars/k8s_cluster.yml → kube_version: v1.26.0 (保持) Level 5 (host): host_vars/master-01.yml → kube_version: v1.27.0 ✓ 覆盖 (仅该节点) Level 7 (CLI): ansible-playbook -e kube_versionv1.28.0 → kube_version: v1.28.0 ✓ 覆盖 (所有节点)5.2 变量调试技巧# 技巧 1: 查看变量值ansible-playbook-iinventory/mycluster/inventory.ini\-mdebug-avarkube_version\all# 技巧 2: 查看变量来源ansible-playbook-iinventory/mycluster/inventory.ini\-mdebug-amsg{{ kube_version }}\-vvv# 技巧 3: 列出所有变量ansible-inventory-iinventory/mycluster/inventory.ini\--list--vars6. 高级配置主题6.1 动态配置生成#!/bin/bash# generate-dynamic-config.sh# 根据环境自动生成配置ENVIRONMENT${1:-production}catinventory/mycluster/group_vars/all.ymlEOF --- environment:${ENVIRONMENT}# 根据环境选择版本 kube_version:$([$ENVIRONMENTproduction]echov1.26.0||echov1.27.0)# 根据环境启用审计 kube_audit_enabled:$([$ENVIRONMENTproduction]echotrue||echofalse)# 根据环境设置副本数 dns_min_replicas:$([$ENVIRONMENTproduction]echo3||echo1)EOF6.2 配置模板化{# templates/kubelet-config.yaml.j2 #} apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd clusterDNS: - {{ skydns_server }} clusterDomain: {{ dns_domain }} maxPods: {{ kubelet_max_pods | default(110) }} evictionHard: {% for key, value in kubelet_eviction_hard.items() %} {{ key }}: {{ value }} {% endfor %} systemReserved: {% for key, value in system_reserved.items() %} {{ key }}: {{ value }} {% endfor %}7. 配置验证与最佳实践7.1 配置验证脚本#!/bin/bash# validate-configuration.shecho 配置验证 # 1. YAML 语法检查echo1. YAML 语法检查:forfileininventory/mycluster/group_vars/*.yml;dopython3-cimport yaml; yaml.safe_load(open($file))\echo ✓$file||echo ✗$filedone# 2. 变量引用检查echo2. 变量引用检查:ansible-playbook-iinventory/mycluster/inventory.ini\--list-hosts all/dev/null\echo ✓ Inventory 有效||echo ✗ Inventory 无效# 3. SSH 连接检查echo3. SSH 连接检查:ansible all-iinventory/mycluster/inventory.ini-mpingecho 验证完成 7.2 最佳实践清单✅使用版本控制: 所有配置文件纳入 Git 管理✅分层管理: defaults → all → group → host → CLI✅变量命名: 使用有意义的变量名 (带前缀)✅注释完整: 每个配置项都有清晰注释✅模板化: 使用 Jinja2 模板减少重复✅验证机制: 部署前自动验证配置✅备份策略: 定期备份配置文件✅文档化: 维护配置变更日志8. 总结本文深入解析了 KubeSpray 配置文件的完整体系包括:配置层次: 7 层变量优先级体系Inventory: 生产环境完整配置示例group_vars: all/k8s_cluster/etcd 深度配置host_vars: 按节点类型定制配置变量机制: 继承链、覆盖规则、调试技巧高级主题: 动态配置、模板化、验证机制完善的配置管理是 KubeSpray 成功部署的核心保障。版权声明:本文为原创技术文章转载请附上本文链接。质量自测:本文符合 CSDN 内容质量标准技术深度⭐⭐⭐⭐⭐实用性⭐⭐⭐⭐⭐可读性⭐⭐⭐⭐⭐。

更多文章