一、Helm:Kubernetes 包管理利器

1.1 Helm 概述

Helm 是 Kubernetes 的官方包管理工具,类似于传统 Linux 系统中的 YUM 或 APT。它通过打包的方式简化了 Kubernetes 应用的部署和管理,支持版本控制和动态配置。

​核心价值:​

  • 简化微服务化项目的容器部署和管理

  • 支持应用发布的版本控制

  • 提供模板化配置,动态生成 K8s 资源清单

1.2 Helm 核心概念

概念

说明

类比

​Chart​

Helm 软件包(TAR 格式),包含一组 K8s 资源 YAML 文件

类似于 RPM/DEB 包

​Repository​

Chart 仓库,Web 服务器存储 Chart 包

类似 YUM 源

​Release​

使用 Chart 在集群中部署的应用实例

应用程序的版本实例

1.3 Helm 版本演进

​Helm2(C/S 架构):​

  • 客户端:helm

  • 服务端:Tiller(部署在 kube-system 命名空间)

  • 安全隐患:Tiller 通常拥有集群所有权限

​Helm3(重大改进):​

  • 移除 Tiller 组件

  • 类似 kubectl,直接使用 kubeconfig 文件权限

  • 提升安全性和简化架构

1.4 Helm 实战部署

安装配置
# 下载并安装 Helm
wget https://github.com/helm/helm/tags
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

# 启用命令补全
source <(helm completion bash)
仓库管理
# 添加常用仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts

# 更新和查看
helm repo update
helm repo list

# 搜索 Chart
helm search repo stable
应用部署示例
# 安装 Redis
helm install my-redis bitnami/redis -n default

# 查看发布状态
helm list
helm status my-redis

# 卸载发布
helm uninstall my-redis

1.5 自定义 Chart 开发

Chart 目录结构
nginx/
├── Chart.yaml          # Chart 元数据
├── values.yaml         # 配置值文件
└── templates/          # 模板目录
    ├── deployment.yaml
    ├── service.yaml
    ├── ingress.yaml
    └── _helpers.tpl    # 模板助手
自定义部署流程
# 创建 Chart
helm create nginx

# 修改配置
vim nginx/values.yaml
# 调整镜像、副本数、服务类型等参数

# 打包和验证
helm lint nginx
helm package nginx

# 部署测试
helm install nginx ./nginx --dry-run --debug
helm install nginx ./nginx -n default
升级与回滚
# 应用升级
helm upgrade nginx nginx

# 查看历史
helm history nginx

# 版本回滚
helm rollback nginx 1

1.6 Harbor 作为 Helm 仓库

# 安装 push 插件
helm plugin install https://github.com/chartmuseum/helm-push

# 添加 Harbor 仓库
helm repo add harbor http://192.168.10.19/chartrepo/chart_repo

# 推送 Chart
helm push nginx harbor

二、HPA:自动弹性伸缩

2.1 HPA 工作原理

HPA(Horizontal Pod Autoscaling)基于资源利用率自动调整 Pod 副本数量,实现应用的水平扩展。

​监控机制:​

  • 周期性检测 Pod CPU 使用率(默认30秒)

  • 通过 metrics-server 获取资源度量数据

  • 动态调整 Replication Controller/Deployment 的 Pod 数量

2.2 部署 metrics-server

# 加载镜像
docker load -i metrics-server.tar

# Helm 部署
helm repo add stable https://charts.helm.sh/stable
helm install metrics-server stable/metrics-server -n kube-system -f metrics-server.yaml

2.3 HPA 实战演示

# hpa-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: php-apache
        image: gcr.io/google_containers/hpa-example
        resources:
          requests:
            cpu: 200m
# 创建 HPA 控制器
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

# 压力测试
kubectl run -it load-generator --image=busybox /bin/sh
# 在容器内执行:while true; do wget -q -O- http://php-apache; done

# 监控扩展过程
kubectl get hpa -w

2.4 资源限制策略

Pod 级别限制
resources:
  limits:
    cpu: "2"
    memory: 1Gi
  requests:
    cpu: 250m
    memory: 250Mi
命名空间级别配额
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    pods: "20"
    requests.cpu: "2"
    requests.memory: 1Gi
    limits.cpu: "4"
    limits.memory: 2Gi

三、Rancher:多集群管理平台

3.1 Rancher 简介

Rancher 是企业级多集群 Kubernetes 管理平台,支持混合云环境的集中管理。

​核心特性:​

  • 简化 K8s 集群部署和管理

  • 提供直观的 Web UI 界面

  • 支持多集群统一管理

  • 内置监控和告警功能

3.2 Rancher 部署

# 运行 Rancher 容器
docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  --privileged \
  --name rancher \
  rancher/rancher:v2.5.7

3.3 集群管理流程

  1. ​访问 Web 界面​​:http://192.168.10.23

  2. ​导入现有集群​​:通过令牌方式接入已存在的 K8s 集群

  3. ​执行导入命令​​:

curl --insecure -sfL https://192.168.10.23/v3/import/xxx.yaml | kubectl apply -f -

3.4 Rancher 应用管理示例

创建命名空间
  • 名称:dev

  • 描述:开发环境

部署应用
# 通过 UI 创建 Deployment
Namespace: dev
Name: nginx-dev
Replicas: 3
Container Image: nginx:1.14
Labels: app=nginx
创建服务
# NodePort 服务配置
Service Type: NodePort
Namespace: dev  
Name: nginx-dev
Port: 80 → 80
Node Port: 30180
Selector: app=nginx

四、总结对比

4.1 工具定位对比

工具

主要功能

适用场景

​Helm​

K8s 应用包管理

应用打包、版本管理、模板化部署

​HPA​

自动弹性伸缩

应对流量波动、资源优化

​Rancher​

多集群管理平台

企业级管理、简化运维、可视化

4.2 最佳实践建议

Helm 使用建议
  1. ​Chart 设计​​:合理组织模板文件,提高复用性

  2. ​版本管理​​:利用 Helm 的版本控制实现可靠部署

  3. ​安全考虑​​:使用 Helm 3 避免 Tiller 的安全风险

HPA 配置要点
  1. ​指标选择​​:除 CPU 外,可考虑自定义指标

  2. ​冷却时间​​:合理设置扩缩容冷却周期避免抖动

  3. ​资源预留​​:确保有足够资源供扩展使用

Rancher 管理策略
  1. ​集群规划​​:根据业务需求合理规划多集群架构

  2. ​权限管理​​:利用 Rancher 的 RBAC 进行精细权限控制

  3. ​监控集成​​:充分利用内置监控和告警功能

4.3 综合应用场景

在实际生产环境中,这三个工具通常协同工作:

  • 使用 ​​Rancher​​ 统一管理多个 K8s 集群

  • 通过 ​​Helm​​ 实现应用的标准化部署和版本管理

  • 配置 ​​HPA​​ 确保应用能够根据负载自动弹性伸缩

这种组合为企业提供了完整的 Kubernetes 应用管理解决方案,从基础设施管理到应用部署再到运行时弹性,覆盖了云原生应用的完整生命周期。

更多推荐