Si tiene muchos clústeres de Kubernetes, a veces necesita usar el directo kubectl
comando para acceder a su clúster. Esto puede deberse a que una herramienta de línea de comandos simple suele ser mejor o más rápida, pero algunas operaciones, incluso en otras herramientas más avanzadas, son lentas o pueden causar errores de sintaxis en YAML.
[ Get the YAML cheat sheet. ]
¿Sabía que puede utilizar las herramientas de línea de comandos de OpenShift? oc
reemplazar kubectl
¿Acceso a su clúster de Kubernetes?y oc
puede inyectar secretos, mapas de configuración o volúmenes directamente en su implementación con un solo comando, abra un shell interactivo más rápido con rsh
verifique el secreto decodificado simple o vincule el secreto a una cuenta de servicio para la autenticación.
Si desea seguir estos ejemplos, puede descargar el cliente OpenShift desde Portal de sombrero rojo (se requiere inicio de sesión) o cliente okd Repositorio OKDestoy en un minicubo Ejecutando Kubernetes versión 1.24.
[ For more on minikube, read Start learning Kubernetes from your local machine. ]
es posible que hayas notado oc
más corto que kubectl
, por lo que escribir es más rápido. Pero siempre puedes crear un alias para superar este «problema».¿Cuáles son las diferencias útiles entre oc
y kubectl
?
Tabla de Contenidos
Inyectar secretos o mapas de configuración en implementaciones
¿Con qué frecuencia necesita editar su manifiesto para agregar algunas variables de entorno?puedes usar esto oc
Truco: inyecte secretos o mapas de configuración en pods existentes o variables de entorno de pod implementadas con un solo comando.
usaré oc
cliente y olvidó deliberadamente establecer la variable requerida:
$ oc create deploy mysql --image mysql:5.7
deployment.apps/mysql created
No se pudo iniciar la implementación:
$ oc get pods
NAME READY STATUS RESTARTS AGE
Mysql-ffb7… 0/1 CrashLoopBackOff 1 (2s ago) 31s
Necesito crear un secreto:
$ cat > mysql.env <
Los secretos ahora existen en Kubernetes, usando el subcomando set env
Adjúntelo a la implementación de MySQL:
$ oc set env --from secret/mysql.env deploy/mysql
Espere unos segundos y observe cómo se ejecuta la implementación y configure las variables de entorno especificadas:
$ oc set env --from secret/mysql.env deploy/mysql
deployment.apps/mysql updated
$ oc get pods
NAME READY STATUS RESTARTS AGE
mysql-56db5fbf6c-52ptv 1/1 Running 0 10s
$ oc describe deploy/mysql | grep Environment: -A4
Environment:
MYSQL_ROOT_PASSWORD: Optional: false
MYSQL_USER: Optional: false
MYSQL_DATABASE: Optional: false
MYSQL_PASSWORD: Optional: false
Puedes hacer lo mismo con configmap.
[ Get the Kubernetes basics cheat sheet. ]
Adjunte el volumen a la implementación
Este truco es muy poderoso y útil cuando estás probando. Adjunte volúmenes a pods o implementaciones con un solo comando. El volumen adjunto puede ser un secreto existente, un mapa de configuración o una reclamación de volumen persistente (PVC), o incluso puede crear un nuevo PVC. Aquí hay un ejemplo:
$ oc set volume --add --claim-size 1Gi --mount-path /var/lib/mysql deploy/mysql
info: Generated volume name: volume-xxj6r
deployment.apps/mysql volume updated
Espere unos segundos y podrá describir la implementación o usar un enfoque más elegante oc set volumes deploy/mysql --all
Comprobar volumen. Aquí hay unos ejemplos:
$ oc set volumes deploy/mysql --all
mysql
pvc/pvc-b5vlg (allocated 1GiB) as volume-xxj6r
mounted at /var/lib/mysql
$ oc describe deploy/mysql | grep Volumes: -A4
Volumes:
volume-xxj6r:
Type: PersistentVolumeClaim (a reference to a PVC in the same namespace)
ClaimName: pvc-b5vlg
ReadOnly: false
Puede especificar un PVC existente --claim-name
un secreto --secret-name
o diagrama de configuración --configmap-name
.
[ Get this complimentary eBook from Red Hat: Managing your Kubernetes clusters for dummies. ]
comprobar secreto
Este es uno de mis trucos favoritos para verificar secretos.ver un secreto kubectl
, primero necesito mostrar el secreto y luego convertirlo de Base64.y oc
puedo verlo directamente en la terminal o ponerlo en un archivo:
$ oc extract secret/mysql.env --to=-
En este caso ya que estoy usando --to=-
la salida se muestra en la terminal:
# MYSQL_ROOT_PASSWORD
k8s
# MYSQL_USER
k8s
# MYSQL_DATABASE
k8s
# MYSQL_PASSWORD
k8s
Este método es útil para verificar rápidamente los secretos utilizando contraseñas o tokens de uso común.
[ Getting started with containers? Check out Deploying containerized applications: A technical overview. ]
importar un contenedor
Para irrumpir en un contenedor o acceder a un caparazón dentro de un contenedor, use el comando exec
:
$ kubectl exec -ti deploy/mysql -- sh
Si esa es tu intención, puedes usar oc
:
$ oc rsh deploy/mysql
shell remoto (rsh
) el comando asigna un pseudo tty
Mantener stdin
abrir e inicializar sh
Ordenar. Puede cambiar el comando predeterminado a cualquier otro comando; simplemente especifíquelo como el último argumento.
Vincular o desvincular la autenticación a ServiceAccount
Este consejo es más específico, pero podría ser útil si usa muchos registros externos privados.Puede adjuntar un secreto a una cuenta de servicio de Kubernetes (SA) para la autenticación oc
.
Primero, crearé una implementación con una imagen privada. Si desea continuar, necesitará su propia imagen privada:
$ oc create deploy lua --image hectorvido/lua-app
deployment.apps/lua created
Hubo un problema al descargar la imagen:
$ oc get pods
NAME READY STATUS RESTARTS AGE
lua-7df97f9c94-4zjr6 0/1 ImagePullBackOff 0 20s
mysql-769f4d56b7-95p5z 1/1 Running 0 5m1s
Para solucionar esto, agregue un docker-registry
El secreto de la cuenta de servicio predeterminada.Ya sea creando un secreto y editando la ServiceAccount o usando oc
cliente. Por supuesto, no compartiré mis credenciales aquí; la información confidencial está oculta:
$ oc create secret docker-registry dockerhub \
--docker-username hectorvido \
--docker-password '' \
--docker-server docker.io
secret/dockerhub created
$ oc secrets link default dockerhub --for=pull
La magia aquí es oc secrets link
Ordenar. Agregará el secreto a SA, diciéndole que este secreto se usa exclusivamente para descargar imágenes del repositorio de imágenes. Luego, eliminé el pod para forzar otro intento de descarga:
$ oc delete pod -l app=lua
pod "lua-7df97f9c94-4zjr6" deleted
$ oc get pods
NAME READY STATUS RESTARTS AGE
lua-7df97f9c94-msjzp 1/1 Running 0 22s
mysql-769f4d56b7-95p5z 1/1 Running 0 8m18s
envolver
Como puedes ver, oc
Los comandos funcionan con OpenShift y Kubernetes y son más rápidos de escribir. Esta interoperabilidad es solo un pequeño detalle.Te doy cinco consejos que pueden agilizar tus pruebas e incluso las tareas cotidianas oc
:
oc set env
- Inyectar secretos o mapas de configuración en entornos de contenedores.oc set volume
- Adjunte un PVC, un mapa de configuración o un secreto a un pod.oc extract
- Revelar fácilmente secretos.oc rsh
- Contenedores con menos parámetros de entrada.oc secrets link
- Vincule un secreto a una cuenta de servicio para la autenticación.
Hay más opciones, pero son específicas para la gestión de OpenShift y estas opciones también se aplican a Kubernetes.Sabiendo esto, ¿por qué no intentarlo? oc
¿Empiezas tu trabajo hoy?
[ Learning path: Getting started with Red Hat OpenShift Service on AWS (ROSA) ]