You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

本地Minikube部署:如何用清单文件实现kubectl port-forward及与kubectl run的差异

很高兴看到你已经成功用kubectl run启动了第一个Web服务!接下来我会一步步帮你搞定清单文件部署和kubectl port-forward的使用,还有你关心的两种方式的核心差异。

一、用清单文件部署服务并配合kubectl port-forward

1. 编写Web服务器的Deployment清单

首先用Deployment清单来定义你的Web服务(这比直接用kubectl run更规范,适合长期维护),创建web-server-deployment.yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-server
  template:
    metadata:
      labels:
        app: web-server
    spec:
      containers:
      - name: web-container
        image: <MY_IMAGE>  # 替换成你的本地镜像名称
        ports:
        - containerPort: 3030
        imagePullPolicy: IfNotPresent  # 和你之前run命令的配置保持一致

应用这个清单到集群:

kubectl apply -f web-server-deployment.yaml

2. 配置Service以便稳定转发端口

Pod的IP会在重启后变化,因此建议创建一个Service来绑定Web服务,这样port-forward的目标更稳定。创建web-server-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: web-server-service
spec:
  selector:
    app: web-server
  ports:
  - port: 3030
    targetPort: 3030

应用Service清单:

kubectl apply -f web-server-service.yaml

3. 使用kubectl port-forward访问服务

现在你可以把本地端口映射到集群内的服务:

  • 映射到Service(推荐,自动指向存活的Pod):
kubectl port-forward service/web-server-service 8080:3030

之后访问本地http://localhost:8080就能打到你的Web服务了。

  • 若临时测试,也可以直接映射到Pod(需先通过kubectl get pods获取Pod名称):
kubectl port-forward pod/my-web-app-xxxxxx-yyyy 8080:3030

4. 最小化配置MongoDB

针对你需要的本地MongoDB最小部署,这里提供一个简单的Deployment+Service清单mongodb-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
      - name: mongodb
        image: mongo:latest  # 从DockerHub拉取官方镜像
        ports:
        - containerPort: 27017
---
apiVersion: v1
kind: Service
metadata:
  name: mongodb-service
spec:
  selector:
    app: mongodb
  ports:
  - port: 27017
    targetPort: 27017

应用后,你的Web服务可以通过集群内域名mongodb-service:27017访问MongoDB;若需本地连接,同样用port-forward

kubectl port-forward service/mongodb-service 27017:27017
二、kubectl run 与清单文件的核心差异

我整理了几个关键区别,帮你理解何时用哪种方式:

  • 可维护性与版本控制
    • kubectl run是一次性命令行操作,没有持久化配置,修改或恢复部署时容易遗漏参数。
    • 清单文件是可存储的文本文件,能放入Git做版本控制,每次修改都有记录,团队协作更方便。
  • 灵活性与扩展性
    • kubectl run适合快速测试简单场景,但复杂配置(如挂载存储、环境变量、资源限制、健康探针)很难用命令行参数完整实现。
    • 清单文件可以定义Kubernetes所有资源类型(Deployment、Service、ConfigMap等),还能把关联资源写在同一个文件中(用---分隔),完全定制部署细节。
  • 复用性与自动化
    • kubectl run命令无法直接复用,换环境或项目时需重新调整参数。
    • 清单文件可作为模板,通过Helm、Kustomize等工具做参数化,也能直接在CI/CD流水线中自动部署,适配持续集成场景。
  • 可读性
    • kubectl run参数过多时,命令会冗长晦涩,可读性差。
    • 清单文件结构清晰,每个配置项都有明确字段,新人接手也能快速理解部署逻辑。

简单来说,kubectl run快速验证的利器,而清单文件是生产环境和长期维护的标准方式,你现在从run过渡到清单文件,是非常好的实践哦!

内容的提问来源于stack exchange,提问作者Ludo

火山引擎 最新活动