本地 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
- 工具链:
kubectl
、helm
、docker
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
cssminikube service myapp-podinfo --url
-
方式 B:端口转发(本机 8080 → Service 9898)
bashkubectl 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) 遇到的问题与解决
-
minikube start --driver=docker
报 Docker 未运行/CPU 不足- 原因:未启动 Docker 或 Docker Desktop 分配 CPU < 2。
- 处理:使用 Colima 提供 docker 后端(
colima start --cpu 2 --memory 4
),随后minikube start --driver=docker
正常。
-
Helm 拉取 Bitnami NGINX 失败 / Pod 卡在
Init:0/1
- 原因:从 Docker Hub 拉取 OCI Chart/镜像网络受限,或 Chart 额外依赖的
bitnami/git
、nginx-exporter
镜像导致拉取失败。 - 处理:改用 podinfo 仓库(ghcr.io)安装;或在 bitnami 安装时关闭附加组件、预拉镜像。
- 原因:从 Docker Hub 拉取 OCI Chart/镜像网络受限,或 Chart 额外依赖的
-
minikube service myapp --url
报找不到 Service- 原因:podinfo Chart 的 Service 名是
myapp-podinfo
而非myapp
。 - 处理:使用正确的 Service 名:
minikube service myapp-podinfo --url
。
- 原因:podinfo Chart 的 Service 名是
-
重复执行
helm install
报EOF
- 原因:二次执行
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 service
或 port-forward
在浏览器访问。后续可按需开启 metrics-server
、ingress
等组件,或继续尝试自定义 Chart/部署其他中间件(如 Redis/Postgres/Prometheus)。