Subresources necesitan utilizar la situación que se presenta en el momento de la escritura del controlador K8S CRD
Cuando primer documento escrito subrecurso vida CRD
Aquí por ejemplo, con sub kube-batch
apiVersion: apiextensions.k8s.io/v1beta1 tipo: CustomResourceDefinition metadatos: nombre: podgroups.scheduling.sigs.dev spec: scheduling.sigs.dev: grupo nombres: tipo: PodGroup plural: podgroups alcance: espacio de nombres de validación: openAPIV3Schema: propiedades: apiVersion : tipo: cadena tipo: tipo: cadena de metadatos: tipo: objeto de especificaciones: propiedades: minMember: formato: int32 tipo: entero cola: Tipo: Cadena priorityClassName: Tipo: Cadena Tipo: Objeto de estado: propiedades: éxito: Formato: int32 Tipo: entero falló: Formato: int32 Tipo: entero corriendo: Formato: int32 Tipo: entero Tipo: Objeto de tipo: objetos v1alpha2: Versión subresources: estado: {}
types.go utilizado
// + genclient // + K8S: deepcopy-gen: las interfaces = k8s.io / apimachinery / PKG / runtime.Object // PodGroup es una colección de Pod; utilizado para la carga de trabajo por lotes. PodGroup tipo struct { metav1.TypeMeta `JSON: "en línea"` metadatos del objeto // estándar. // Más información: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata // + opcional metav1.ObjectMeta `JSON: "metadatos, omitempty" protobuf:" bytes, 1, opt, name = metadatos "` // Especificación del comportamiento deseado del grupo de vaina. // Más información: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status // + opcionales Spec PodGroupSpec `JSON: "especificación, omitempty" protobuf:" bytes , 2, opt, // Estado representa la información actual acerca de un grupo de vainas. // Estos datos pueden no estar al día. // + opcional de estado PodGroupStatus `JSON: "el estado, omitempty" protobuf: "bytes, 3, opt, nombre = Estado" ' } // PodGroupSpec representa la plantilla de un grupo de vainas. escriba PodGroupSpec struct { // MinMember define el número mínimo de miembros / tareas para ejecutar el grupo pod; // si no hay suficientes recursos para iniciar todas las tareas, el planificador // no comenzará a nadie. MinMember int32 `json: "minMember, omitempty" protobuf: "bytes, 1, opt, name = minMember"` // Queue define la cola para asignar recurso para PodGroup; Si la cola no existe, // no se programará la PodGroup. Cola de cadena `JSON: "la cola, omitempty" protobuf: "bytes, 2, OPT, el nombre de la cola ="` // Si se especifica, indica la prioridad de la PodGroup. "sistema de nodo crítico" y // "sistema-cluster-crítico" son dos palabras clave especiales que indican los // prioridades más altas con la primera es la más alta prioridad. Cualquier otro nombre // debe definirse mediante la creación de un objeto PriorityClass con ese nombre. // Si no se especifica, la prioridad PodGroup será por defecto o cero si no hay // defecto. // + opcional PriorityClassName cadena `JSON: "priorityClassName, omitempty" protobuf: "bytes, 3, opt, name = priorityClassName" ' } // PodGroupStatus representa el estado actual de un grupo de vainas. // fase actual de PodGroup. Fase PodGroupPhase `JSON: "fase, omitempty" protobuf: "bytes, 1, opt, name = fase"` // Las condiciones de PodGroup. // + opcionales Condiciones [] PodGroupCondition `JSON: "condiciones, omitempty" protobuf: "bytes, 2, opt, nombre = condiciones"` // El número de vainas ejecutan activamente. // + opcional Ejecución int32 `JSON: "correr, omitempty" protobuf: "bytes, 3, opt, corriendo name ="` // El número de vainas que alcanzaron la fase Sucedido. // + opcional Sucedido int32 `JSON: "tenido éxito, omitempty" protobuf: "bytes, 4, opt, name = éxito"` // El número de vainas que alcanzaron la fase Error. // + opcional No se ha podido int32 `JSON:" fallado,
Varios cuando se indique.
1. Cuando un presentaciones YAML, establece el atributo de estado es inútil, ya que la dirección de la ruta predeterminada del recurso se presenta es / apis / {nombre de grupo} / {version} / / espacios de nombres {ns} / {} resourcesname / {nombre}
Por lo que el estado no está configurado subresources
Por ejemplo, envío una
apiVersion: scheduling.incubator.k8s.io/v1alpha1 tipo: PodGroup Metadatos: Nombre:. QJ 1- especificaciones: minMember :. 6
# Este atributo no está configurado comando kubectl Estado tuvo éxito:.. 1
subresouces CRD miran a la definición de K8S
// CustomResourceSubresources define el estado y escala subresources para CustomResources. CustomResourceSubresources tipo struct { // Estado indica el estado de subrecurso CustomResources Estado * CustomResourceSubresourceStatus // Escala denota el subrecurso escala para CustomResources Escala * CustomResourceSubresourceScale }
// CustomResourceSubresourceStatus define cómo servir al estado de subrecurso CustomResources.
// Estado está representado por el `.status` en el recorrido del JSON de un CustomResource. Cuando se establece,
// * expone una subrecurso estado / para el recurso personalizado
peticiones PUT * // al subrecurso / estado toman un objeto de recurso personalizado, e ignoran los cambios en nada excepto la estrofa estado de
las solicitudes // * PUT / POST / parche para el recurso personalizado ignorar los cambios en el estado estrofa
tipo CustomResourceSubresourceStatus struct {}
// define CustomResourceSubresourceScale cómo servir al subrecurso escala para CustomResources.
escriba CustomResourceSubresourceScale struct {
// SpecReplicasPath define la ruta dentro de JSON de un CustomResource que corresponde a Scale.Spec.Replicas. // el valor de 0.
// Sólo se permiten caminos JSON sin la notación de matriz.
// debe ser una ruta JSON bajo .spec.
// Si no hay ningún valor por debajo de la ruta dada en la CustomResource, la escala subrecurso / devolverá un error en GET.
SpecReplicasPath cadena
// StatusReplicasPath define la ruta dentro de JSON de un CustomResource que corresponde a Scale.Status.Replicas.
// Sólo se permiten caminos JSON sin la notación de matriz.
// debe ser una ruta JSON bajo .status.
// Si no hay valor en virtud de la ruta dada en la CustomResource, el valor réplica de estado en la escala / subrecurso
StatusReplicasPath cadena
// LabelSelectorPath define el interior camino JSON de un CustomResource que corresponde a Scale.Status.Selector. // Si no hay ningún valor por debajo de la ruta dada en la CustomResource , el valor del selector etiqueta de estado en la escala /
// Sólo se permiten caminos JSON sin la notación de matriz.
// debe ser una ruta JSON bajo .status o .spec.
// Debe establecerse en el trabajo con HPA.
// El campo señalado por este camino JSON debe ser un campo de cadena (no un complejo struct selector)
// que contiene un selector etiqueta serializado en forma de cadena.
// Más información: https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource // subrecurso pondrá por defecto en la cadena vacía. // + opcional LabelSelectorPath * cadena }
Apoyar Estado, escala son dos,
// * PUT peticiones al estado subrecurso / toman un objeto de recurso personalizado, e ignoran los cambios en nada excepto la estrofa estado
// * PUT / POST / solicitudes de parche en el recurso personalizado ignorar los cambios en el estado de la estrofa
Cuando la solicitud es / será cuando el estado de los otros campos de modificar el estado de ignorar los objetos sólo
Es decir: si desea modificar el campo de estado con una línea de comandos, que se presentará / apis / {nombre de grupo} / {version} / / espacios de nombres {ns} / {resourcesname} / {nombre} / estado
2. Durante la prueba si desea modificar manualmente el estado de cómo hacer
Para modificar el estado debe primero recuperar el objeto actual, porque no hay reversión de las restricciones, el objeto se presentará en serio, así que para obtener
A continuación, el estado añadido en el ámbito salir del objeto
rizo --cacert {} -H ca.pen "Autorización: Portador {testigo}" APISERVER / apis / {nombre de grupo} / {version} / / espacios de nombres {ns} / {} / resourcesname {nombre}
Si se devuelve el resultado
{
...
"Especificaciones":{...}
}
Modificar el estado de complemento
{
...
"Especificaciones":{...},
"Status": { "éxito": 1}
}
Seguido de una petición a este órgano
enrollamiento --cacert {} -H ca.pen "Autorización: Portador {} símbolo" H "Content-Type: application / json" --request PUT APISERVER / apis / {groupName} / {version} / / espacios de nombres {ns } / {resourcesname} / {nombre} / estado --Hojas '上边 cuerpo'
Recuerde que debe ir a solicitar el último objetivo, ya que verificará ResourceVersion