# Configmap 1) Создаем configmap configmap.yaml ```yaml --- apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: default.conf: | server { listen 80 default_server; server_name _; default_type text/plain; location / { return 200 '$hostname\n'; } } ``` deployment-with-configmap.yaml ```yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 1 selector: matchLabels: app: my-app strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: labels: app: my-app spec: containers: - image: nginx:1.20 name: nginx ports: - containerPort: 80 resources: requests: cpu: 50m memory: 100Mi limits: cpu: 100m memory: 100Mi volumeMounts: - name: config mountPath: /etc/nginx/conf.d/ volumes: - name: config configMap: name: my-configmap ``` Для этого выполним команды: ```bash kubectl apply -f configmap.yaml kubectl apply -f deployment-with-configmap.yaml ``` 2) Проверяем Проверим, что configmap попал в контейнер, для этого пробросим порт из пода и выполним curl. Для этого выполним команду, заменив имя pod на имя вашего pod(``можно воспользоваться автоподстановкой по TAB``). & - это запуск команд в фоновом режиме, потом вводим следующую команду. ```bash kubectl port-forward my-deployment-<TAB> 8080:80 & curl 127.0.0.1:8080 ``` В результате выполнения curl увидим имя пода, который обработал запрос. Результат должен быть примерно таким: ```bash my-deployment-5b47d48b58-l4t67 ``` 3) Обновим configmap ```bash kubectl edit configmap my-configmap # изменим текст ответа return 200 '$hostname\nOK\n'; ``` 4) Проверим вывод пода ```bash curl 127.0.0.1:8080 ``` Вывод не изменился 5) Монтирование configmap, как отдельного файла в каталоге через subPath php-config.yaml ```yaml --- apiVersion: v1 kind: ConfigMap metadata: name: my-php-conf data: php.ini: | [php] register_globals = off track_errors = yes ``` deployment-with-configmap-php.yaml ```yaml --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 1 selector: matchLabels: app: my-app strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: labels: app: my-app spec: containers: - image: quay.io/testing-farm/nginx:1.20 name: nginx ports: - containerPort: 80 resources: requests: cpu: 10m memory: 100Mi limits: cpu: 100m memory: 100Mi volumeMounts: - name: config mountPath: /etc/nginx/conf.d/ - name: php mountPath: /etc/php.ini subPath: php.ini volumes: - name: config configMap: name: my-configmap - name: php configMap: name: my-php-conf ``` Применяем манифесты: ```bash kubectl apply -f php-config.yaml kubectl apply -f deployment-with-configmap-php.yaml ``` 6) Заходим в под, смотрим на смонтированный файл ```bash kubectl exec -it my-deployment-<TAB> -- bash ls -lsa /etc ``` 7) Смотрим, что бывает, если попробовать смонтировать файл в существующий каталог. Исправляем манифест деплоймент, в части точки монтирования configmap my-php-conf Убираем subPath, меняем точку монтирования. ```bash kubectl edit deployment my-deployment ``` ```yaml - mountPath: /etc name: php ``` 8) Смотрим причину, по которой не стартует под ```bash kubectl describe pod my-deployment-<TAB> ``` 9) Чистим за собой, удаляем "изломанный" deployment ```bash kubectl delete deployment my-deployment ```