Oc equipo al rescate

Si eres especial en OpenShift, es poco probable que esta publicación te revele mucho. Pero si recién está comenzando a dominarlo, le ahorrará mucho tiempo y nervios. Le pedimos a Jorge Tudela González de Riancho, un consultor en la nube en la oficina española de Red Hat, que escribiera algunos trucos para la utilidad oc .



Este es un equipo genial, está bien pensado, es poderoso, es flexible y, como verá, tiene muchas características ocultas que vale la pena probar.

1. Primero lo primero: depuración


Cuando no sé qué está sucediendo, o recibo un mensaje de error incomprensible, siempre uso el indicador --loglevell , que permite iniciar sesión en stderr. Dependiendo del valor de este indicador, puede ver las llamadas curvilíneas de API Rest, el contenido de las respuestas de API Rest o incluso información más detallada.



$ oc --loglevel 7 get pod
...
I0216 21:24:12.027793 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/v1/serverresources.json
I0216 21:24:12.028046 973 round_trippers.go:383] GET https://192.168.42.77:8443/api/v1/namespaces/myproject/pods
I0216 21:24:12.028052 973 round_trippers.go:390] Request Headers:
I0216 21:24:12.028057 973 round_trippers.go:393] Accept: application/json
I0216 21:24:12.028061 973 round_trippers.go:393] User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff
I0216 21:24:12.053230 973 round_trippers.go:408] Response Status: 200 OK in 25 milliseconds
I0216 21:24:12.055143 973 cached_discovery.go:119] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/servergroups.json
I0216 21:24:12.055228 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/authentication.k8s.io/v1/serverresources.json
I0216 21:24:12.055288 973 cached_discovery.go:72]
...

Por ejemplo, loglevel 9 es muy conveniente cuando parchea un objeto OCP, ya que le permite ver el parche en sí (el contenido de la solicitud API).

Si, por ejemplo, un parche cambia la etiqueta del servicio a "aplicación: hola-jorge", se verá así:

$ oc --loglevel 9 edit svc hello-openshift
...
I0216 21:33:15.786463 1389 request.go:994] Request Body: {"metadata":{"labels":{"app":"hello-jorge"}}}
I0216 21:33:15.786590 1389 round_trippers.go:386] curl -k -v -XPATCH -H "Accept: application/json" -H "Content-Type: application/strategic-merge-patch+json" -H "User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff" https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift
I0216 21:33:15.797185 1389 round_trippers.go:405] PATCH https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift 200 OK in 10 milliseconds
...

Nota En tiempos de desesperación, en lugar de uno nueve, puede conducir varios a la vez. La salida del comando oc no cambiará a partir de esto, pero puede sentirse mejor para usted.

$ oc --loglevel 9999 get pod

2. su -


Sí, lo entendiste correctamente. El comando oc puede ejecutarse en nombre de otro usuario o, utilizando el lenguaje OCP, utilizar la suplantación . Por supuesto, con los derechos correspondientes. Y para esto, solo usando la bandera --as es suficiente .

Por ejemplo:

# jorge
$ oc --as=jorge get pods

La suplantación no solo funciona para los usuarios, sino también para los grupos:

# developers
$ oc --as-group=developers get pods

La suplantación es útil en una variedad de casos. Por ejemplo, cuando necesita verificar si el usuario puede realizar una u otra acción, o ver qué le emite el comando oc . La suplantación también ayuda mucho con la confusión con roles y permisos.

3. Whoami


El equipo de oc whoami probablemente es familiar para todos. Especialmente el indicador -t , que le permite obtener el token de medios para el usuario / sesión actual. Pero, ¿qué pasa si tienes una ficha, pero no eres su dueño?

En este caso, puede iniciar sesión en OpenShift utilizando este token y luego ejecutar el comando oc whoami . Aunque, espere, puede averiguar de inmediato el nombre del propietario simplemente pasando el token al comando oc whoami como tercer argumento sin ninguna bandera.

Ver:
#
$ token=$(oc whoami -t)

#
$ oc whoami $token
jorge

4. oc depuración


Como sabes, un shell se puede ejecutar directamente en un pod de ejecución. A veces es útil hacer una copia completa de la configuración del pod en ejecución y solucionar problemas a través del shell. Este es el llamado método predeterminado.

Ahora eche un vistazo a lo que las opciones de depuración oc le permiten hacer: puede ejecutar el contenedor como root o cualquier otro usuario; puede ejecutarlo en el nodo seleccionado o puede ejecutarlo no en un shell, sino en otro comando.

En este caso, debe especificar la CC correcta, por ejemplo:
# shell pod' dc/jorge
$ oc debug dc/jorge

# , root
$ oc debug --as-root=true dc/jorge

5. oc explicar


Los objetos OpenShift / Kubernetes a veces tienen una gran cantidad de campos. Al buscar ejemplos de definiciones para tales objetos, a menudo tiene que recurrir a la documentación para OCP u otras fuentes primarias. Sin embargo, también puede usar el comando oc explicar .

Este comando muestra documentación sobre los recursos y sus campos, lo cual es muy útil al declarar nuevos objetos OCP o en casos en los que no tiene acceso a la documentación oficial de OCP.

Por ejemplo, aquí se explica cómo obtener la documentación del pod y una descripción de los campos de afinidad:

 # obtener ayuda en el pod
 $ oc explicar pod
 DESCRIPCION:
 Pod es una colección de contenedores que pueden ejecutarse en un host.  Este recurso es creado por clientes y programado en hosts.

 CAMPOS:
   metadatos <Objeto>
     Metadatos del objeto estándar.  Más información:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

   especificación <Objeto>
     Especificación del comportamiento deseado del pod.  Más información:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

   estado <Objeto>
     Estado observado más recientemente de la vaina.  Es posible que estos datos no estén actualizados.
     Poblado por el sistema.  Solo lectura  Más información:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

   apiVersion <cadena>
     APIVersion define el esquema versionado de esta representación de un
     objeto  Los servidores deben convertir los esquemas reconocidos al último interno
     valor, y puede rechazar valores no reconocidos.  Más información:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

   tipo <cadena>
     Tipo es un valor de cadena que representa el recurso REST de este objeto
     representa.  Los servidores pueden inferir esto desde el punto final que envía el cliente
     solicitudes a.  No se puede actualizar.  En CamelCase.  Más información:
     http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

 # obtener descripción del campo de afinidad
 $ oc explicar pod.spec.affinity
 RECURSO: afinidad <Objeto>

 DESCRIPCION:
     Si se especifica, las restricciones de programación del pod

    Affinity es un grupo de reglas de programación de afinidad.

 CAMPOS:
   nodeAffinity <Objeto>
     Describe las reglas de programación de afinidad de nodos para el pod.

   podAffinity <Objeto>
     Describe las reglas de programación de afinidad de pod (por ejemplo, ubicar este pod en el
     mismo nodo, zona, etc.  como alguna otra vaina (s)).

   podAntiAffinity <Objeto>
     Describe las reglas de programación antiafinidad del pod (por ejemplo, evite colocar este pod
     en el mismo nodo, zona, etc.  como alguna otra vaina (s)).

6. Olvídate de grep, awk, cut, etc.


Otra característica interesante del comando oc son las funciones de formato de salida incorporadas. Todos conocen las opciones -o json o -o yaml , pero la bandera -o tiene muchas otras opciones.

Los más poderosos son probablemente go-template y jsonpath :

json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...

Supongamos que desea saber qué servicio proporciona una ruta específica (la ruta de registro del acoplador):

# , , my-docker-registry.example.com
$ oc get routes -o=go-template='{{range .items}}{{if eq .spec.host "my-docker-registry.example.com"}}{{.metadata.name}}{{end}}{{end}}'
docker-registry

O, digamos que necesita conocer la estrategia de implementación del enrutador dc del enrutador:

#
$ oc get dc router -o=go-template='{{ .spec.strategy.type }}'
Rolling

Como puede ver, oc es un equipo increíble. Definitivamente vale la pena jugar, ya que es una de las mejores cosas de OpenShift.

Si desea obtener más información sobre las características interesantes de OpenShift, le recomendamos que consulte nuestro blog Red Hat Developer : aquí encontrará no solo artículos de nuestros desarrolladores sobre casi cualquier tema, sino también un gran catálogo de literatura gratuita . Y puede actualizar nuestra publicación sobre cómo implementar Minishift en su computadora portátil y comenzar a vivir .

Source: https://habr.com/ru/post/es418437/


All Articles