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

相关推荐
鬼火儿6 小时前
SpringBoot】Spring Boot 项目的打包配置
java·后端
cr7xin6 小时前
缓存三大问题及解决方案
redis·后端·缓存
间彧7 小时前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧7 小时前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧8 小时前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧8 小时前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧8 小时前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧8 小时前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧8 小时前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang8 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构