Docker kubectl版本apps/v1中的种类服务没有匹配项

Docker kubectl版本apps/v1中的种类服务没有匹配项,docker,kubernetes,Docker,Kubernetes,我是库伯内特斯的新手。我第一次尝试将应用程序部署到Kubernetes并向公众公开。但是,当我尝试部署配置时,会出现以下错误: 错误:无法识别“deployment.yml”:版本“apps/v1”中的种类“Service”没有匹配项 那么,让我们来看一下细节 我在Ubuntu 18.04上。我使用带有VirtualBox的MiniKube作为虚拟机监控程序驱动程序。以下是所有版本信息: MiniKube = v1.11.0 VirtualBox = 6.1.0 Kubectl = Client

我是库伯内特斯的新手。我第一次尝试将应用程序部署到Kubernetes并向公众公开。但是,当我尝试部署配置时,会出现以下错误:

错误:无法识别“deployment.yml”:版本“apps/v1”中的种类“Service”没有匹配项

那么,让我们来看一下细节

我在Ubuntu 18.04上。我使用带有VirtualBox的MiniKube作为虚拟机监控程序驱动程序。以下是所有版本信息:

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 apps部署到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构建-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创建-f部署.yml

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

结果是,我看到我的应用程序被列为部署和pod,但服务部分失败。我一直在互联网上搜寻关于为什么会发生这种情况的文档,但我什么都没有。

一项服务是
apiVersion:v1
而不是
apiVersion:apps/v1
(类似于部署)。你可以在网上查一下。如果要公开部署,还需要使用NodePort(或ClusterIP)类型的服务。类型LoadBalancer在minikube中不起作用。这主要用于云管理的k8s集群,其中LoadBalancer类型的服务将创建LoadBalancer(如AWS中的ALB)


要检查您可以使用的资源的api组:
kubectl api resources

非常感谢您的帮助。另外,随机附带问题:当我创建部署时,相应的pod会附加一个散列。这使得调用logs命令变得很困难,因为我需要这个全名。有什么建议吗?@user2223059这被称为pod模板散列()这是非正常行为,建议保持原样(您可以更新它,但建议不要这样做)。