Симберские ссылки на карту конфигурации Kubernetes (..data /): есть ли способ избежать их? - PullRequest
0 голосов
/ 04 июня 2018

Я заметил, что когда я создаю и монтирую карту конфигурации, которая содержит некоторые текстовые файлы, контейнер увидит эти файлы как символические ссылки на ../data/myfile.txt.

Например, если моя карта конфигурации называется tc-configs и содержит 2 xml-файла с именами stripe1.xml и stripe2.xml. Если я подключу эту конфигурационную карту к / config в моем контейнере, я получу в своем контейнере:

bash-4.4# ls -al /configs/
total 12
drwxrwxrwx    3 root     root          4096 Jun  4 14:47 .
drwxr-xr-x    1 root     root          4096 Jun  4 14:47 ..
drwxr-xr-x    2 root     root          4096 Jun  4 14:47 ..2018_06_04_14_47_03.291041453
lrwxrwxrwx    1 root     root            31 Jun  4 14:47 ..data -> ..2018_06_04_14_47_03.291041453
lrwxrwxrwx    1 root     root            18 Jun  4 14:47 stripe1.xml -> ..data/stripe1.xml
lrwxrwxrwx    1 root     root            18 Jun  4 14:47 stripe2.xml -> ..data/stripe2.xml

Я предполагаю, что Kubernetes требуетсяэти символические ссылки и папки ../data и ..timestamp /, но я знаю некоторые приложения, которые могут не запуститься, если они увидят непредвиденные файлы или папки

Есть ли способ сказать Kubernetes не генерировать все этисимволические ссылки и напрямую монтировать файлы?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Я думаю, что это решение удовлетворительное: указание точного пути к файлу в mountPath избавит от символических ссылок на ..data and ..2018_06_04_19_31_41.860238952

Так что, если я применю такой манифест:

apiVersion: v1
kind: Pod
metadata:
  name: my-lamp-site
spec:
    containers:
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html/users.xml
        name: site-data
        subPath: users.xml
    volumes:
    - name: site-data
      configMap:
        name: users

---

apiVersion: v1
kind: ConfigMap
metadata:
  name: users
data:
  users.xml: |
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <users>
      </users>

По-видимому, я явно использую subpath , и они не являются частью "магии автоматического обновления" из ConfigMaps, я не буду больше видеть символические ссылки:

$ kubectl exec  my-lamp-site -c php -- ls -al /var/www/html
total 12
drwxr-xr-x 1 www-data www-data 4096 Jun  4 19:18 .
drwxr-xr-x 1 root     root     4096 Jun  4 17:58 ..
-rw-r--r-- 1 root     root       73 Jun  4 19:18 users.xml

Будьте осторожны, чтобы не забыть subPath, иначе users.xml будет каталогом!

Вернитесь к моему первоначальному манифесту:

spec:
    containers:
    - name: php
      image: php:7.0-apache
      volumeMounts:
      - mountPath: /var/www/html
        name: site-data
    volumes:
    - name: site-data
      configMap:
        name: users

Я увижу эти символические ссылки, возвращающиеся:

$ kubectl exec  my-lamp-site -c php -- ls -al /var/www/html
total 12
drwxrwxrwx 3 root root 4096 Jun  4 19:31 .
drwxr-xr-x 3 root root 4096 Jun  4 17:58 ..
drwxr-xr-x 2 root root 4096 Jun  4 19:31 ..2018_06_04_19_31_41.860238952
lrwxrwxrwx 1 root root   31 Jun  4 19:31 ..data -> ..2018_06_04_19_31_41.860238952
lrwxrwxrwx 1 root root   16 Jun  4 19:31 users.xml -> ..data/users.xml

Большое спасибо psycotica0 на K8s Canada slack за то, что я поставил на правильный путь с subpath (они быстроупоминается в документации configmap )

0 голосов
/ 04 июня 2018

Боюсь, я не знаю, можете ли вы сказать Kubernetes не генерировать эти символические ссылки, хотя я думаю, что это нативное поведение.

Если наличие этих файлов и ссылок является проблемой, я могу придумать обходной путь - смонтировать configmap в одну папку и скопировать файлы в другую папку при инициализации контейнера:

  initContainers:
    - name: copy-config
      image: busybox
      command: ['sh', '-c', 'cp /configmap/* /configs']
      volumeMounts:
        - name: configmap
          mountPath: /configmap
        - name: config
          mountPath: /configs

Но вам нужно будет объявить два тома, один для configMap (configmap) и один для конечного каталога (config):

  volumes:
    - name: config
      emptyDir: {}
    - name: configmap
      configMap:
        name: myconfigmap

Измените тип тома для тома config, как выпожалуйста, очевидно.

...