CKAD Practice Exam - Part 2

1.5 hours
  • 3 Learning Objectives

About this Hands-on Lab

This lab is designed to help prepare for the kinds of tasks and scenarios encountered during the Certified Kubernetes Application Developer (CKAD) exam. In this lab, we will practice working with multi-container pods by creating a pod that implements an adapter design pattern. We will create a pod that generates some log output and uses an adapter pod to format the output.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create a ConfigMap to Store the fluentd Configuration
  1. Switch to root so you can read the config file:

    sudo -i
  2. Get the contents of the config file:

    cat /usr/ckad/fluent.conf
  3. Create a descriptor for the ConfigMap with vi fluentd-config.yml:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: fluentd-config
    data:
      fluent.conf: |
        <source>
          type tail
          format none
          path /var/log/1.log
          pos_file /var/log/1.log.pos
          tag count.format1
        </source>
    
        <source>
          type tail
          format none
          path /var/log/2.log
          pos_file /var/log/2.log.pos
          tag count.format2
        </source>
    
        <match **>
          @type file
          path /var/logout/count
          time_slice_format %Y%m%d%H%M%S
          flush_interval 5s
          log_level trace
        </match>
  4. Create the ConfigMap in the cluster:

    kubectl apply -f fluentd-config.yml
Create the Pod Descriptor
  1. Switch to root so you can work with the descriptor file:

    sudo -i
  2. Edit the descriptor file with vi /usr/ckad/adapter-pod.yml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: counter
    spec:
      containers:
      - name: count
        image: busybox
        args:
        - /bin/sh
        - -c
        - >
          i=0;
          while true;
          do
            echo "$i: $(date)" >> /var/log/1.log;
            echo "$(date) INFO $i" >> /var/log/2.log;
            i=$((i+1));
            sleep 1;
          done
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      - name: adapter
        image: k8s.gcr.io/fluentd-gcp:1.30
        env:
        - name: FLUENTD_ARGS
          value: -c /fluentd/etc/fluent.conf
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: config-volume
          mountPath: /fluentd/etc
        - name: logout
          mountPath: /var/logout
      volumes:
      - name: varlog
        emptyDir: {}
      - name: config-volume
        configMap:
          name: fluentd-config
      - name: logout
        hostPath:
          path: /usr/ckad/log_output
Create the Pod in the Cluster and Make Sure It Is Working
  1. Create the pod:

    kubectl apply -f /usr/ckad/adapter-pod.yml
  2. Verify that the pod starts up:

    kubectl get pod counter
  3. You can also verify that everything is working by checking the output directory on the worker node. Log in to the worker from the master:

    ssh cloud_user@10.0.1.102
  4. Look for the fluentd output files in the output directory:

    ls /usr/ckad/log_output

Additional Resources

This lab is designed to help prepare for the kinds of tasks and scenarios encountered during the Certified Kubernetes Application Developer (CKAD) exam.


Our team has a pod that generates some log output. However, they want to consume the data using an external application, which requires the data to be in a specific format. Our task is to create a pod design that utilizes an adapter running fluentd to format the output from the main container.

  • There is a fluentd configuration located on the server at /usr/ckad/fluent.conf. Load the data from this file into a ConfigMap called fluentd-config.

  • Create the pod descriptor in /usr/ckad/adapter-pod.yml. An empty file has already been created for us.

  • The pod should be named counter.

  • Add a container to the pod that runs the busybox image, and name it count.

  • Run the count container with the following arguments:

    - /bin/sh
    - -c
    - >
    i=0;
    while true;
    do
      echo "$i: $(date)" >> /var/log/1.log;
      echo "$(date) INFO $i" >> /var/log/2.log;
      i=$((i+1));
      sleep 1;
    done
  • Add another container called adapter to the pod, and make it run the k8s.gcr.io/fluentd-gcp:1.30 image.

  • Add an environment variable to the adapter container called FLUENTD_ARGS with the value -c /fluentd/etc/fluent.conf.

  • Mount the fluentd-config ConfigMap to the adapter container so that the config data is located inside the container in a file at /fluentd/etc/fluent.conf.

  • Create a volume for the pod in such a way that the storage will be deleted if the pod is removed from a node. Mount this volume to both containers at /var/log. The count container will output log data to this volume, and the adapter container will read the data from the same volume.

  • Create a hostPath volume where the adapter container will output the formatted log data. Store the data at the /usr/ckad/log_output path. Mount the volume to the adapter container at /var/logout.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?