Jump to content

DevOps/Kubernetes/Certified Kubernetes Administrator/Create and configure basic Pods

From Wikiversity

Create a Pod

[edit | edit source]
kubectl create namespace MY_TEST_NAMESPACE
kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml --namespace=MY_TEST_NAMESPACE[2]
To verify container is running:
kubectl get pod NAME_POD --namespace=MY_TEST_NAMESPACE

DevOps/Kubernetes/Certified Kubernetes Administrator/Create and configure basic Pods|Create and configure basic Pods]]

Set up a Volume for a Pod

[edit | edit source]

The file system of a Container exists as long as the Container exists. Therefore, when a Container is destroyed or restarted, changes made to the file system are lost. For more consistent storage that is independent of the Container life cycle, you can use a Volume, review different Volume types in https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes.

This feature is especially important for applications that must maintain a status, such as key-value storage engines (for example Redis) and databases.

Create a Pod that runs a single Container. This Pod has a Volume of type emptyDir (empty directory) (see Volume for volume types) that exists throughout the Pod's life cycle, even when the Container is destroyed and restarted. Here is the Pod configuration file:

pods/storage/redis.yaml

apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis
    volumeMounts:
    - name: redis-storage
      mountPath: /data/redis
  volumes:
  - name: redis-storage
    emptyDir: {}


1.Create the Pod kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml

2. Verify the Pod Container is running kubectl get pod redis --watch

output:

NAME      READY     STATUS    RESTARTS   AGE
redis     1/1       Running   0          13s

3.In another terminal, open an interactive session inside the Container that is running: kubectl exec -it redis -- /bin/bash

4.In the terminal, go to /data/redis and create a file:

root@redis:/data# cd /data/redis/
root@redis:/data/redis# echo Hello > test-file

5.In the terminal, list the running processes:

root@redis:/data/redis# apt-get update
root@redis:/data/redis# apt-get install procps
root@redis:/data/redis# ps aux

output:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
redis        1  0.1  0.1  33308  3828 ?        Ssl  00:46   0:00 redis-server *:6379
root        12  0.0  0.0  20228  3020 ?        Ss   00:47   0:00 /bin/bash
root        15  0.0  0.0  17500  2072 ?        R+   00:48   0:00 ps aux

6.In the terminal, kill the Redis process:

root@redis:/data/redis# kill <pid>

where <pid>is the process ID (PID) of Redis.

7.In the original terminal, observe the changes in the Redis Pod. You will eventually see something like the following:

NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s redis 0/1 Completed 0 6m redis 1/1 Running 1 6m

At this point, the Container has been destroyed and restarted. This is because the Redis Pod has a restartPolicy (restart policy) of Always(always).

1.Open a terminal in the restarted Container:

kubectl exec -it redis -- /bin/bash

2.In the terminal, go to /data/redisand verify that it test-filestill exists:

root@redis:/data/redis# cd /data/redis/ root@redis:/data/redis# ls test-file

3.Remove the Pod you created for this exercise:

kubectl delete pod redis

  1. https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/
  2. https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/