Docker kubectl版本apps/v1中的种类服务没有匹配项
我是库伯内特斯的新手。我第一次尝试将应用程序部署到Kubernetes并向公众公开。但是,当我尝试部署配置时,会出现以下错误: 错误:无法识别“deployment.yml”:版本“apps/v1”中的种类“Service”没有匹配项 那么,让我们来看一下细节 我在Ubuntu 18.04上。我使用带有VirtualBox的MiniKube作为虚拟机监控程序驱动程序。以下是所有版本信息: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
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模板散列()这是非正常行为,建议保持原样(您可以更新它,但建议不要这样做)。