Helm 本地部署记录

本地 Helm 部署记录(macOS M1 Pro)

目标:在本机启动最小 K8s 集群(minikube+Colima),使用 Helm 部署示例应用,并可在浏览器访问。


环境信息

  • 设备:MacBook Pro(Apple Silicon M1 Pro)
  • 系统:macOS 15.6.1 (arm64)
  • 容器运行时:Colima(Docker 兼容)
  • Kubernetes:minikube v1.37.0(driver=docker)
  • 包管理:Homebrew
  • 工具链:kubectlhelmdocker

1) 安装与启动

1.1 安装工具

复制代码
brew install colima docker minikube kubectl helm

1.2 启动 Colima(提供 Docker 守护进程)

css 复制代码
colima start --cpu 2 --memory 4 --disk 20
docker version   # Client/Server 信息正常返回,Context=colima

1.3 启动 minikube(使用 docker 驱动)

sql 复制代码
minikube start --driver=docker
kubectl config use-context minikube
kubectl get nodes
kubectl get pods -A
# 期望:kube-system 组件均 Running

备注:遇到 "Docker Desktop CPUs < 2" 提示时,改用 Colima 作为 docker 后端已解决。


2) 部署示例应用(Helm)

由于网络到 Docker Hub/OCI 可能受限,首选 podinfo(镜像托管在 ghcr.io,成功率更高)。

bash 复制代码
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm repo update
helm install myapp podinfo/podinfo --set service.type=NodePort

2.1 资源验证

shell 复制代码
kubectl get svc,pods
# 期望:
# service/myapp-podinfo NodePort 9898:<NODEPORT>/TCP ...
# pod/myapp-podinfo-xxxxx Running 1/1

2.2 访问方式

  • 方式 A:minikube 提供可直接打开的 URL

    css 复制代码
    minikube service myapp-podinfo --url
  • 方式 B:端口转发(本机 8080 → Service 9898)

    bash 复制代码
    kubectl port-forward svc/myapp-podinfo 8080:9898
    # 浏览器访问 http://localhost:8080

3) 关键命令与输出(节选)

3.1 集群组件

sql 复制代码
kubectl get pods -A
# kube-system coredns/etcd/apiserver/controller-manager/scheduler/kube-proxy/storage-provisioner 均 Running

3.2 应用与服务

shell 复制代码
kubectl get svc,pods
# NAME                    TYPE      CLUSTER-IP      EXTERNAL-IP  PORT(S)                       AGE
# service/myapp-podinfo   NodePort  10.100.252.59   <none>       9898:31198/TCP,9999:31522/TCP  6m

# NAME                                READY STATUS   RESTARTS AGE
# pod/myapp-podinfo-8754559dc-bclcb   1/1   Running 0        6m

3.3 本地转发成功

bash 复制代码
kubectl port-forward svc/myapp-podinfo 8080:9898
# Forwarding from 127.0.0.1:8080 -> 9898
# 浏览器打开 http://localhost:8080

4) 遇到的问题与解决

  1. minikube start --driver=docker 报 Docker 未运行/CPU 不足

    • 原因:未启动 Docker 或 Docker Desktop 分配 CPU < 2。
    • 处理:使用 Colima 提供 docker 后端(colima start --cpu 2 --memory 4),随后 minikube start --driver=docker 正常。
  2. Helm 拉取 Bitnami NGINX 失败 / Pod 卡在 Init:0/1

    • 原因:从 Docker Hub 拉取 OCI Chart/镜像网络受限,或 Chart 额外依赖的 bitnami/gitnginx-exporter 镜像导致拉取失败。
    • 处理:改用 podinfo 仓库(ghcr.io)安装;或在 bitnami 安装时关闭附加组件、预拉镜像。
  3. minikube service myapp --url 报找不到 Service

    • 原因:podinfo Chart 的 Service 名是 myapp-podinfo 而非 myapp
    • 处理:使用正确的 Service 名:minikube service myapp-podinfo --url
  4. 重复执行 helm installEOF

    • 原因:二次执行 install 会重新下载 chart,网络抖动导致 EOF。
    • 处理:查看现有发布 helm ls / helm status myapp;修改参数用 helm upgrade

5) 常用运维操作(速查)

bash 复制代码
# 查看/切换上下文
kubectl config get-contexts
kubectl config use-context minikube

# 观察资源
kubectl get pods,svc -A
kubectl describe pod <name>
kubectl logs -f <pod> [-c <container>]

# Helm
helm repo list && helm repo update
helm ls
helm status myapp
helm upgrade myapp podinfo/podinfo --set replicaCount=2
helm uninstall myapp

# minikube 附加组件(按需)
minikube addons enable metrics-server
minikube addons enable ingress

6) 清理

arduino 复制代码
helm uninstall myapp
minikube delete
colima stop

7) 复现脚本(一键跑通)

csharp 复制代码
# 安装工具(如已安装可跳过)
brew install colima docker minikube kubectl helm

# 启动 docker 后端(Colima)
colima start --cpu 2 --memory 4 --disk 20

# 启动 k8s(minikube)
minikube start --driver=docker
kubectl config use-context minikube
kubectl get nodes

# 部署示例(podinfo)
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm repo update
helm install myapp podinfo/podinfo --set service.type=NodePort

# 访问
minikube service myapp-podinfo --url
# 或:kubectl port-forward svc/myapp-podinfo 8080:9898

结论 :本地最小集群(minikube+Colima)已搭建完成,Helm 成功部署 podinfo,可通过 minikube serviceport-forward 在浏览器访问。后续可按需开启 metrics-serveringress 等组件,或继续尝试自定义 Chart/部署其他中间件(如 Redis/Postgres/Prometheus)。

相关推荐
Mintopia3 小时前
单体 vs 微服务:当 Next.js 长成“巨石阵”以后 🪨➡️🧩
前端·后端·全栈
陈随易3 小时前
改变世界的编程语言MoonBit:配置系统介绍(上)
前端·后端·程序员
新鲜萝卜皮3 小时前
TCP 与 UDP 下的 Socket 系统调用
后端
知其然亦知其所以然3 小时前
MySQL性能暴涨100倍?其实只差一个“垂直分区”!
后端·mysql·面试
往事随风去3 小时前
惊!多线程编程竟成内存杀手:90%程序员不知道的OOM陷阱
java·后端
间彧3 小时前
@Transactional(readOnly=true)与MVCC隔离级别的关联机制
后端
TZOF3 小时前
TypeScript的新类型(五):tuple元组
前端·后端·typescript
TZOF3 小时前
TypeScript的object大小写的区别
前端·后端·typescript