Общий том Minikube не показывает файлы через некоторое время - PullRequest
0 голосов
/ 03 мая 2020

Я должен поделиться локальным .ssh содержимым каталога с модулем. Я ищу шляпу и получил ответ из одного поста, чтобы поделиться, начинаются как --mount-string.

$ minikube start --mount-string="$HOME/.ssh/:/ssh-directory" --mount
?  minikube v1.9.2 on Darwin 10.14.6
✨  Using the docker driver based on existing profile
?  Starting control plane node m01 in cluster minikube
?  Pulling base image ...
?  Restarting existing docker container for "minikube" ...
?  Preparing Kubernetes v1.18.0 on Docker 19.03.2 ...
    ▪ kubeadm.pod-network-cidr=10.244.0.0/16
E0426 23:44:18.447396   80170 kubeadm.go:331] Overriding stale ClientConfig host https://127.0.0.1:32810 with https://127.0.0.1:32813
?  Creating mount /Users/myhome/.ssh/:/ssh-directory ...
?  Enabling addons: default-storageclass, storage-provisioner
?  Done! kubectl is now configured to use "minikube"

❗  /usr/local/bin/kubectl is v1.15.5, which may be incompatible with Kubernetes v1.18.0.
?  You can also use 'minikube kubectl -- get pods' to invoke a matching version

Когда я проверяю docker для данного Minikube, он возвращает

$ docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                                                                           NAMES
5ad64f642b63        gcr.io/k8s-minikube/kicbase:v0.0.8   "/usr/local/bin/entr…"   3 weeks ago         Up 45 seconds       127.0.0.1:32815->22/tcp, 127.0.0.1:32814->2376/tcp, 127.0.0.1:32813->8443/tcp   minikube

И проверьте, есть ли содержимое каталога .ssh.

$ docker exec -it 5ad64f642b63 ls /ssh-directory
id_rsa  id_rsa.pub  known_hosts

У меня есть развертывание yml как

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
  labels:
    stack: api
    app: api-web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api-web
  template:
    metadata:
      labels:
        app: api-web
    spec:
      containers:
        - name: api-web-pod
          image: tiangolo/uwsgi-nginx-flask 
          ports:
            - name: api-web-port
              containerPort: 80
          envFrom:
            - secretRef:
                name: api-secrets
          volumeMounts:
            - name: ssh-directory
              mountPath: /app/.ssh
      volumes:
        - name: ssh-directory
          hostPath:
            path: /ssh-directory/
            type: Directory

Когда он запускается, он дает ошибка для /ssh-directory.

$ kubectl describe pod/api-deployment-f65db9c6c-cwtvt
Name:           api-deployment-f65db9c6c-cwtvt
Namespace:      default
Priority:       0
Node:           minikube/172.17.0.2
Start Time:     Sat, 02 May 2020 23:07:51 -0500
Labels:         app=api-web
                pod-template-hash=f65db9c6c
Annotations:    <none>
Status:         Pending
IP:
Controlled By:  ReplicaSet/api-deployment-f65db9c6c
Containers:
  api-web-pod:
    Container ID:
    Image:          tiangolo/uwsgi-nginx-flask
    Image ID:
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment Variables from:
      api-secrets  Secret  Optional: false
    Environment:      <none>
    Mounts:
      /app/.ssh from ssh-directory (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-9shz5 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  ssh-directory:
    Type:          HostPath (bare host directory volume)
    Path:          /ssh-directory/
    HostPathType:  Directory
  default-token-9shz5:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-9shz5
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason       Age                 From               Message
  ----     ------       ----                ----               -------
  Normal   Scheduled    <unknown>           default-scheduler  Successfully assigned default/api-deployment-f65db9c6c-cwtvt to minikube
  Warning  FailedMount  11m                 kubelet, minikube  Unable to attach or mount volumes: unmounted volumes=[ssh-directory], unattached volumes=[default-token-9shz5 ssh-directory]: timed out waiting for the condition
  Warning  FailedMount  2m13s (x4 over 9m)  kubelet, minikube  Unable to attach or mount volumes: unmounted volumes=[ssh-directory], unattached volumes=[ssh-directory default-token-9shz5]: timed out waiting for the condition
  Warning  FailedMount  62s (x14 over 13m)  kubelet, minikube  MountVolume.SetUp failed for volume "ssh-directory" : hostPath type check failed: /ssh-directory/ is not a directory

Когда я проверяю содержимое /ssh-directory в docker.

Выдает ошибку ввода-вывода.

$ docker exec -it 5ad64f642b63 ls /ssh-directory
ls: cannot access '/ssh-directory': Input/output error

I знаю, что для Minikube есть точки монтирования по умолчанию. Как уже упоминалось в https://minikube.sigs.k8s.io/docs/handbook/mount/,

+------------+----------+---------------+----------------+
| Driver     |    OS    | HostFolder    | VM             |
+------------+----------+---------------+----------------+
| VirtualBox | Linux    | /home         |/hosthome       |
+------------+----------+---------------+----------------+
| VirtualBox | macOS    | /Users        |/Users          |
+------------+----------+---------------+----------------+
| VirtualBox | Windows  |C://Users      | /c/Users       |
+------------+----------+---------------+----------------+
|VMware Fusio|  macOS   |/Users         |/Users          |
+------------+----------+---------------+----------------+
| KVM        | Linux    | Unsupported.  |                |
+------------+----------+---------------+----------------+
| HyperKit   | Linux    | Unsupported   |(see NFS mounts)|  
+------------+----------+---------------+----------------+

Но я установил миникуб как brew install minikube, а его driver как docker.

$ cat ~/.minikube/config/config.json
{
    "driver": "docker"
}

В точке монтирования нет сопоставления для драйвера docker.

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

1 Ответ

1 голос
/ 06 мая 2020

При воспроизведении этого на Ubuntu я столкнулся с точной проблемой.

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

Существует открытая проблема на github по поводу той же проблемы ( пустой каталог монтирования ) и запрос открытой функции для монтирования томов хоста в docker драйвер .

Проверка контейнера minikube не показывает записи этого подключенного тома и подтверждает информацию, упомянутую в запросе github, о том, что на данный момент единственным общим томом, совместно используемым с хостом, является тот, который монтируется по умолчанию (т. Е. /var/lib/docker/volumes/minikube/_data подключен к миникубу. /var каталог).

$ docker inspect minikube
"Mounts": [ 
  { 
    "Type": "volume", 
    "Name": "minikube", 
    "Source": "/var/lib/docker/volumes/minikube/_data", 
    "Destination": "/var", 
    "Driver": "local", 
    "Mode": "z", 
    "RW": true, 
    "Propagation": ""
  }

В качестве обходного пути вы можете скопировать каталог .ssh в работающий контейнер minikube docker, выполнив следующую команду:

docker cp  $HOME/.ssh minikube:<DESIRED_DIRECTORY> 

, а затем смонтировать этот желаемый каталог в модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...