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)。

相关推荐
风象南5 小时前
我把大脑开源给了AI
人工智能·后端
橙序员小站10 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德10 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆12 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好202513 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字13 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常13 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强13 小时前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
小码哥_常14 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌14 小时前
基于注解+拦截器的API动态路由实现方案
java·后端