minikube 本地部署 + 将 Agent 服务跑在 K8s 上

一句话:minikube是本地K8s集群工具,可以在本地快速搭建K8s环境。将Agent服务部署到K8s上,可以实现容器化部署、弹性扩缩和高可用。

1. minikube 基础

1.1 什么是minikube?


graph LR

    A[minikube] --> B[本地K8s集群]

    A --> C[单节点]

    A --> D[开发测试]

    A --> E[快速启动]

    style A fill:#e1f5fe

minikube:本地K8s集群工具,可以在本地快速搭建K8s环境。

1.2 安装和启动

 
# macOS
 
brew install minikube
 
# Windows
 
choco install minikube
 
# Linux
 
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
 
sudo install minikube-linux-amd64 /usr/local/bin/minikube
 
# 启动集群
 
minikube start
 
# 查看状态
 
minikube status
 

2. 部署Agent服务

2.1 Docker镜像构建

 
# Dockerfile
 
FROM python:3.11-slim
 
WORKDIR /app
 
COPY requirements.txt .
 
RUN pip install --user -r requirements.txt
 
COPY . .
 
EXPOSE 8000
 
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
 

2.2 构建和推送镜像

 
# 构建镜像
 
docker build -t myagent:latest .
 
# 使用minikube Docker环境
 
eval $(minikube docker-env)
 
# 重新构建镜像(在minikube环境中)
 
docker build -t myagent:latest .
 

2.3 Kubernetes配置

 
# deployment.yaml
 
apiVersion: apps/v1
 
kind: Deployment
 
metadata:
 
  name: myagent-deployment
 
spec:
 
  replicas: 2
 
  selector:
 
    matchLabels:
 
      app: myagent
 
  template:
 
    metadata:
 
      labels:
 
        app: myagent
 
    spec:
 
      containers:
 
      - name: myagent
 
        image: myagent:latest
 
        ports:
 
        - containerPort: 8000
 
        resources:
 
          requests:
 
            memory: "256Mi"
 
            cpu: "250m"
 
          limits:
 
            memory: "512Mi"
 
            cpu: "500m"
 
        env:
 
        - name: DATABASE_URL
 
          valueFrom:
 
            secretKeyRef:
 
              name: agent-secrets
 
              key: database-url
 
---
 
# service.yaml
 
apiVersion: v1
 
kind: Service
 
metadata:
 
  name: myagent-service
 
spec:
 
  selector:
 
    app: myagent
 
  ports:
 
  - port: 80
 
    targetPort: 8000
 
  type: LoadBalancer
 

3. 部署到minikube

3.1 创建Secret

 
# 创建Secret
 
kubectl create secret generic agent-secrets \
 
  --from-literal=database-url='postgresql://user:pass@localhost/db'
 

3.2 部署应用

 
# 部署Deployment
 
kubectl apply -f deployment.yaml
 
# 部署Service
 
kubectl apply -f service.yaml
 
# 查看Pod状态
 
kubectl get pods
 
# 查看Service
 
kubectl get services
 

3.3 访问应用

 
# 获取Service URL
 
minikube service myagent-service --url
 
# 或者使用port-forward
 
kubectl port-forward service/myagent-service 8080:80
 
# 访问应用
 
curl http://localhost:8080
 

4. 实际案例

4.1 AI Agent部署

 
# agent-deployment.yaml
 
apiVersion: apps/v1
 
kind: Deployment
 
metadata:
 
  name: ai-agent
 
spec:
 
  replicas: 3
 
  selector:
 
    matchLabels:
 
      app: ai-agent
 
  template:
 
    metadata:
 
      labels:
 
        app: ai-agent
 
    spec:
 
      containers:
 
      - name: agent
 
        image: ai-agent:latest
 
        ports:
 
        - containerPort: 8000
 
        env:
 
        - name: OPENAI_API_KEY
 
          valueFrom:
 
            secretKeyRef:
 
              name: agent-secrets
 
              key: openai-api-key
 
        - name: DATABASE_URL
 
          valueFrom:
 
            secretKeyRef:
 
              name: agent-secrets
 
              key: database-url
 
        resources:
 
          requests:
 
            memory: "512Mi"
 
            cpu: "500m"
 
          limits:
 
            memory: "1Gi"
 
            cpu: "1000m"
 
---
 
# agent-service.yaml
 
apiVersion: v1
 
kind: Service
 
metadata:
 
  name: ai-agent-service
 
spec:
 
  selector:
 
    app: ai-agent
 
  ports:
 
  - port: 80
 
    targetPort: 8000
 
  type: LoadBalancer
 

4.2 配置HPA自动扩缩

 
# hpa.yaml
 
apiVersion: autoscaling/v2
 
kind: HorizontalPodAutoscaler
 
metadata:
 
  name: ai-agent-hpa
 
spec:
 
  scaleTargetRef:
 
    apiVersion: apps/v1
 
    kind: Deployment
 
    name: ai-agent
 
  minReplicas: 2
 
  maxReplicas: 10
 
  metrics:
 
  - type: Resource
 
    resource:
 
      name: cpu
 
      target:
 
        type: Utilization
 
        averageUtilization: 70
 
  - type: Resource
 
    resource:
 
      name: memory
 
      target:
 
        type: Utilization
 
        averageUtilization: 80
 

5. 常用命令

5.1 集群管理

 
# 启动集群
 
minikube start
 
# 停止集群
 
minikube stop
 
# 删除集群
 
minikube delete
 
# 查看集群状态
 
minikube status
 

5.2 应用管理

 
# 查看Pod
 
kubectl get pods
 
# 查看Pod详情
 
kubectl describe pod <pod-name>
 
# 查看日志
 
kubectl logs <pod-name>
 
# 进入Pod
 
kubectl exec -it <pod-name> -- /bin/bash
 

5.3 服务管理

 
# 查看Service
 
kubectl get services
 
# 获取Service URL
 
minikube service <service-name> --url
 
# 端口转发
 
kubectl port-forward service/<service-name> 8080:80
 

6. 常见坑点

1. 镜像拉取失败

 
# 解决:使用minikube Docker环境
 
eval $(minikube docker-env)
 
docker build -t myagent:latest .
 

2. 资源不足

 
# 解决:增加minikube资源
 
minikube start --memory=4096 --cpus=4
 

3. 网络问题

 
# 解决:检查Pod标签和Service selector
 
kubectl get pods --show-labels
 
kubectl describe service <service-name>
 

核心要点

 
# 安装启动
 
minikube start
 
# 部署应用
 
kubectl apply -f deployment.yaml
 
kubectl apply -f service.yaml
 
# 查看状态
 
kubectl get pods
 
kubectl get services
 
# 访问应用
 
minikube service <service-name> --url
 

速记卡(面试闪卡)

Q1:一句话讲清「minikube 本地部署 + 将 Agent 服务跑在 K8s 上」到底是什么?

A:minikube 是在本机一键拉起单节点 K8s 集群的工具,用来把 Agent 服务容器化部署、跑上 K8s 做弹性扩缩。

Q2:一、minikube 是什么(local single-node K8s) —— 怎么理解?

A:minikube 像在笔记本里搭一个迷你 Kubernetes——一条 minikube start 就起好单节点集群,专供本地开发测试,不用买云服务器。brew/choco/curl 装好,start 完用 status 看状态。本质是「把 K8s 装进一台机器」的沙盒。

Q3:二、Deployment + Service 跑服务(deploy & expose) —— 怎么理解?

A:先 docker build 镜像;用 minikube docker-env 让镜像直接进集群内部,免推远程仓库。写 deployment.yaml 定副本数/资源/secret,service.yaml 用 LoadBalancer 暴露端口。kubectl apply 后 get pods 看状态,port-forward 或 minikube service 访问。

Q4:三、HPA 自动扩缩与常见坑(autoscaling & pitfalls) —— 怎么理解?

A:对 Agent 服务配 HPA:按 CPU/内存利用率在 2~10 副本间自动扩缩。常见坑:镜像拉不到→用 minikube docker-env 本地构建;资源不足→start 加 —memory=4096;Service 不通→查 Pod 标签和 Service selector 是否对上。

Q5:四、一句话核心流程(start → apply → access) —— 怎么理解?

A:记住主干就够:minikube start 起集群 → kubectl apply -f deployment.yaml/service.yaml 部署 → kubectl get pods/services 看状态 → minikube service <名> —url 拿地址访问。Secret 用 kubectl create secret generic 注入数据库/API Key,别写死在配置里。

Q6:核心速记主线有哪些?

  • 概念:minikube = 本机单节点 K8s 沙盒

  • 构建:docker build + minikube docker-env 进集群

  • 部署:Deployment 定副本/资源,Service 暴露端口

  • 伸缩:HPA 按 CPU/内存自动扩缩容

  • 坑点:镜像拉取、资源不足、Service selector 标签要对

口诀

A:minikube 本地起,

镜像入 env 里;

部署 apply 皆已毕,

服务跑上 K8s 体。

相关链接