从零到生产:用Helm在K8s上部署高可用Rancher 2.6.4,踩过这些坑才算真会了

当企业决定将Kubernetes集群管理交给Rancher时,生产环境的高可用部署就成了DevOps工程师必须跨越的第一道门槛。与测试环境不同,生产部署需要考虑证书管理、组件健康、安全配置等一系列复杂因素。本文将带你深入Helm部署Rancher 2.6.4的每个关键环节,分享那些只有实战才会遇到的"坑"和解决方案。

1. 环境准备:避开版本兼容性的"雷区"

在开始部署之前,版本兼容性是需要解决的首要问题。Rancher 2.6.4对cert-manager有特定要求,直接使用最新版可能导致不可预知的问题。

cert-manager v1.4.0的正确安装姿势

# 添加jetstack仓库
helm repo add jetstack https://charts.jetstack.io
helm repo update

# 安装特定版本
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.4.0

安装后验证cert-manager是否正常运行:

kubectl get pods -n cert-manager

常见问题排查表:

症状可能原因解决方案
Pod处于CrashLoopBackOff状态资源配额不足增加节点资源或调整requests/limits
Certificate签发失败RBAC配置问题检查ClusterIssuer的ServiceAccount权限
Webhook无法访问网络策略限制检查Calico/NetworkPolicy配置

提示:生产环境建议提前为cert-manager配置ResourceQuota,避免因资源竞争影响证书签发。

2. Helm部署Rancher:主机名与证书的陷阱

主机名配置是Rancher部署中最容易出错的环节之一,错误的配置会导致后续证书签发失败和访问问题。

关键配置参数解析

helm install rancher rancher-stable/rancher \
  --namespace rancher \
  --version 2.6.4 \
  --set hostname=rancher.yourdomain.com \
  --set bootstrapPassword=$(openssl rand -hex 12) \
  --set ingress.tls.source=letsEncrypt \
  --set letsEncrypt.email=admin@yourdomain.com

主机名配置的注意事项:

  • 必须使用完整域名(FQDN),不能使用IP地址
  • 域名需要提前做好DNS解析
  • 如果使用自签名证书,需要额外配置caBundle

证书管理对比

证书类型优点缺点适用场景
LetsEncrypt自动续期,免费需要公网访问有公网入口的环境
自签名完全内网可用需要手动管理纯内网环境
商业证书信任度高成本高企业合规要求严格场景

3. 高可用验证:看不见的组件健康检查

部署完成并能访问Web UI只是第一步,真正的高可用需要验证核心组件的运行状态。

必须检查的核心组件

# cattle-system命名空间下的关键Pod
kubectl get pods -n cattle-system -l app=cattle-cluster-agent

# fleet-agent状态检查
kubectl get pods -n cattle-fleet-system

# 监控组件健康
kubectl get pods -n cattle-monitoring-system

高可用测试方法:

  1. 随机终止一个Rancher Pod,观察自动恢复情况
  2. 模拟节点故障,测试服务迁移能力
  3. 进行压测,观察cattle-cluster-agent的负载均衡

性能调优参数参考

# values.yaml中的资源限制配置
resources:
  limits:
    cpu: "2"
    memory: "4Gi"
  requests:
    cpu: "1"
    memory: "2Gi"

4. 生产级安全加固:超越默认配置

默认安装的Rancher往往不能满足生产安全要求,需要进行额外加固。

关键安全措施

  1. bootstrapPassword安全管理

    • 首次登录后立即修改
    • 启用双因素认证(2FA)
    • 定期轮换
  2. 网络隔离策略

    # 示例NetworkPolicy配置
    kubectl apply -n rancher -f - <<EOF
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: rancher-ingress-isolation
    spec:
      podSelector:
        matchLabels:
          app: rancher
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              project: cattle-system
      policyTypes:
      - Ingress
    EOF
    
  3. 审计日志配置

    # 在values.yaml中启用审计
    auditLog:
      enabled: true
      level: "2"
      path: "/var/log/rancher/audit.log"
    

5. 升级与维护:平滑过渡的艺术

生产环境的升级需要特别谨慎,以下是经过验证的升级流程:

  1. 备份关键数据:

    # 备份Rancher设置
    kubectl get settings -n rancher -o yaml > rancher-settings.yaml
    
    # 备份用户和权限
    kubectl get globalrolebindings -o yaml > globalrolebindings.yaml
    
  2. 测试环境验证:

    # 使用--dry-run验证升级
    helm upgrade rancher rancher-stable/rancher \
      --namespace rancher \
      --version 2.6.5 \
      --dry-run
    
  3. 正式升级窗口期操作:

    # 执行实际升级
    helm upgrade rancher rancher-stable/rancher \
      --namespace rancher \
      --version 2.6.5 \
      --reuse-values
    

升级后检查清单:

  • 所有Pod状态正常
  • 自定义配置未被覆盖
  • 监控指标无异常波动
  • 用户权限保持不变

6. 监控与告警:构建完整的可观测性体系

仅仅部署成功还不够,需要建立完整的监控体系来保证持续稳定运行。

关键监控指标

指标类别具体指标告警阈值
资源使用CPU利用率>70%持续5分钟
组件健康cattle-cluster-agent重启次数>3次/小时
证书状态过期时间<7天
API性能请求延迟P99 >500ms

配置Prometheus监控示例:

# rancher-monitoring的values.yaml片段
prometheus:
  alertmanagerFiles:
    alerts.yml:
      groups:
      - name: rancher-alerts
        rules:
        - alert: HighCPUUsage
          expr: sum(rate(container_cpu_usage_seconds_total{namespace="cattle-system"}[5m])) by (pod) > 0.7
          for: 5m
          labels:
            severity: warning
          annotations:
            summary: "High CPU usage on Rancher pod {{ $labels.pod }}"

7. 灾难恢复:当最坏情况发生时

即使做了万全准备,也需要为灾难场景做好准备。

恢复流程关键步骤

  1. 恢复etcd数据:

    # 从备份恢复etcd
    etcdctl snapshot restore backup.db \
      --data-dir /var/lib/etcd-restore \
      --initial-cluster-token etcd-cluster-1
    
  2. 重建Rancher部署:

    # 使用原有配置重新部署
    helm install rancher rancher-stable/rancher \
      --namespace rancher \
      --version 2.6.4 \
      -f rancher-values-backup.yaml
    
  3. 验证数据一致性:

    # 检查关键资源
    kubectl get clusters -A
    kubectl get projects -A
    

备份策略建议

数据类型备份频率保留策略工具
etcd数据每小时保留7天etcdctl
Rancher配置每天保留30天kubectl
应用数据根据应用要求根据SLA要求应用特定工具

更多推荐