Openshift Container Platform Labs
IMPORTANTE
Adapte las instrucciones para su sistema operativo.
Hello World (podinfo)
-
Ingrese a su plataforma de Openshift via CLI
-
Cree un proyecto llamado
devuserXX, remplaceXXpor el número asignado a su usuario.oc new-project devuserXX-hello -
Cree la definición del recurso tipo deployment haciendo uso del comando
oc. Cree todo el siguiente ejercicio en un directorio llamadohello-manifests.mkdir hello-manifestsoc create deployment podinfo --image=docker.io/stefanprodan/podinfo:latest --port=9898 -o yaml --dry-run=client > deployment-hello.yaml -
Explore el archivo creado.
Salida similar:cat deployment-hello.yamlNote la cantidad de contenedores [1] y la secciónapiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: podinfo name: podinfo spec: replicas: 1 selector: matchLabels: app: podinfo strategy: {} template: metadata: creationTimestamp: null labels: app: podinfo spec: containers: - image: docker.io/stefanprodan/podinfo:latest name: podinfo ports: - containerPort: 9898 resources: {}resourcesvacía. Esto nos indica que no se tiene definos límites de recursos para el contenedor adentro del pod llamadapodinfo.RECOMENDACIÓN
Todas las cargas de trabajo deben tener recursos definidos.
-
Modifique la sección de
resoucescon el siguinete contenido, asegurese de utilizar la indentación adecuada.resources: requests: cpu: 50m memory: 32Mi limits: cpu: 100m memory: 128Mi -
El resultado final será similar a:
apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: podinfo name: podinfo spec: replicas: 1 selector: matchLabels: app: podinfo strategy: {} template: metadata: creationTimestamp: null labels: app: podinfo spec: containers: - image: docker.io/stefanprodan/podinfo:latest name: podinfo ports: - containerPort: 9898 resources: requests: cpu: 50m memory: 32Mi limits: cpu: 100m memory: 128Mi -
Aplique los cambios en su ambiente.
oc apply -f deployment-hello.yaml -
Liste los pods en ejecución.
Salida similar a:oc get podsNAME READY STATUS RESTARTS AGE podinfo-c57b77b97-5j9b7 1/1 Running 0 55s -
Liste los pods en ejecución y sus etiquetas.
Salida similar a:oc get pods --show-labelsNAME READY STATUS RESTARTS AGE LABELS podinfo-c57b77b97-5j9b7 1/1 Running 0 2m18s app=podinfo,pod-template-hash=c57b77b97 -
Obtener los pod(s) con la etiqueta
app=podinfo.Salida similar:oc get pods -l app=podinfoNAME READY STATUS RESTARTS AGE podinfo-c57b77b97-5j9b7 1/1 Running 0 4m10s -
Obtenga los logs de la ejeción de los pods con esa etiqueta.
Salida similar:oc logs -l app=podinfoPuede observar que se ha ejecutado de forma satisfactoria.{"level":"info","ts":"2025-08-13T03:52:45.944Z","caller":"podinfo/main.go:153","msg":"Starting podinfo","version":"6.9.1","revision":"cdd09cdd3daacc3082d5a78062ac493806f7abd0","port":"9898"} {"level":"info","ts":"2025-08-13T03:52:45.945Z","caller":"http/server.go:224","msg":"Starting HTTP Server.","addr":":9898"} -
Obtenga información acerca de los recursos del pod.
En la salida identifique la sección:oc describe pod -l app=podinfoObserve los recursos asignados a este pod.Containers: podinfo: Container ID: cri-o://a533a78bbefd0cc6a0cdff9dd2a695d9b1ac73ff5a99e8629b8d8bcfcb785782 Image: docker.io/stefanprodan/podinfo:latest Image ID: docker.io/stefanprodan/podinfo@sha256:262578cde928d5c9eba3bce079976444f624c13ed0afb741d90d5423877496cb Port: 9898/TCP Host Port: 0/TCP State: Running Started: Tue, 12 Aug 2025 21:52:45 -0600 Ready: True Restart Count: 0 Limits: cpu: 100m memory: 128Mi Requests: cpu: 50m memory: 32Mi Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-k4rbm (ro) -
Modifique el archivo de definición del recurso deployment y remplace el valor de
replicasa2.spec: replicas: 2 -
Valida las diferencias entre el estado
deseadoy el estadoactual.Salida similar:oc diff -f deployment-hello.yamlNote el cambio que se aplicará antes de ejecutarlo:kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"creationTimestamp":null,"labels":{"app":"podinfo"},"name":"podinfo","namespace":"devuser0-hello"},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"podinfo"}},"strategy":{},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"podinfo"}},"spec":{"containers":[{"image":"docker.io/stefanprodan/podinfo:latest","name":"podinfo","ports":[{"containerPort":9898}],"resources":{"limits":{"cpu":"100m","memory":"128Mi"},"requests":{"cpu":"50m","memory":"32Mi"}}}]}}}} creationTimestamp: "2025-08-13T03:52:42Z" - generation: 4 + generation: 5 labels: app: podinfo name: podinfo @@ -15,7 +15,7 @@ uid: cdbbefac-206d-4988-ae1b-6254f284177c spec: progressDeadlineSeconds: 600 - replicas: 1 + replicas: 2 revisionHistoryLimit: 10 selector: matchLabels:replicas=1->2. -
Aplique los cambios en su ambiente.
Salida:oc apply -f deployment-hello.yamldeployment.apps/podinfo configured -
Liste los pods nuevamnete con las mimas etiquetas.
Salida:oc get pods -l app=podinfoNAME READY STATUS RESTARTS AGE podinfo-58954d6f47-jvp72 1/1 Running 0 5m2s podinfo-58954d6f47-pp7lv 1/1 Running 0 29s -
Escoja uno de los dos pods y elimine uno.
oc delete pod podinfo-XXXXX -
Liste los pods nuevamnete con las mimas etiquetas.
Deberá observar la misma cantidad de podsoc get pods -l app=podinfo2. -
Cree la definición de un recurso tipo
servicepara el recursodeploymenta partir del comando oc.oc expose deployment podinfo -o yaml --dry-run=client > service-hello.yaml -
Explore la definición del servicio.
Salida:cat sevice-hello.yamlapiVersion: v1 kind: Service metadata: creationTimestamp: null labels: app: podinfo name: podinfo spec: ports: - port: 9898 protocol: TCP targetPort: 9898 selector: app: podinfo status: loadBalancer: {} -
Aplique los cambios en su ambiente.
oc apply -f service-hello.yaml -
Observer el recurso creado
service.Salida:oc describe service podinfoName: podinfo Namespace: devuser0-hello Labels: app=podinfo Annotations: <none> Selector: app=podinfo Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: X.X.X.X IPs: X.X.X.X Port: <unset> 9898/TCP TargetPort: 9898/TCP Endpoints: Y.Y.Y.Y:9898,Z.Z.Z.Z:9898 Session Affinity: None Internal Traffic Policy: Cluster Events: <none> -
Cree la definición de un recurso tipo
routepara exponer el servicio al exterior utilizando el comando oc.bash oc expose service podinfo -o yaml --dry-run=client > route-hello.yaml -
Explore la definición del servicio.
Salida:cat route-hello.yamlapiVersion: route.openshift.io/v1 kind: Route metadata: creationTimestamp: null labels: app: podinfo name: podinfo spec: port: targetPort: 9898 to: kind: "" name: podinfo weight: null -
Aplique los cambios en su ambiente.
oc apply -f route-hello.yaml -
Obtener el host asignado e la ruta.
Salida:oc get route podinfoNAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD podinfo podinfo-devuser0-hello.apps.XXXXX podinfo 9898 None -
Valide el acceso a su aplicación via CLI.
Salida:cur; http://podinfo-devuser0-hello.apps.XXXXX{ "hostname": "podinfo-58954d6f47-pp7lv", "version": "6.9.1", "revision": "cdd09cdd3daacc3082d5a78062ac493806f7abd0", "color": "#34577c", "logo": "https://raw.githubusercontent.com/stefanprodan/podinfo/gh-pages/cuddle_clap.gif", "message": "greetings from podinfo v6.9.1", "goos": "linux", "goarch": "arm64", "runtime": "go1.24.5", "num_goroutine": "6", "num_cpu": "4" }% -
Utilizando el browser.

-
Eliminar todo el proyecto.
Puede tomar unos minutos.oc delete project devuserXX-hello -
Valide el acceso a su aplicación via CLI.
Debe mostrar error.curl http://podinfo-devuser0-hello.apps.XXXXX -
Cree de nuevo todos los recursos.
oc new-project devuserXX-helloSalida:oc apply -f hello-manifestsdeployment.apps/podinfo created route.route.openshift.io/podinfo created service/podinfo created -
Valide el acceso a su aplicación via CLI.
Salida:curl http://podinfo-devuser0-hello.apps.XXXXX{ "hostname": "podinfo-58954d6f47-pp7lv", "version": "6.9.1", "revision": "cdd09cdd3daacc3082d5a78062ac493806f7abd0", "color": "#34577c", "logo": "https://raw.githubusercontent.com/stefanprodan/podinfo/gh-pages/cuddle_clap.gif", "message": "greetings from podinfo v6.9.1", "goos": "linux", "goarch": "arm64", "runtime": "go1.24.5", "num_goroutine": "6", "num_cpu": "4" }% -
Modique el recurso tipo deployment agregando confguración por medio de variables de entorno. Agregue la sección
enven el contenedor podinfo dentro del template del pod. Se ha omitido el resto del recurso.spec: containers: - image: quay.io/erickeliseo/stefanprodan/podinfo name: podinfo env: - name: PODINFO_UI_MESSAGE value: DEMO-OCP -
Aplique los cambios en su ambiente.
Espere a que los pods estén en estadooc apply -f deployment-hello.yamlReady. -
Valide el acceso a su aplicación via CLI.
Salida:curl http://podinfo-devuser0-hello.apps.XXXXXNote el valor en{ "hostname": "podinfo-955b49456-2b92f", "version": "6.9.1", "revision": "cdd09cdd3daacc3082d5a78062ac493806f7abd0", "color": "#34577c", "logo": "https://raw.githubusercontent.com/stefanprodan/podinfo/gh-pages/cuddle_clap.gif", "message": "DEMO-OCP", "goos": "linux", "goarch": "arm64", "runtime": "go1.24.5", "num_goroutine": "7", "num_cpu": "4" }%message=DEMO-OCP. -
Agregue a su definición del recurso tipo deployment validaciones/checks que se ejecutarán en diferentes momentos del inicio,disponibilidad y vide de los pods. Agregue la siguiente sección en la sección de contenedor
podinfoal mismo nivel queresourcesyenv. Se ha omitido el resto del recurso.livenessProbe: exec: command: - podcli - check - http - localhost:9898/healthz readinessProbe: exec: command: - podcli - check - http - localhost:9898/healthz startupProbe: exec: command: - podcli - check - http - localhost:9898/healthzRECOMENDACIÓN
Todas las cargas de trabajo deben tener validaciones definidas.
-
Aplique los cambios en su ambiente.
Note que puede tomar unos segundos dependiendo de las validaciones realizadas.oc apply -f deployment-hello.yaml -
Puede obtener los eventos de forma constante con el comando:
Puede Presionaroc get events --sort-by='.lastTimestamp' -wCtrl+Cpara detener el proceso. -
Elimine nuevamente el proyecto.
oc delete project devuserXX-hello