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

相关推荐
李梨同学丶13 分钟前
0201好虫子周刊
后端
思想在飞肢体在追23 分钟前
Springboot项目配置Nacos
java·spring boot·后端·nacos
Loo国昌3 小时前
【垂类模型数据工程】第四阶段:高性能 Embedding 实战:从双编码器架构到 InfoNCE 损失函数详解
人工智能·后端·深度学习·自然语言处理·架构·transformer·embedding
ONE_PUNCH_Ge4 小时前
Go 语言泛型
开发语言·后端·golang
良许Linux4 小时前
DSP的选型和应用
后端·stm32·单片机·程序员·嵌入式
不光头强4 小时前
spring boot项目欢迎页设置方式
java·spring boot·后端
怪兽毕设4 小时前
基于SpringBoot的选课调查系统
java·vue.js·spring boot·后端·node.js·选课调查系统
学IT的周星星4 小时前
Spring Boot Web 开发实战:第二天,从零搭个“会卖萌”的小项目
spring boot·后端·tomcat
郑州光合科技余经理4 小时前
可独立部署的Java同城O2O系统架构:技术落地
java·开发语言·前端·后端·小程序·系统架构·uni-app
Remember_9935 小时前
Spring 事务深度解析:实现方式、隔离级别与传播机制全攻略
java·开发语言·数据库·后端·spring·leetcode·oracle