WSの小屋

Helm 与常用软件安装

Helm 是 Kubernetes 的包管理工具,类似于 Linux 中的 apt 或 yum,它可以帮我们快速安装、升级和管理复杂的 K8s 应用。

Helm 基础概念

  • Chart:Helm 的软件包,包含运行应用所需的所有 K8s 资源定义
  • Repository:Chart 的存储仓库
  • Release:Chart 在集群中运行的一个实例
  • Values:Chart 的配置参数,通过 values.yaml 定制

Helm 安装 ingress-nginx

ingress-nginx 是 Kubernetes 中最常用的 Ingress Controller,下面演示通过 Helm 安装的完整流程。

1. 添加 Helm 仓库

# 添加 ingress-nginx 官方仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

# 添加其他常用仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable

# 更新仓库
helm repo update

# 查看已添加的仓库
helm repo list

2. 搜索和下载 Chart

# 搜索
helm search repo ingress-nginx

# 查看 Chart 信息
helm show chart ingress-nginx/ingress-nginx
helm show values ingress-nginx/ingress-nginx

# 下载并解压(方便自定义配置)
helm pull ingress-nginx/ingress-nginx
tar -zxvf ingress-nginx-*.tgz
cd ingress-nginx

3. 修改 values.yaml

下载 Chart 后,需要根据实际情况修改 values.yaml,关键配置项:

controller:
  # 使用 hostNetwork 让 Pod 直接使用宿主机网络
  hostNetwork: true
  
  # DNS 策略改为 ClusterFirstWithHostNet(与 hostNetwork 配合使用)
  dnsPolicy: ClusterFirstWithHostNet
  
  # 节点选择器:只调度到打了标签的节点
  nodeSelector:
    ingress: "true"
  
  # 使用 DaemonSet 模式(每个节点运行一个 Pod)
  kind: DaemonSet
  
  # 修改镜像地址(如果默认地址无法访问)
  image:
    registry: registry.aliyuncs.com
    repository: google_containers/nginx-ingress-controller
    tag: "v1.8.0"
  
  # 保持连接超时设置
  config:
    keep-alive: 75
    keep-alive-requests: 10000
    ssl-redirect: "false"

4. 安装

# 创建命名空间
kubectl create ns ingress-nginx

# 给需要运行 Ingress 的节点打标签
kubectl label node <node-name> ingress=true

# 安装 Chart
helm install ingress-nginx -n ingress-nginx ./ingress-nginx

5. 验证安装

# 查看 Pod 状态
kubectl get pods -n ingress-nginx -o wide

# 查看 Service
kubectl get svc -n ingress-nginx

# 测试是否正常工作
curl -I http://localhost

其他常用的 Helm 安装

安装 cert-manager(自动 HTTPS 证书)

helm repo add jetstack https://charts.jetstack.io
helm repo update

helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --set installCRDs=true

安装 Prometheus + Grafana(监控)

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# 创建单独的命名空间
helm install kube-prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace

国内镜像加速

由于网络原因,K8s 相关镜像往往无法直接拉取。常用替代方案:

# 阿里云镜像(registry.aliyuncs.com)
image:
  registry: registry.aliyuncs.com
  repository: google_containers/nginx-ingress-controller

# 或者使用 Docker Hub 的国内镜像
# 修改 Docker 配置
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
sudo systemctl restart docker

Helm 常用命令速查

helm list                      # 查看已安装的 Release
helm status <release>          # 查看 Release 状态
helm upgrade <release> <chart> # 升级 Release
helm rollback <release> <rev>  # 回滚到指定版本
helm uninstall <release>       # 卸载 Release
helm history <release>         # 查看版本历史

总结

Helm 极大地简化了 K8s 应用的安装和管理。掌握 Helm 后,部署 ingress-nginx、cert-manager、Prometheus 等常用组件只需几条命令,配合 values.yaml 自定义配置,就能快速搭建生产可用的 K8s 环境。

Comments | 0条评论