当前位置: 首页 > news >正文

别再手动敲命令了!用RKE一键部署Kubernetes高可用集群(附完整YAML配置)

告别手动部署:RKE自动化构建Kubernetes高可用集群实战指南

为什么选择RKE进行Kubernetes集群部署?

在云原生技术快速发展的今天,Kubernetes已经成为容器编排的事实标准。然而,传统的手动部署Kubernetes集群方式存在诸多痛点:

  • 配置复杂:需要手动配置etcd、kube-apiserver、kube-controller-manager等多个组件
  • 易出错:人工操作容易遗漏关键配置项,导致集群不稳定
  • 维护困难:升级和扩展集群时需要重复大量手动操作
  • 一致性差:不同环境部署的集群配置难以保持一致

RKE(Rancher Kubernetes Engine)作为一款轻量级的Kubernetes安装工具,通过声明式配置文件解决了这些问题。它能够:

  1. 快速部署生产级Kubernetes集群
  2. 确保集群配置的一致性和可重复性
  3. 简化集群的维护和升级流程
  4. 提供灵活的插件系统扩展集群功能

RKE核心架构解析

RKE工作原理

RKE采用"基础设施即代码"的理念,通过YAML配置文件定义整个Kubernetes集群的拓扑结构和组件配置。其核心工作流程包括:

  1. 节点发现与验证:通过SSH连接到目标节点,验证Docker环境
  2. 组件部署:根据配置部署Kubernetes各组件容器
  3. 证书生成:自动创建集群所需的TLS证书
  4. 网络配置:安装选择的CNI插件(默认Canal)
  5. 附加组件:按需部署Ingress Controller、Metrics Server等

关键配置文件解析

RKE的核心是cluster.yml配置文件,主要包含以下关键部分:

nodes: - address: 192.168.1.101 # 节点IP user: rke-user # SSH用户名 role: # 节点角色 - controlplane - etcd - worker services: etcd: snapshot: true # 启用etcd快照 retention: 7d # 快照保留7天 kube-api: service_cluster_ip_range: 10.43.0.0/16 kube-controller: cluster_cidr: 10.42.0.0/16 kubelet: fail_swap_on: false # 不强制禁用swap network: plugin: canal # 网络插件选择 options: canal_flannel_backend_type: "vxlan"

实战:使用RKE部署生产级Kubernetes集群

环境准备

硬件要求

节点类型CPU内存磁盘数量
Control Plane2核4GB50GB3
Worker4核8GB100GB2+

软件要求

  • 操作系统:CentOS 7.7+/Ubuntu 18.04+
  • Docker:18.09.x/19.03.x/20.10.x
  • SSH访问:所有节点间SSH互通
  • 时间同步:确保所有节点时间一致

基础环境配置

  1. 禁用Swap(所有节点执行):

    swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  2. 内核参数调优

    cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system
  3. 加载内核模块

    modprobe br_netfilter modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe nf_conntrack_ipv4

RKE安装与配置

  1. 下载RKE二进制文件

    wget https://github.com/rancher/rke/releases/download/v1.3.2/rke_linux-amd64 chmod +x rke_linux-amd64 mv rke_linux-amd64 /usr/local/bin/rke
  2. 创建cluster.yml配置文件

    nodes: - address: 192.168.1.101 user: rke-user role: [controlplane, etcd, worker] ssh_key_path: ~/.ssh/id_rsa - address: 192.168.1.102 user: rke-user role: [controlplane, etcd, worker] - address: 192.168.1.103 user: rke-user role: [controlplane, etcd, worker] services: etcd: snapshot: true retention: 168h # 7天 creation: 24h # 每天创建快照 kube-api: service_cluster_ip_range: 10.43.0.0/16 extra_args: audit-log-path: /var/log/kube-audit/audit.log audit-log-maxage: "30" audit-log-maxbackup: "10" audit-log-maxsize: "100" kube-controller: cluster_cidr: 10.42.0.0/16 service_cluster_ip_range: 10.43.0.0/16 kubelet: fail_swap_on: false extra_args: max-pods: "250"
  3. 部署集群

    rke up --config cluster.yml

    成功部署后会生成:

    • kube_config_cluster.yml:kubectl配置文件
    • cluster.rkestate:集群状态文件

集群验证

  1. 检查节点状态

    kubectl --kubeconfig kube_config_cluster.yml get nodes

    预期输出:

    NAME STATUS ROLES AGE VERSION 192.168.1.101 Ready controlplane,etcd 5m v1.20.6 192.168.1.102 Ready controlplane,etcd 5m v1.20.6 192.168.1.103 Ready controlplane,etcd 5m v1.20.6
  2. 检查系统Pod状态

    kubectl --kubeconfig kube_config_cluster.yml get pods -A

    关键Pod应全部为Running状态:

    • coredns
    • canal/flannel
    • ingress-nginx
    • metrics-server

高级配置与优化

网络插件选择与调优

RKE支持多种CNI网络插件,默认使用Canal(Flannel + Calico策略):

network: plugin: canal options: canal_flannel_backend_type: "vxlan" # 或 "host-gw" canal_iface: "eth1" # 指定网络接口 mtu: 1450 # 根据网络环境调整

不同后端类型比较

类型性能跨子网配置复杂度
VXLAN支持
Host-GW不支持
IPsec支持

存储配置

  1. 配置本地存储类

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
  2. 配置NFS存储类

    helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=192.168.1.200 \ --set nfs.path=/data/nfs

监控与日志

  1. 部署Prometheus Stack

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install kube-prometheus prometheus-community/kube-prometheus-stack
  2. 配置集群日志收集

    # fluent-bit配置示例 config: inputs: | [INPUT] Name tail Path /var/log/containers/*.log Parser docker Tag kube.* Mem_Buf_Limit 5MB Skip_Long_Lines On outputs: | [OUTPUT] Name es Match * Host elasticsearch Port 9200 Logstash_Format On Replace_Dots On Retry_Limit False

集群运维最佳实践

备份与恢复

  1. 定期备份etcd数据

    rke etcd snapshot-save --name pre-upgrade-snapshot \ --config cluster.yml
  2. 从快照恢复集群

    rke etcd snapshot-restore --name pre-upgrade-snapshot \ --config cluster.yml

升级策略

  1. 检查可升级版本

    rke config --list-version --all
  2. 执行滚动升级

    rke up --config cluster.yml \ --kubernetes-version v1.21.5

升级路径建议

当前版本可升级版本
v1.18.xv1.19.x
v1.19.xv1.20.x
v1.20.xv1.21.x

节点管理

  1. 添加新节点

    • 编辑cluster.yml添加新节点配置
    • 执行rke up更新集群
  2. 安全下线节点

    kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

常见问题排查

部署失败排查

  1. 检查RKE日志

    tail -f /var/log/rke.log
  2. 常见错误及解决方案

错误信息可能原因解决方案
Failed to connect to nodeSSH配置错误检查SSH密钥和防火墙设置
Port already in use端口冲突检查端口占用情况
Image pull failed镜像拉取失败配置镜像仓库或手动拉取镜像

性能优化建议

  1. 内核参数调优

    echo "vm.swappiness = 0" >> /etc/sysctl.conf echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf sysctl -p
  2. Kubelet资源配置

    kubelet: extra_args: kube-reserved: "cpu=500m,memory=1Gi" system-reserved: "cpu=500m,memory=1Gi" eviction-hard: "memory.available<500Mi,nodefs.available<10%"

集成Rancher管理平台

Rancher安装准备

  1. 准备证书

    kubectl -n cattle-system create secret tls tls-rancher-ingress \ --cert=tls.crt \ --key=tls.key
  2. 添加Helm仓库

    helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

安装Rancher

helm install rancher rancher-stable/rancher \ --namespace cattle-system \ --set hostname=rancher.example.com \ --set ingress.tls.source=secret \ --set replicas=3

Rancher高可用架构

推荐架构

+-----------------+ | Load Balancer | +--------+--------+ | +----------------+----------------+ | | | +-----+------+ +-----+------+ +-----+------+ | Rancher | | Rancher | | Rancher | | Server 1 | | Server 2 | | Server 3 | +------------+ +------------+ +------------+

安全加固指南

集群安全配置

  1. 启用Pod安全策略

    services: kube-api: pod_security_policy: true secrets_encryption_config: enabled: true
  2. 配置网络策略

    apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all spec: podSelector: {} policyTypes: - Ingress - Egress

认证与授权

  1. 集成LDAP/AD

    apiVersion: v1 kind: ConfigMap metadata: name: rancher-config namespace: cattle-system data: AD_URL: "ldap://ad.example.com" AD_DOMAIN: "example.com"
  2. 配置RBAC

    apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: dev-role rules: - apiGroups: [""] resources: ["pods", "pods/log"] verbs: ["get", "list", "watch"]

成本优化策略

资源利用率提升

  1. 配置HPA

    apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: myapp-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: myapp minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50
  2. 使用Spot实例

    apiVersion: apps/v1 kind: Deployment metadata: name: spot-worker spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/spot operator: Exists tolerations: - key: "spot" operator: "Exists" effect: "NoSchedule"

未来演进方向

混合云管理

graph TD A[Rancher中央管理平台] --> B[本地数据中心集群] A --> C[公有云集群] A --> D[边缘计算节点] A --> E[异构基础设施]

GitOps实践

  1. Argo CD集成

    helm repo add argo https://argoproj.github.io/argo-helm helm install argocd argo/argo-cd \ --namespace argocd \ --set server.service.type=LoadBalancer
  2. Flux CD配置

    apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: GitRepository metadata: name: myapp namespace: flux-system spec: interval: 1m0s url: https://github.com/myorg/myapp ref: branch: main

性能基准测试数据

3节点集群性能测试结果

测试场景请求数平均延迟吞吐量
100 Pods部署-12s20 Pods/s
1000次API请求100045ms850 req/s
网络吞吐量--5 Gbps
存储IOPS-2ms15,000

扩展阅读与资源

推荐工具

  • k9s:终端Kubernetes管理工具
  • Lens:Kubernetes IDE
  • Octant:Kubernetes可视化面板
  • kube-bench:CIS基准测试工具

学习资源

  1. Kubernetes官方文档
  2. Rancher官方文档
  3. CNCF培训课程
  4. Kubernetes the Hard Way
http://www.jsqmd.com/news/629055/

相关文章:

  • STM32H743硬石开发板+SVPWM实战:无刷电机开环控制避坑指南(附VOFA+波形分析)
  • solidworks 卡死操作分享
  • Z-Image-Turbo保姆级部署教程:3步搞定,16G显卡就能跑出照片级AI画作
  • 讲讲山东顺和胶业的产品兼容性如何,是否值得选购? - 工业品牌热点
  • 进化计算新视角:为什么MOEA/D比NSGA-II更适合你的多目标优化项目?
  • 动手学深度学习——FCN代码
  • 从零开始学习GDScript编程:Godot游戏开发入门终极指南
  • arXiv订阅进阶玩法:除了邮件,还能用RSS和Python脚本打造你的专属论文追踪器
  • Qwen3-ASR-0.6B在VMware虚拟机的部署与性能测试
  • 山东博纳电气品牌口碑怎么样,性价比高不高? - myqiye
  • AI自动视频生成器:从文字到视觉叙事的革命性工具
  • Z-Image-Turbo_Sugar脸部Lora提示词进阶:融合服饰/妆容/光影的Sugar风格组合技
  • Ventoy主题系统技术架构解析:从GRUB2集成到动态主题切换
  • 挖到的Markdown与KateX
  • OpCore-Simplify:10分钟搞定黑苹果配置的终极自动化工具
  • OpenIddict 6.4.0实战:构建企业级统一认证与授权中心
  • 2026年临沂可调直流电源供应商推荐,看哪家产品价格实惠? - 工业设备
  • 告别环境配置焦虑:保姆级教程搞定博流BL616 RISC-V开发环境(Win/Linux双平台)
  • 航天仿真进阶:用STK+MATLAB Connector打通数据流,这几个版本兼容性坑你踩过吗?
  • nscripter-effect指令和renpy效果对照表
  • 怎样高效使用Textractor:游戏文本提取与实时翻译的3个专业技巧
  • ROS1集群通信的可靠升级方案:为什么在无线环境下我选择了swarm_ros_bridge而非原生DDS
  • AICoverGen终极指南:5分钟制作专业级AI翻唱免费教程
  • 从RTL到ATPG:手把手带你走一遍Tessent Shell的Flat Design DFT完整流程(含避坑点)
  • 3个实用技巧帮你轻松解决Windows 11安装难题:从硬件检测到系统激活
  • 免费查AI率结果差异大?解读知网、维普、万方检测标准为什么不同 - 我要发一区
  • 当LLM遇到本体约束:2026奇点大会强制要求的3类Schema-Aware推理协议(附合规性检查CLI)
  • 如何免费激活Cursor Pro:终极完整指南与开源解决方案
  • 卡尔曼滤波及其应用,有Matlab代码,用于温度测量,运动目标跟踪,导航定位,以及扩展卡尔曼滤波,无迹卡尔曼滤波等。
  • 终极跨平台Iwara客户端:5个核心功能完全指南