# Конфігурування Redis за допомогою ConfigMap

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Ця сторінка надає реальний приклад конфігурування Redis за допомогою ConfigMap і базується на завданні [Конфігурування Pod для використання ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).

## Цілі

* Створити ConfigMap з конфігураційними значеннями Redis
* Створити Pod з Redis, який монтує та використовує створений ConfigMap
* Перевірити, що конфігурація була правильно застосована.

## Перш ніж ви розпочнете

<p>Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою <a href="https://minikube.sigs.k8s.io/docs/tutorials/multi_node/">minikube</a> або використовувати одну з цих пісочниць:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>
 
  <p>Для перевірки версії введіть  <code>kubectl version</code>.</p>


* Приклад, показаний на цій сторінці, працює з `kubectl` версії 1.14 і вище.
* Розуміння [Конфігурування Pod для використання ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).

<!-- lessoncontent -->

## Реальний приклад: Конфігурування Redis за допомогою ConfigMap {#real-world-example-configuring-redis-using-a-configmap}

Виконайте наведені нижче кроки для конфігурування кешу Redis за допомогою даних, збережених у ConfigMap.

Спершу створіть ConfigMap з порожнім блоком конфігурації:

```shell
cat <<EOF >./example-redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: example-redis-config
data:
  redis-config: ""
EOF
```

Застосуйте створений вище ConfigMap разом з маніфестом Podʼа Redis:

```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
```

Перегляньте вміст маніфесту Podʼа Redis і зверніть увагу на наступне:

* Том `config` створено за допомогою `spec.volumes[1]`
* Пара `key` і `path` у `spec.volumes[1].configMap.items[0]` експонує ключ `redis-config` з  `example-redis-config` ConfigMap як файл з назвою `redis.conf` у томі `config`.
* Том `config` потім монтується в `/redis-master` за допомогою `spec.containers[0].volumeMounts[1]`.

Це має загальний ефект експозиції даних з `data.redis-config` з `example-redis-config` ConfigMap як `/redis-master/redis.conf` всередині Pod.


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/pods/config/redis-pod.yaml" download="pods/config/redis-pod.yaml"><code>pods/config/redis-pod.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('pods-config-redis-pod-yaml')" title="Копіювати pods/config/redis-pod.yaml до буферу обміну"></img></div>
    <div class="includecode" id="pods-config-redis-pod-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">redis</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">redis</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">redis:8.0.2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">command</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">redis-server</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;/redis-master/redis.conf&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">env</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">MASTER</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">ports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">6379</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">limits</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;0.1&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumeMounts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/redis-master-data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/redis-master</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">emptyDir</span><span class="p">:</span><span class="w"> </span>{}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">configMap</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">example-redis-config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">items</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span>- <span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l">redis-config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">redis.conf</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Перегляньте створені обʼєкти:

```shell
kubectl get pod/redis configmap/example-redis-config
```

Ви повинні побачити наступний вивід:

```none
NAME        READY   STATUS    RESTARTS   AGE
pod/redis   1/1     Running   0          8s

NAME                             DATA   AGE
configmap/example-redis-config   1      14s
```

Нагадаємо, що ми залишили ключ `redis-config` у `example-redis-config` ConfigMap порожнім:

```shell
kubectl describe configmap/example-redis-config
```

Ви повинні побачити порожній ключ `redis-config`:

```shell
Name:         example-redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis-config:
```

Використовуйте `kubectl exec`, щоб увійти в Pod і запустити інструмент `redis-cli`, щоб перевірити поточну конфігурацію:

```shell
kubectl exec -it pod/redis -- redis-cli
```

Перевірте `maxmemory`:

```shell
127.0.0.1:6379> CONFIG GET maxmemory
```

Він має показати типове значення 0:

```shell
1) "maxmemory"
2) "0"
```

Аналогічно, перевірте `maxmemory-policy`:

```shell
127.0.0.1:6379> CONFIG GET maxmemory-policy
```

Що також повинно показати типове значення `noeviction`:

```shell
1) "maxmemory-policy"
2) "noeviction"
```

Тепер додамо деякі конфігураційні значення до `example-redis-config` ConfigMap:


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/pods/config/example-redis-config.yaml" download="pods/config/example-redis-config.yaml"><code>pods/config/example-redis-config.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('pods-config-example-redis-config-yaml')" title="Копіювати pods/config/example-redis-config.yaml до буферу обміну"></img></div>
    <div class="includecode" id="pods-config-example-redis-config-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">ConfigMap</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">example-redis-config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">data</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">redis-config</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">    maxmemory 2mb
</span></span></span><span class="line"><span class="cl"><span class="sd">    maxmemory-policy allkeys-lru</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Застосуйте оновлений ConfigMap:

```shell
kubectl apply -f example-redis-config.yaml
```

Перевірте, що ConfigMap був оновлений:

```shell
kubectl describe configmap/example-redis-config
```

Ви повинні побачити конфігураційні значення, які ми щойно додали:

```shell
Name:         example-redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis-config:
----
maxmemory 2mb
maxmemory-policy allkeys-lru
```

Ще раз перевірте Pod Redis за допомогою `redis-cli` через `kubectl exec`, щоб побачити, чи конфігурація була застосована:

```shell
kubectl exec -it pod/redis -- redis-cli
```

Перевірте `maxmemory`:

```shell
127.0.0.1:6379> CONFIG GET maxmemory
```

Він залишається з типовим значенням 0:

```shell
1) "maxmemory"
2) "0"
```

Аналогічно, `maxmemory-policy` залишається з типовими налаштуваннями `noeviction`:

```shell
127.0.0.1:6379> CONFIG GET maxmemory-policy
```

Повертає:

```shell
1) "maxmemory-policy"
2) "noeviction"
```

Конфігураційні значення не змінилися, оскільки Pod необхідно перезапустити, щоб отримати оновлені значення з асоційованих ConfigMap. Видалимо та заново створимо Pod:

```shell
kubectl delete pod redis
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml
```

Тепер ще раз перевірте конфігураційні значення:

```shell
kubectl exec -it pod/redis -- redis-cli
```

Перевірте `maxmemory`:

```shell
127.0.0.1:6379> CONFIG GET maxmemory
```

Тепер він має показати оновлене значення 2097152:

```shell
1) "maxmemory"
2) "2097152"
```

Аналогічно, `maxmemory-policy` також було оновлено:

```shell
127.0.0.1:6379> CONFIG GET maxmemory-policy
```

Він тепер показує бажане значення `allkeys-lru`:

```shell
1) "maxmemory-policy"
2) "allkeys-lru"
```

Очистіть свою роботу, видаливши створені ресурси:

```shell
kubectl delete pod/redis configmap/example-redis-config
```

## Що далі

* Дізнайтеся більше про [ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/).
* Ознайомтеся з прикладом [Оновлення конфігурації через ConfigMap](/docs/tutorials/configuration/updating-configuration-via-a-configmap/).
