gpt4 book ai didi

kubernetes - 由于部署 list 问题,无法进行 Helm 安装

转载 作者:行者123 更新时间:2023-12-02 11:56:18 26 4
gpt4 key购买 nike

尝试执行 helm install

Error: unable to build kubernetes objects from release manifest: [unable to recognize "": no matches for kind "Service" in version "extensions/v1beta1", error validating "": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec]

我的 service.yaml 如下所示

apiVersion: extensions/v1beta1
kind: Service
metadata:
name: helm-xxx-helper-api
spec:
type: NodePort
ports:
- nodePort: 31235
port: 80
targetPort: 8080
selector:
app: helm-xxx-helper

我的deployment.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: helm-xxx-helper
spec:
replicas: 2
selector:
matchLabels:
name: helm-xxx-helper
template:
metadata:
labels:
app: helm-xxx-helper
spec:
containers:
- name: helm-xxx-helper
image: xxxxxxxxx:5001/devops/xxx-helper:latest
imagePullPolicy: Always
env:
- name: XXX_STAGE
value: "DEV"
ports:
- containerPort: 8080

这可能是什么问题?

最佳答案

当您收到此错误时,这意味着您使用的是 Kubernetes 1.16 或更高版本。

问题 1 - 使用 Service

在此版本中,许多 apiVersion 已更改(部署、StatefulSet、服务)。更多详情可查看here .

在 Kubernetes 1.16 中,您需要将 apiVersion: v1 用于 service。否则你会收到类似的错误

error: unable to recognize "STDIN": no matches for kind "Service" in version "extensions/v1beta1"
error: unable to recognize "STDIN": no matches for kind "Service" in version "extensions/v1"
error: unable to recognize "STDIN": no matches for kind "Service" in version "apps/v1"

问题 2 - 使用 部署

  • spec.selector.matchLabels 不包含像 name 这样的值。您需要使用 labels 中的值。所以在这种情况下,你需要使用 app: helm-xxx-helper 而不是 name: helm-xxx-helper 否则你会收到如下错误:
The Deployment "helm-xxx-helper" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"app":"helm-xxx-helper"}: `selector` does not match template `labels`
  • YAML 格式错误。在您的代码中,您有
...
selector:
matchLabels:
name: helm-xxx-helper
...

matchLabels 的值应在第三个字母 (t) 以下。另外,正如我在前面提到的,您需要将 name 更改为 app

matchLables 的正确格式和正确的值:

...
selector:
matchLabels:
app: helm-xxx-helper
...

您可以阅读 LabelsSelectors here .

正如您提到的它是 HELM,您需要将 Kubernetes 版本 更改为早于 1.16 或更改每个对象 YAML 中的 apiVersion 模板目录。已经有类似的案例了。请查看this thread了解更多信息。

在将创建 ServiceDeployment 的两个 YAML 下方。在 Kubernetes 1.16.1 上测试。

apiVersion: v1
kind: Service
metadata:
name: helm-xxx-helper-api
spec:
type: NodePort
ports:
- nodePort: 31235
port: 80
targetPort: 8080
selector:
app: helm-xxx-helper
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: helm-xxx-helper
spec:
replicas: 2
selector:
matchLabels:
app: helm-xxx-helper
template:
metadata:
labels:
app: helm-xxx-helper
spec:
containers:
- name: helm-xxx-helper
image: nginx # As I dont have your image ive put nginx
imagePullPolicy: Always
env:
- name: XXX_STAGE
value: "DEV"
ports:
- containerPort: 8080

关于kubernetes - 由于部署 list 问题,无法进行 Helm 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com