如何从清单文件(通常是清单文件与 kubectl 运行)使用 kubectl port-forward

Lud*_*udo 6 kubernetes

我正在尝试在本地使用 Kubernetes 运行我的第一个应用程序(或者我应该说 minikube)。

我有一个非常基本的 Web 服务器(一个本地 docker 镜像)和官方 mongodb(我想从 dockerhub 中提取)镜像。

我并不是想部署 mongodb 集群,只是让我的应用程序在本地运行的最低限度的东西将是一个很好的开始!

首先,我成功单独运行我的网络服务器kubectl run <MY_APP> --image=<MY_IMAGE> --port 3030 --image-pull-policy=IfNotPresent,然后kubectl port-forward <MY_POD> 3030:80它工作正常,我可以从 3030 端口访问应用程序(应用程序正在侦听并且容器公开端口 80)。

但我想将其转换为清单文件来描述我需要轻松运行的所有容器。

我的第一个问题是我找不到应该如何kubectl port-forward翻译成清单文件。我正在考虑,targetPort但在尝试时出现验证错误,看起来我们无法targetPort在 pods 容器端口描述中使用。

我的第二个问题是,我不太确定我通过尝试仅通过描述 Pod 来运行该堆栈正在做什么。它可能需要其他部分,service我认为对于我的需要是可选的,我不确定deployment,但我见过一种endpoint,我可以忽略其他的......

我有点困惑,因为kubectl run似乎创建了一个 Pod、一个部署和一个副本集,我不确定是否必须从清单文件创建所有这些。

我只想在本地运行我的两个容器来处理代码并在每次进行更改时刷新它并测试它。

因此,由于我缺乏有关 Kubernetes 的知识,我的问题有一些子问题,但基本上,我想知道如何将我的kubectl run <MY_APP>和转换kubectl port-forward <MY_POD> 3030:80为清单文件,以便我可以添加 mongodb 容器并使用单个kubectl create -f ./local.yaml命令行启动整个堆栈。

这是初稿:

apiVersion: v1
kind: Pod
metadata:
  name: my_app
spec:
  containers:
    - name: web-server
      image: my_app
      imagePullPolicy: IfNotPresent
      ports:
        - name: my_app
          containerPort: 3030
          targetPort: 80
          protocol: TCP
    - name: mongodb
      image: mongodb
      ports:
        - name: mongodb
          containerPort: 27017
          protocol: TCP
Run Code Online (Sandbox Code Playgroud)

Nic*_*Rak 7

是的你是对的。您可以使用NodePort 类型将您的应用程序公开为服务 (尽管文档中不是很清楚),并且您的服务的 yaml 将如下所示:

apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  type: NodePort
  ports:
    - port: 3030
      targetPort: 80
  selector:
    app: app-server
Run Code Online (Sandbox Code Playgroud)

您的部署的 yaml 将如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-server
  labels:
    app: app-server
spec:
  selector:
    matchLabels:
      app: app-server
  template:
    metadata:
      labels:
        app: app-server
    spec:
      containers:
      - name: web-server
        image: my_app
        ports:
        - containerPort: 80
      - name: mongodb
        image: mongodb
        ports:
        - containerPort: 27017
Run Code Online (Sandbox Code Playgroud)

如您所见,我只暴露了您的网络服务器。现在,要从 Kubernetes 外部访问 Mongo,您还需要公开它。

您可以将应用程序部署为命令:

kubctl apply -f ./file_with_service.yaml ./file_with_deployment.yaml
Run Code Online (Sandbox Code Playgroud)

您可以使用所有这些作为示例来开始,并阅读更多文档以清楚地理解它。