いくつかのテキストファイルを含む構成マップを作成してマウントすると、コンテナーはそれらのファイルを../data/myfile.txt
へのシンボリックリンクとして表示することに気付きました。
たとえば、構成マップの名前がtc-configsで、stripe1.xmlとstripe2.xmlという名前の2つのxmlファイルが含まれている場合、この構成マップをコンテナーの/ configsにマウントすると、コンテナーに次のようになります。
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に指示する方法はありますか?
この解決策で十分だと思います。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
psycotica on K8s Canada slack で私を正しい軌道に乗せてくれてありがとう subpath (彼らは configmapドキュメント )ですぐに言及
ネイティブの動作だと思いますが、Kubernetesにこれらのシンボリックリンクを生成しないように指示できるかどうかはわかりません。
これらのファイルとリンクがあることが問題である場合、私が考えることができる回避策は、コンテナーを初期化するときに、構成マップを1つのフォルダーにマウントし、ファイルを別のフォルダーにコピーすることです。
initContainers:
- name: copy-config
image: busybox
command: ['sh', '-c', 'cp /configmap/* /configs']
volumeMounts:
- name: configmap
mountPath: /configmap
- name: config
mountPath: /configs
ただし、2つのボリュームを宣言する必要があります。1つはconfigMap(configmap)用で、もう1つは最終ディレクトリ(config)用です。
volumes:
- name: config
emptyDir: {}
- name: configmap
configMap:
name: myconfigmap
必要に応じて、構成ボリュームのボリュームのタイプを変更してください。