Пользовательский статус объекта не найден Kubernetes - PullRequest
0 голосов
/ 14 января 2019

У меня есть определение CRD в Kubernetes. Когда я пытаюсь отправить запрос с 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, данные объекта возвращены, но вызов состояния возвращает ошибку.

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 Ответ

0 голосов
/ 14 января 2019
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 является частью объекта, а не SparkApplication вида. Вот почему вы получаете эту ошибку. Если вы попробуете для конкретного объекта, он будет работать.

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

Примечание. Я предполагаю, что вы включили субресурс status для SparkApplication CRD. Иначе это даст ошибку.

Если субресурс status не включен в определении CRD, вы не можете получить статус в подпути /status. Это особенность подресурса .

Как узнать, включен ли подресурс 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: {}
...