From 95fca613291feb61136c738e397554061f73dd18 Mon Sep 17 00:00:00 2001 From: niceredfrog Date: Fri, 13 Dec 2024 03:21:45 -0800 Subject: [PATCH] Proofread and add helpful context in Redis/ConfigMap Tutorial MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instructions were: Edit the tutorial as though you’re getting it ready to publish. This tutorial suffers from assumptions about the prior knowledge of the reader. There are some parts that could benefit from reorganization. - Added context about the use case and audience for this tutorial. - Divided the tutorial into numbered steps. - Added (fictional or best-guess) details to help the reader understand the commands in the tutorial. - Added connecting language to show why one step follows another. - Added sections: an Overview of all the steps up top, Why Read This, Who Should Read This, definitions of key Terms, and Troubleshooting - Fixed proofreading items like inconsistent periods in bulleted lists, inconsistent capitalization in heading, capitalization of Pod/pod, Latinisms, above/below --- .../configure-redis-using-configmap.md | 136 ++++++++++++++---- 1 file changed, 108 insertions(+), 28 deletions(-) diff --git a/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md b/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md index a9cf3dae9458b..edad657d6fcac 100644 --- a/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md +++ b/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md @@ -9,12 +9,34 @@ weight: 30 -This page provides a real world example of how to configure Redis using a ConfigMap and builds upon the [Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) task. +This page provides a real-world example of how to configure Redis using a ConfigMap. +## Why Configure Redis Using a ConfigMap? + + + +Redis is a popular open-source database. When deployed on Kubernetes, it gains the benefits of container orchestration, +including increased reliability and performance. To deploy Redis on Kubernetes, you must set up a Redis Pod using a +ConfigMap. + +## Who Should Do This Tutorial? + + + +This Tutorial is for Redis administrators who want to use Kubernetes to manage their Redis servers. + +## Terms + + +* **ConfigMap**: A Kubernetes configuration file used to set values in a Pod. See [ConfigMaps](https://kubernetes.io/docs/concepts/configuration/configmap/). +* **Redis**: (REmote DIctionary Server) An open-source, in-memory database. See [Introduction to Redis](https://redis.io/about/) (external link). +* **Pod**: The smallest unit of computing that you can deploy in Kubernetes. See [Pods](https://kubernetes.io/docs/concepts/workloads/pods/). + ## {{% heading "objectives" %}} +By the end of this Tutorial, you will: * Create a ConfigMap with Redis configuration values * Create a Redis Pod that mounts and uses the created ConfigMap @@ -27,19 +49,29 @@ This page provides a real world example of how to configure Redis using a Config {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} -* The example shown on this page works with `kubectl` 1.14 and above. -* Understand [Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/). +The example shown on this page works with `kubectl` 1.14 and above. +Understand the concepts and procedures in [Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/). -## Real World Example: Configuring Redis using a ConfigMap +## Tutorial Steps: Configuring Redis using a ConfigMap + +Follow these steps to configure a Redis cache using data stored in a ConfigMap: -Follow the steps below to configure a Redis cache using data stored in a ConfigMap. +* [Step 1: Create a ConfigMap](#step-1-create-a-configmap) +* [Step 2: Apply the ConfigMap and Pod Manifest](#step-2-apply-the-configmap-and-pod-manifest) +* [Step 3: Examine the Created Objects](#step-3-examine-the-created-objects) +* [Step 4: Check the Current Pod Configuration](#step-4-check-the-current-pod-configuration) +* [Step 5: Add Configuration Values](#step-5-add-configuration-values) +* [Step 6: Restart the Redis Pod](#step-6-restart-the-redis-pod) +* [Step 7: Clean Up](#step-7-clean-up) -First create a ConfigMap with an empty configuration block: +### Step 1: Create a ConfigMap + +Create a ConfigMap named `example-redis-config` with an empty configuration block (`redis-config: ""`): ```shell cat <./example-redis-config.yaml @@ -52,26 +84,40 @@ data: EOF ``` -Apply the ConfigMap created above, along with a Redis pod manifest: +### Step 2: Apply the ConfigMap and Pod Manifest + +Apply the ConfigMap you created, along with the example Redis Pod manifest `redis-pod.yaml` that has been provided to you as part of this Tutorial: ```shell kubectl apply -f example-redis-config.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml ``` -Examine the contents of the Redis pod manifest and note the following: +In this step, you used the `kubectl apply` command. This command applies a configuration to a resource - in this case, your Pod. +Because the Pod did not already exist, the command creates it. + +For more information about this command, see [kubectl apply](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_apply/). + +Before moving on, you can learn more about what you did in this step. +Examine the contents of the Redis Pod manifest by opening the file `kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml`. + +{{% code_sample file="pods/config/redis-pod.yaml" %}} + +In the manifest, you can see the following: -* A volume named `config` is created by `spec.volumes[1]` +* A volume named `config` is created by `spec.volumes[1]`. * The `key` and `path` under `spec.volumes[1].configMap.items[0]` exposes the `redis-config` key from the `example-redis-config` ConfigMap as a file named `redis.conf` on the `config` volume. * The `config` volume is then mounted at `/redis-master` by `spec.containers[0].volumeMounts[1]`. This has the net effect of exposing the data in `data.redis-config` from the `example-redis-config` -ConfigMap above as `/redis-master/redis.conf` inside the Pod. +ConfigMap above as `/redis-master/redis.conf` inside the new Pod. -{{% code_sample file="pods/config/redis-pod.yaml" %}} +### Step 3: Examine the Created Objects -Examine the created objects: +To verify that the Pod was created correctly, examine the created objects. + +First, get the information about the Pod and ConfigMap: ```shell kubectl get pod/redis configmap/example-redis-config @@ -87,7 +133,8 @@ NAME DATA AGE configmap/example-redis-config 1 14s ``` -Recall that we left `redis-config` key in the `example-redis-config` ConfigMap blank: +Next, take a closer look at the ConfigMap. Recall that you left the `redis-config` key blank in the `example-redis-config` ConfigMap. +Run the following command to confirm: ```shell kubectl describe configmap/example-redis-config @@ -106,19 +153,31 @@ Data redis-config: ``` -Use `kubectl exec` to enter the pod and run the `redis-cli` tool to check the current configuration: +In this step, you used two commands. If you want to learn more about them, see: + +* [kubectl get](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_get/) +* [kubectl describe](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_describe/) + +### Step 4: Check the Current Pod Configuration + + +To check the current configuration of your new Redis Pod, you need to run commands on Redis. +You can use the `kubectl exec` command to execute commands inside a container, like your Redis Pod. +Access the Pod and start the Redis command-line tool `redis-cli`: ```shell kubectl exec -it redis -- redis-cli ``` +Now you can use Redis commands to check the current configuration. + Check `maxmemory`: ```shell 127.0.0.1:6379> CONFIG GET maxmemory ``` -It should show the default value of 0: +It should show the default value, 0: ```shell 1) "maxmemory" @@ -131,18 +190,27 @@ Similarly, check `maxmemory-policy`: 127.0.0.1:6379> CONFIG GET maxmemory-policy ``` -Which should also yield its default value of `noeviction`: +It should show the default value, `noeviction`: ```shell 1) "maxmemory-policy" 2) "noeviction" ``` -Now let's add some configuration values to the `example-redis-config` ConfigMap: +For more information about the commands you used in this step, see: +* [kubectl exec](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_exec/) +* [Redis CLI](https://redis.io/docs/latest/develop/tools/cli/) (external link) +* [CONFIG GET](https://redis.io/docs/latest/commands/config-get/) (external link) + +### Step 5: Add Configuration Values + +Now that the Redis Pod has been created, add some configuration values to the `example-redis-config` ConfigMap +and apply them to the Pod. +Open the file `pods/config/example-redis-config.yaml` and edit the `redis-config` section to look like the following: {{% code_sample file="pods/config/example-redis-config.yaml" %}} -Apply the updated ConfigMap: +Apply the updated ConfigMap to the Redis Pod: ```shell kubectl apply -f example-redis-config.yaml @@ -154,7 +222,7 @@ Confirm that the ConfigMap was updated: kubectl describe configmap/example-redis-config ``` -You should see the configuration values we just added: +You should see the configuration values you just added: ```shell Name: example-redis-config @@ -170,7 +238,10 @@ maxmemory 2mb maxmemory-policy allkeys-lru ``` -Check the Redis Pod again using `redis-cli` via `kubectl exec` to see if the configuration was applied: +### Step 6: Restart the Redis Pod + +The ConfigMap is updated with new configuration values, but you have to restart the Pod for the new configuration to take effect. +If you want to confirm that the new configuration has not yet been applied, check the Redis Pod again using `kubectl exec` and `redis-cli`: ```shell kubectl exec -it redis -- redis-cli @@ -189,28 +260,29 @@ It remains at the default value of 0: 2) "0" ``` -Similarly, `maxmemory-policy` remains at the `noeviction` default setting: +Check `maxmemory-policy`: ```shell 127.0.0.1:6379> CONFIG GET maxmemory-policy ``` -Returns: +It remains at the `noeviction` default setting: ```shell 1) "maxmemory-policy" 2) "noeviction" ``` -The configuration values have not changed because the Pod needs to be restarted to grab updated -values from associated ConfigMaps. Let's delete and recreate the Pod: +When you restart a Pod, it gets updated values from all of its associated ConfigMaps. + +To restart the Redis Pod, delete and recreate it: ```shell kubectl delete pod redis kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml ``` -Now re-check the configuration values one last time: +To verify, check the configuration values again: ```shell kubectl exec -it redis -- redis-cli @@ -222,7 +294,7 @@ Check `maxmemory`: 127.0.0.1:6379> CONFIG GET maxmemory ``` -It should now return the updated value of 2097152: +It should now show the updated value of 2097152: ```shell 1) "maxmemory" @@ -235,19 +307,27 @@ Similarly, `maxmemory-policy` has also been updated: 127.0.0.1:6379> CONFIG GET maxmemory-policy ``` -It now reflects the desired value of `allkeys-lru`: +It now shows the desired value of `allkeys-lru`: ```shell 1) "maxmemory-policy" 2) "allkeys-lru" ``` -Clean up your work by deleting the created resources: +### Step 7: Clean Up + +Clean up your work by deleting the resources you created: ```shell kubectl delete pod/redis configmap/example-redis-config ``` +## Troubleshooting + + + +If you need help at any point while doing this Tutorial, contact our [Tutorial Hotline](https://fictionalsite.com). + ## {{% heading "whatsnext" %}}