kubectl没有匹配版本apps / v1中的kind Service

问题描述 投票:0回答:1

所以我是Kubernetes的新手。我正在第一次尝试将应用程序部署到Kubernetes并将其公开。但是,当我尝试部署配置时,出现此错误:

error: unable to recognize "deployment.yml": no matches for kind "Service" in version "apps/v1"

所以,让我们仔细研究一下吧。

我正在使用Ubuntu 18.04。我正在将MiniKube与VirtualBox一起用作HyperVisor驱动程序。这是所有版本信息:

MiniKube = v1.11.0
VirtualBox = 6.1.0
Kubectl = Client Version 1.18.3, Server Version 1.18.3

我正在尝试部署的应用程序是一个超简单的express.js应用程序,可根据要求返回Hello World。

const express = require('express');

const app = express();

app.get('/hello', (req, res) => res.send('Hello World'));

app.listen(3000, () => console.log('Running'));

我有一个用于将Express应用程序部署到Docker的构建脚本,在此之前压缩所有源文件。然后我有了我的Dockerfile:

FROM node:12.16.1

WORKDIR /usr/src/app

COPY ./build/TestServer-*.zip ./TestServer.zip
RUN unzip TestServer.zip

RUN yarn

CMD ["yarn", "start"]

所以现在我运行一些命令。 eval $(minikube docker-env)使我可以使用MiniKube的docker环境,因此不需要将该容器部署到云中。 docker build -t testserver:v1 .构建并标记容器。

现在,让我们转到我的deployment.yml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: testserver
  template:
    metadata:
      labels:
        app: testserver
    spec:
      containers:
        - name: testserver
          image: testserver:v1
          ports:
            - containerPort: 3000
          env:
          imagePullPolicy: Never
---
apiVersion: apps/v1
kind: Service
metadata:
  name: testserver
spec:
  selector:
    app: testserver
  ports:
    - port: 80
      targetPort: 3000
  type: LoadBalancer

我正在尝试创建一个具有Pod和用于公开它的服务的部署。我确定这里有各种各样的问题,这对我来说是最新的,我仍在尝试学习和理解规格。但是,当我尝试使用此配置时,会出现我要寻求帮助的问题。我运行create命令,并得到错误消息。

kubectl create -f deployment.yml

deployment.apps/testserver created
error: unable to recognize "deployment.yml": no matches for kind "Service" in version "apps/v1"

结果是,我看到我的应用程序被列为部署和Pod,但是服务部分失败了。我一直在互联网上搜索有关为什么发生这种情况的文档,但我一无所获。我将继续寻找,但将不胜感激。谢谢。

docker kubernetes
1个回答
0
投票

服务属于apiVersion: v1,而不是apiVersion: apps/v1(例如部署)。您可以在official docs中进行检查。如果要公开您的部署,还需要使用NodePort类型的服务(或ClusterIP)。类型LoadBalancer在minikube中不起作用。这主要用于在云中管理的k8s集群中,其中LoadBalancer类型的服务将创建负载均衡器(如AWS中的ALB)。

要检查资源的apigroup,可以使用:kubectl api-resources

© www.soinside.com 2019 - 2024. All rights reserved.