未找到自定义对象状态 Kubernetes
Custom object status is not found Kubernetes
我在 Kubernetes 中有 CRD 定义。当我尝试通过 link:
发送带有 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: {}
更新:我具体调用了对象spark-example,返回了对象数据,但是状态调用returns错误。
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/spark-example/status
returns 此消息:
the server could not find the requested resource
尽管CRD定义中有子资源定义。
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/
上述请求将为您提供 default
个命名空间中 SparkApplication
种对象的列表。
要获取特定对象,您必须指定对象名称:
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/<object-name>
status
是对象的一部分,不是SparkApplication
那种。这就是您收到该错误的原因。如果您尝试特定对象,它会起作用。
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/<object-name>/status
Note: I am assuming that you enabled status
subresource for SparkApplication
CRD. Otherwise it will give error.
如果 CRD 定义中未启用 status
子资源,则无法在 /status
子路径中获取状态。这是 subresource.
的特性
如何知道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
下有以下字段,则 status
子资源已启用。
subresources:
status: {}
我在 Kubernetes 中有 CRD 定义。当我尝试通过 link:
发送带有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: {}
更新:我具体调用了对象spark-example,返回了对象数据,但是状态调用returns错误。
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/spark-example/status
returns 此消息:
the server could not find the requested resource
尽管CRD定义中有子资源定义。
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/
上述请求将为您提供 default
个命名空间中 SparkApplication
种对象的列表。
要获取特定对象,您必须指定对象名称:
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/<object-name>
status
是对象的一部分,不是SparkApplication
那种。这就是您收到该错误的原因。如果您尝试特定对象,它会起作用。
curl http://localhost:8090/apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/<object-name>/status
Note: I am assuming that you enabled
status
subresource forSparkApplication
CRD. Otherwise it will give error.
如果 CRD 定义中未启用 status
子资源,则无法在 /status
子路径中获取状态。这是 subresource.
如何知道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
下有以下字段,则 status
子资源已启用。
subresources:
status: {}