minikube共享卷一段时间后不会显示文件



我必须将本地.ssh目录内容共享到pod。我搜索帽子,并从其中一个帖子中得到答案,以--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

当我检查给定Minikube的docker时,它会返回

$ 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

当我在docker中检查/ssh-directory的内容时。

它给出IO错误。

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

我知道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)|  
+------------+----------+---------------+----------------+

但我安装了minikube作为brew install minikube,并将其设置为driver作为docker

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

装载点中没有docker驱动程序的映射。

最初,这个目录有文件,但不知何故,当我试图创建pod时,它删除了或出现了问题。

在ubuntu上复制时,我遇到了确切的问题。

目录看起来确实像是挂载的,但文件丢失了,这让我认为这是使用docker驱动程序挂载目录的常见问题。

github上存在关于相同问题的公开问题(装载目录为空(,以及将主机卷装载到docker驱动程序中的公开功能请求。

检查minikube容器不会显示已安装卷的记录,并确认github请求中提到的信息,即到目前为止,与主机共享的唯一卷是默认安装的卷(即安装到minikube的/var目录中的/var/lib/docker/volumes/minikube/_data(。

$ 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> 

然后将这个所需的目录装载到pod中。

最新更新