Проблема с путем монтирования с использованием томов в Kubernetes

#docker #nginx #kubernetes #persistent-volumes #persistent-volume-claims

#докер #nginx #kubernetes #постоянные тома #постоянные требования к объему

Вопрос:

У меня есть кластер из 3 узлов (1 главный и 2 рабочих узла). У меня есть развертывание, запущенное с изображением pod как nginx на одном из рабочих узлов. Ниже приводится его явное определение:-

 apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: nginx
    spec:
      volumes:
      - name: logs
        emptyDir: {}
      containers:
      - image: nginx
        name: nginx
        resources: {}
        volumeMounts:
          - name: logs
            mountPath: /var/log/nginx
 

Если я отслеживаю журналы nginx, я вижу, что журналы генерируются в местоположении как /var/log/nginx:-

 vagrant@mykubemaster:~/my-k8s/sidecar$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-5bb7d5c6dd-hjxnr   1/1     Running   0          8m8s
vagrant@mykubemaster:~/my-k8s/sidecar$ kubectl exec nginx-5bb7d5c6dd-hjxnr -- tail -f /var/log/nginx/access.log
10.32.0.1 - - [06/Jan/2021:02:43:11  0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:43:56  0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:46:11  0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:46:17  0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
10.32.0.1 - - [06/Jan/2021:02:48:29  0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"
 

Однако проблема в том, что если я подключаюсь по ssh к рабочим узлам (обоим) и даже к главному узлу, я не вижу никакой папки, поскольку nginx создается в /var/log, где хранится этот файл (access.log), который я могу очень хорошо передавать, используя -f и —tail командовать?

Насколько я понимаю, когда мы монтируем том, Pod использует хранилище виртуальной машины, в котором модуль был подготовлен. Если на node02, то в некотором месте, как указано в манифесте на Node02.

Я был бы очень признателен, если бы вы помогли мне разобраться в этом и найти путь к файлу.

Ответ №1:

Вы храните журналы в emptyDir томе. Это не должно быть постоянным или для доступа извне модуля; у него нет фиксированного местоположения в хост-системе, и содержимое там будет потеряно, как только модуль будет удален.

В конкретном случае image: nginx образ Docker Hub nginx по умолчанию настроен на запись своих журналов доступа в стандартный вывод контейнера. Если вы удалите volumes: и volumeMounts: , тогда kubectl logs deployment/nginx вам будут показаны журналы доступа. Затем администратор кластера может развернуть сборщик журналов для пересылки этих журналов куда-либо еще; см., Например, Использование агента регистрации узлов в документации Kubernetes .

Этот же совет применим к большинству других процессов: установите ведение журнала для перехода к стандартным выводам процесса, а не к файлу, и Kubernetes соберет его, и вы можете развернуть средство пересылки для отправки журналов куда-нибудь еще, если вам понадобится просмотреть их позже.

Комментарии:

1. спасибо и действительно оценил это. Теперь мне все ясно 🙂