Guided Exercise: Running and Interacting with Your First Application

In this exercise, you will create a pod and connect to it. You will also create and manage a new namespace resource by using a resource definition file that you create.


You should be able to:

  • Connect a shell session to an existing pod.

  • Create a resource definition file.

  • Use a resource definition to create and update a namespace resource.


You do not need to understand Kubernetes namespaces to do this exercise, as they are solely used as an example resource.


You need a working Kubernetes cluster, and your kubectl command must be configured to communicate with the cluster.

Ensure your kubectl context refers to the user-dev namespace. Use the kubectl config set-context --current --namespace=user-dev command to switch to the appropriate namespace.


1) Use kubectl run and kubectl exec to create a new pod and attach a shell session to it.

1.1) Create a new pod named webserver that uses the httpd container image.


This course uses the backslash character (\) to break long commands. On Linux and macOS, you can use the line breaks.

On Windows, use the backtick character (`) to break long commands. Alternatively, do not break long commands.

[user@host ~] kubectl run webserver \
pod/webserver created

1.2) Confirm the webserver pod is running.

[user@host ~] kubectl get pods
webserver   1/1     Running   0          5s

1.3) Connect to the pod by using kubectl exec.

[user@host ~] kubectl exec --stdin --tty \
webserver -- /bin/bash

1.4) View the contents of the httpd configuration file within the pod.

[root@webserver:/#] cat /etc/httpd/conf/httpd.conf
...output omitted...
ServerAdmin root@localhost
...output omitted...

1.5) Disconnect from the pod by using the exit command.

[root@webserver:/#] exit

2) Create a pod resource definition file and use that file to create another pod in your cluster.

2.1) Create a new file named probes-pod.yml. Add the following resource manifest to the file.

apiVersion: v1
kind: Pod
  name: probes
    app: probes
  namespace: user-dev
    - name: probes
      image: ''
        - containerPort: 8080

Replace user by your OpenShift Developer Sandbox username.

You can generate the basic YAML file with the kubectl run command

[user@host ~] kubectl run probes \
--dry-run=client -o yaml

2.2) Use the kubectl create command to create a new pod from the resource manifest file.

[user@host ~] kubectl create -f probes-pod.yml
pod/probes created

2.3) Verify that the pod is running.

[user@host ~] kubectl get pods
probes        1/1     Running   0          15s
webserver     1/1     Running   0          10m

3) Modify the field of the pod manifest and apply the changes.

3.1) Open the probes-pod.yaml file. Replace probes by do100-probes in the field.

apiVersion: v1
kind: Pod
  name: probes
    app: do100-probes
...output omitted...

3.2) Attempt to update the pod by using the kubectl create command.

[user@host ~] kubectl create -f probes-pod.yml
Error from server (AlreadyExists): error when creating "probes-pod.yml": pods "probes" 
already exists

Notice the error. Because you have previously created the pod, you can not use kubectl create.

3.3) Update the pod by using the kubectl apply command.

[user@host ~] kubectl apply -f probes-pod.yml
pod/probes configured


The preceding usage of kubectl apply produces a warning that the annotation is missing. In most scenarios, this can be safely ignored.

Ideally, to use kubectl apply in this precise manner, you should use the --save-config option with kubectl create.

3.4) Verify that the label has been updated by using the kubectl describe pod.

[user@host ~] kubectl describe pod probes
Name:                 probes
Namespace:            user-dev
...output omitted...
Labels:               app=do100-probes
...output omitted...


Delete the pod and namespace to clean your cluster.

[user@host ~]$ kubectl delete pod/webserver
pod "webserver" deleted
[user@host ~]$ kubectl delete pod/probes
pod "probes" deleted