繁体   English   中英

kubectl 与版本 apps/v1 中的 kind Service 不匹配

[英]kubectl no matches for kind Service in version apps/v1

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

错误:无法识别“deployment.yml”:版本“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'));

在压缩所有源文件之前,我有一个构建脚本,用于将快速应用程序部署到 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. 构建和标记容器。

现在,让我们将 go 放到我的 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,但服务部分失败了。 我一直在互联网上搜索有关为什么会发生这种情况的文档,但我一无所获。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM