Что у меня есть:
Развертывание Kubernetes в кластере с ОС, оптимизированной для контейнеров, в качестве ОС узла
Далее файл deployment.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: eu.gcr.io/my-project/my-app
ports:
- containerPort: 8013
volumeMounts:
- mountPath: /my/cache/
name: cache
volumes:
- name: cache
nfs:
server: cache
path: /cache/my-app/
readOnly: false
Проблема в том, что nfs-mount работает, когда я явно ввожу IP-адрес, но по какой-либо причине невозможно разрешить имя хоста.
volumes:
- name: cache
nfs:
server: 192.168.1.1 # this example would work
path: /cache/my-app/
readOnly: false
Однако с введенным именем хоста mount.nfs завершается с
Ошибка монтирования: статус выхода 32 ... Вывод: mount.nfs: Не удалось разрешить кеш сервера
Однако я могу пинговать сервер по имени хоста из Node. Это также работает, когда я использую обычную виртуальную машину-контейнер, указывая, что это может быть проблема с ОС Googles, оптимизированной для контейнеров ...
Как я могу сказать Kubernetes разрешить сервер nfs-mount по имени хоста?
Кажется, это известная проблема, отслеживаемая на github [1] [2]. В качестве обходного пути вы можете «скопировать /etc/resolv.conf из виртуальной машины GCE (он будет включать путь поиска GCP, DNS-преобразователь метаданных) в каталог chroot env (/ home / kubernetes / containerized_mounter / rootfs)» и использовать NFS Полное доменное имя, например: имя-сервера.svc.cluster.local в качестве имени хоста.
К тому же, Вот это [3] запрос на вытягивание (PR) на github для настройки DNS-сервера в контейнерном пути монтирования для разрешения имени хоста.
[1] https://github.com/kubernetes/kubernetes/issues/48212