首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过Helm为QuestDB设置Kubernetes入侵

无法通过Helm为QuestDB设置Kubernetes入侵
EN

Stack Overflow用户
提问于 2021-06-16 04:22:48
回答 1查看 2.8K关注 0票数 1

我是Kubernetes,Helm和Yaml的初学者。我正在尝试通过我的迷你库中的Kubernetes in控制器设置来访问QuestDB控制台,但是在运行舵机升级时,我会得到下面的错误。有人能建议我怎么纠正这个问题吗?

代码语言:javascript
复制
Error: UPGRADE FAILED: failed to create resource: Ingress.extensions "questdb" is invalid: spec: Invalid value: []networking.IngressRule(nil): either `defaultBackend` or `rules` must be specified

这是我最重要的value.yaml

代码语言:javascript
复制
ingress:
  enabled: true
  rules:
    - host: localhost
      http:
        paths:
          - path: /questdb
            backend:
              serviceName: questdb-headless
              servicePort: 9000
          - path: /influxdb
            backend:
              serviceName: questdb-headless
              servicePort: 9009     

我使用本地版本安装了QuestDB头盔图,它只稍微修改了原始的ingress.yaml,以引用networking.k8s.io/v1,而不是networking.k8s.io/v1beta1。这里是当地的情况:

代码语言:javascript
复制
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "questdb.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1
{{- else -}}
apiVersion: extensions/v1
{{- end }}
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "questdb.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  {{- if .Values.ingress.tls }}
  tls:
    {{- range .Values.ingress.tls }}
    - hosts:
        {{- range .hosts }}
        - {{ . | quote }}
        {{- end }}
      secretName: {{ .secretName }}
    {{- end }}
  {{- end }}
  rules:
    {{- range .Values.ingress.hosts }}
    - host: {{ .host | quote }}
      http:
        paths:
          {{- range .paths }}
          - path: {{ . }}
            backend:
              serviceName: {{ $fullName }}
              servicePort: {{ $svcPort }}
          {{- end }}
    {{- end }}
  {{- end }}

我正在运行这些版本:

代码语言:javascript
复制
- helm : v3.6.0
- Kubernetes : 
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:23:52Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}

NAME                    NAMESPACE       CHART                           APP VERSION
kubernetes-ingress      default         kubernetes-ingress-1.15.2       1.6.2
questdb                 default         questdb-0.8.0                   6.0.3

有关原始图表和模板的更多详细信息,请参见:https://github.com/questdb/questdb-kubernetes/tree/master/charts/questdb

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-16 06:37:42

宏模板期望事物保持在.Values.ingress.hosts下,但在值中则在.Values.ingress.rules下。

此外,路径需要直接停留在主机项下,而不是在http下,因为入口将其与

代码语言:javascript
复制
{{- range .paths }}

.Values.ingress.hosts项下。而且,路径只是字符串,因为服务名称和端口直接从fullname.Values.service.port获取。

我会尝试改变你的价值观如下:

代码语言:javascript
复制
ingress:
  enabled: true
  hosts:
    - host: localhost
      paths:
        - "/questdb"
        - "/influxdb"

或者接近这个的东西。

此外,如果添加参数--debug --dry-run,您可以尝试查看helm升级或安装命令的输出,这将极大地帮助您识别类似的问题,并显示将要创建的定义(当然,如果在构建模板时没有错误)

Update:由于您还更改了in模板以使用networking.k8s.io/v1,所以您还需要更改模板的创建方式,因为新类型的networking.k8s.io/v1需要以不同的方式进行操作,如您在文档中所看到的:https://kubernetes.io/docs/concepts/services-networking/ingress/

规则可能会变成这样:

代码语言:javascript
复制
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
  http:
    paths:
      {{- range .paths }}
      - path: {{ .path }}
        backend:
          service:
            name: {{ .svc }}
            port:
              number: {{ .port }}
      {{- end }}
{{- end }}

的声明,并删除

代码语言:javascript
复制
{{- $fullName := include "questdb.fullname" . -}}
{{- $svcPort := .Values.service.port -}}

现在已经没用了。这样,您可以在以下几个方面更改您的值:

代码语言:javascript
复制
ingress:
  enabled: true
  hosts:
    - host: localhost
      paths:
        - path: "/questdb"
          svc: questdb-headless
          port: 9000
        - path: "/influxdb"
          svc: questdb-headless
          port: 9009

但是,您在值中指定的服务必须在某种程度上创建(通过入口,它需要公开所需的端口)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67996301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档