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 .