代码之家  ›  专栏  ›  技术社区  ›  Cassie

未找到自定义对象状态kubernetes

  •  0
  • Cassie  · 技术社区  · 6 年前

    我在Kubernetes中有CRD的定义。当我尝试发送请求时 kubectl proxy 通过这个链接 curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/ 我得到创建的自定义对象信息。但是,当我尝试获取此自定义对象的状态时, curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/status 我得到了一个错误:

     {
      "kind": "Status",
      "apiVersion": "v1",
      "metadata": {
    
      },
      "status": "Failure",
      "message": "sparkapplications.sparkoperator.k8s.io \"status\" not found",
      "reason": "NotFound",
      "details": {
        "name": "status",
        "group": "sparkoperator.k8s.io",
        "kind": "sparkapplications"
      },
      "code": 404
    

    为什么自定义对象没有状态?CRD的定义有什么问题吗?

    我使用Minikube v0.32.0版,从这里开始:

    minikube start --kubernetes-version v1.13.0 --memory 8048 --cpus 3 --feature-gates=CustomResourceSubresources=true
    

    CRD定义如下:

    apiVersion: sparkoperator.k8s.io/v1alpha1
    kind: SparkApplication
    metadata:
      name: spark-example
      namespace: default
    spec:
      type: Scala
      image: gcr.io/ynli-k8s/spark:v2.4.0-SNAPSHOT
      mainClass: org.apache.spark.examples.SparkExample
      mainApplicationFile: http://localhost:8089/spark_k8s_airflow.jar
      mode: cluster
      deps: {}
      driver:
        coreLimit: 1000m
        cores: 0.1
        labels:
          version: 2.4.0
        memory: 1024m
        serviceAccount: default
      executor:
        cores: 1
        instances: 1
        labels:
          version: 2.4.0
        memory: 1024m
      imagePullPolicy: Always
      subresources:
        status: {}
    

    更新:我专门调用了对象火花示例,返回对象数据,但状态调用返回错误。

    curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/spark-example/status 
    

    返回此消息:

    the server could not find the requested resource
    

    但是,在CRD定义中有子资源定义。

    1 回复  |  直到 6 年前
        1
  •  1
  •   nightfury1204    6 年前
    curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/
    

    以上请求将为您提供 SparkApplication 类对象 default 命名空间。

    要获取特定对象,必须指定对象名称:

    curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/<object-name>
    

    status 是物体的一部分,不是 火花应用 种类。这就是你犯错误的原因。如果您尝试使用特定的对象,它将起作用。

    curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/<object-name>/status
    

    注意:我假设您启用了 地位 子资源 火花应用 CRD。否则会出错。

    如果 地位 CRD定义中未启用子资源,则无法在中获取状态 /status 子路径。这是 子资源 .

    如何知道 地位 是否启用子资源:

    检查CRD YAML:

    $ kubectl get crds/foos.try.com -o yaml
    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: foos.try.com
    spec:
      group: try.com
      version: v1alpha1
      scope: Namespaced
      subresources:
        status: {}
      names:
        plural: foos
        singular: foo
        kind: Foo
    

    如果CRD下有以下字段 spec 然后 地位 已启用子资源。

    subresources:
      status: {}