Estudio de CKAD – Día 7

Al grano hoy


Actividad 6: Create a service messaging-service to expose the redis deployment in the marketing namespace within the cluster on port 6379 (use imperative commands)


Primero ‘imperative commands’ se refiere a ‘kubectl create’ sin -f

Para lograr todo este tema primero necesito configurar mi ambiente

  1. Tener un namespace llamado ‘marketing’
  2. Tener un deployment llamado ‘redis’

Y posterior a ello puedo crear el servicio, que no lo he hecho en dias pasados y hoy me limitare a solo comando impertivo. Para que quede grabado en mi mente, que no debo crear un .yaml

Entonces primero

kubectl create namespace marketing

Segundo

kubectl create deployment redis –image=redis –namespace=marketing

Validar (de este me olvide) el flag es –all-namespaces

kubectl get pods –all-namespaces

Bien con eso ya tengo mi contexto. Podria cambiar mi namespace pero de momento no me importa.

Ahora sigue : Expose the service within the cluster

Hay varios tipos de service, segun mi lectura rapida y llms, hay 4

  • ClusterIP: Un IP dentro del Cluster, con solo capacidades internas. (Este es el caso de la pregunta)
  • NodePort: Un IP + un puerto, asociado un IP Externo, fuera del cluster.
  • LoadBalancer: Crea un LoadBalancer externo, con un IP publico que lo relaciona
  • ExternalName: Crea un CName relacionado a un DNS externo.

Para el caso de hoy vamos por ClusterIP

Esta es la documentacion de create service https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_service

Y esta la del comando que necesitamos https://kubernetes.io/docs/reference/kubectl/generated/kubectl_create/kubectl_create_service_clusterip/

kubectl create service clusterip redis-service –tcp6379:6379

Y esto, no sirve para nada. (Tambien me olvide del namespace)

¿Por que? Pues porque estoy creando un servicio para el deployment, este servicio no esta relacionado.

En teoria debo ser capaz de relacionar el servicio de forma declartiva con selectores.

De forma Imperativa el comando que quiero es expose

Vamos con ese

https://kubernetes.io/docs/reference/kubectl/generated/kubectl_expose

kubectl expose deployment redis –port=6379 –target-port=6379 –name=serviceimperative –namespace=marketing

¿Como validar?

kubectl get all -n=marketing

No hay YAMLs para hoy.


¿Que aprendimos?

  • No se debe olvidar –namespace=nombre, al momento de ejecutar los comandos
  • Imperativo se refiere a comados directos con kubectl
  • Los servicios tiene 4 sabores. Espero tener un ejercicio del tipo LoadBalancer mas adelante. O con un DNS autofirmado.
  • No hay un comando directo o sencillo para de forma imperativa relacionar el selector del service. Este es el service construido con el Spec: Selector: app: redis
  • Para exponer un aplicativo se debe usar ‘expose’