- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的 WSL2 Linux 发行版中设置一个 MSSQL 服务器,我在其中为我的 .mdf
安装了一个卷。 - 和 .ldf
-文件。但是,我无法让 Kubernetes 看到我的包含上述文件的文件夹。
我的文件存储在 C:\WindowsFolder\data
中在我的主机 (Windows) 上,这允许 WSL2 在路径 /mnt/c/WindowsFolder/data
上看到它们(Linux)。
如果我运行以下 yaml 文件,kubectl
设置所有但我的数据 - 我将其装入的文件夹 (/data
) 是空的。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-database
labels:
app.kubernetes.io/name: my-deployment
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: label-identifier
template:
metadata:
labels:
app.kubernetes.io/name: label-identifier
spec:
hostname: "database"
securityContext:
fsGroup: 0
containers:
- name: database
image: "mcr.microsoft.com/mssql/server:2019-latest"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 1433
protocol: TCP
env:
- name: "ACCEPT_EULA"
value: "Y"
- name: "MSSQL_DATA_DIR"
value: /data
- name: "MSSQL_PID"
value: "Developer"
- name: "SA_PASSWORD"
value: "SuperSecret123!"
volumeMounts:
- name: "myvolume"
mountPath: /data
volumes:
- name: "myvolume"
hostPath:
path: "/mnt/c/windowsFolder/Database"
然后我尝试在我的 WSL2 中启动一个 docker 容器 - 它按预期工作,但从长远来看这不是一个好的解决方案:
wsl.exe #Enter WSL2
docker run -d --name sql-t1 -e "ACCEPT_EULA=Y" \
-e "SA_PASSWORD=SuperSecret123!" -p 1433:1433 \
-v /mnt/c/windowsFolder/Database:/data \
mcr.microsoft.com/mssql/server:2019-latest
docker ps #find my containerID
docker exec -it <containerId> bash #step into docker container
> ls /data #shows my files correctly
WSL2 可以通过 docker 在 Kubernetes 指定的相同路径上正确挂载,但它在 Kubernetes 中不起作用。
有什么建议吗?或者我可以尝试什么?
编辑 1:
我做了一个 docker inspect <Kubectl's WSL container>
看看它是否有任何线索:
[
{
"MountLabel": "",
"HostConfig": {
"Binds": [
"/mnt/c/windowsFolder/Database:/data",
...
],
},
"VolumeDriver": "",
"VolumesFrom": null,
"Isolation": ""
},
"Mounts": [
{
"Type": "bind",
"Source": "/mnt/c/windowsFolder/Database",
"Destination": "/data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
...
"Volumes": null,
...
}
}
]
编辑 2:
我注意到该文件夹的 chmod 为 755 而不是 777。我通过添加 initContainer
来解决这个问题并删除安全组,但仍然没有帮助:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-database
labels:
app.kubernetes.io/name: my-deployment
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: label-identifier
template:
metadata:
labels:
app.kubernetes.io/name: label-identifier
spec:
hostname: "database"
containers:
- name: database
image: "mcr.microsoft.com/mssql/server:2019-latest"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 1433
protocol: TCP
env:
- name: "ACCEPT_EULA"
value: "Y"
- name: "MSSQL_DATA_DIR"
value: /data
- name: "MSSQL_PID"
value: "Developer"
- name: "SA_PASSWORD"
value: "SuperSecret123!"
volumeMounts:
- name: "myvolume"
mountPath: /data
#this was added
initContainers:
- name: mssql-data-folder-permissions
image: "busybox:latest"
command: ["/bin/chmod","-R","777", "/data"]
volumeMounts:
- name: "myvolume"
mountPath: /data
volumes:
- name: "myvolume"
hostPath:
path: "/mnt/c/windowsFolder/Database"
编辑 3:
根据@ovidiu-buligan 的要求:
kubectl get events -A
给出以下输出:
NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE
default 2m15s Normal Scheduled pod/myProject-database-7c477d65b8-mmh7h Successfully assigned default/myProject-database-7c477d65b8-mmh7h to docker-desktop
default 2m16s Normal Pulling pod/myProject-database-7c477d65b8-mmh7h Pulling image "mcr.microsoft.com/mssql/server:2019-latest"
default 88s Normal Pulled pod/myProject-database-7c477d65b8-mmh7h Successfully pulled image "mcr.microsoft.com/mssql/server:2019-latest" in 47.2350549s
default 88s Normal Created pod/myProject-database-7c477d65b8-mmh7h Created container database
default 87s Normal Started pod/myProject-database-7c477d65b8-mmh7h Started container database
default 2m16s Normal SuccessfulCreate replicaset/myProject-database-7c477d65b8 Created pod: myProject-database-7c477d65b8-mmh7h
default 2m16s Normal ScalingReplicaSet deployment/myProject-database Scaled up replica set myProject-database-7c477d65b8 to 1
kubectl describe pod myProject-database-7c477d65b8-mmh7h
给出以下输出:
Name: myProject-database-7c477d65b8-mmh7h
Namespace: default
Priority: 0
Node: docker-desktop/192.168.65.4
Start Time: Tue, 06 Apr 2021 13:03:18 +0200
Labels: app.kubernetes.io/name=StatefulSet-database
pod-template-hash=7c477d65b8
Annotations: <none>
Status: Running
IP: 10.1.0.10
IPs:
IP: 10.1.0.10
Controlled By: ReplicaSet/myProject-database-7c477d65b8
Containers:
database:
Container ID: docker://f768710e7436d4c813913fa22a20091cb3fb77e1ecfbe2232b0ec6037eef3dbb
Image: mcr.microsoft.com/mssql/server:2019-latest
Image ID: docker-pullable://mcr.microsoft.com/mssql/server@sha256:ec5492b0b3f9c0707fddd37f0bd3d47d3ebea94a3054afb8b50e9e746d1e5f37
Port: 1433/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 06 Apr 2021 13:04:07 +0200
Ready: True
Restart Count: 0
Environment:
ACCEPT_EULA: Y
MSSQL_DATA_DIR: /data
MSSQL_LOG_DIR: /log
MSSQL_PID: Developer
SA_PASSWORD: SuperSecret123!
Mounts:
/data from storage-volume-claim (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-gcd5j (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
storage-volume-claim:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: database-pvc
ReadOnly: false
default-token-gcd5j:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-gcd5j
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m6s default-scheduler Successfully assigned default/myProject-database-7c477d65b8-mmh7h to docker-desktop
Normal Pulling 3m6s kubelet Pulling image "mcr.microsoft.com/mssql/server:2019-latest"
Normal Pulled 2m18s kubelet Successfully pulled image "mcr.microsoft.com/mssql/server:2019-latest" in 47.2350549s
Normal Created 2m18s kubelet Created container database
Normal Started 2m17s kubelet Started container database
最佳答案
已找到解决方案!
Docker Desktop 创建了一个文件夹来存储所有内容。
资源管理器中的以下路径,\\wsl$\docker-desktop-data\version-pack-data\community\kubelet\
,等于/var/lib/
在 .yaml 文件中。
这意味着,您可以编写以下内容:
...
hostPath:
path: "/var/lib/kubelet/myProject/"
type: DirectoryOrCreate
...
这将在 \\wsl$\docker-desktop-data\version-pack-data\community\kubelet\myProject
中提供一个文件夹。这将按照您的意愿行事。
您可能希望使用 Windows 开发人员模式创建指向此位置的符号链接(symbolic link)(设置 -> 更新和安全 -> 开发人员 -> 开发人员模式)。
关于docker - Kubernetes 无法在 WSL2 镜像中挂载卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66850830/
我正在尝试创建1-click快捷方式,以便在上小学时玩一些90年代的旧游戏。 我正在尝试将ISO挂载到特定驱动器 运行程序 确保已卸载驱动器,以清除下一个要清除的游戏 我是脚本新手,所以我不确定从哪里
我正在运行 docker compose 命令以在 docker 中运行应用程序。但是,yml 中定义的卷是空的。如果我挂载一个文件,它就可以工作。但是,当我从 Windows 挂载目录时,我可以看到
我有一个双向滚动的无限滚动列表。该列表显示每行 5 个项目的网格,表示一周 7 天中的 5 个工作日。日子是按月剥离的斑马线(甚至月份的颜色略深)。我想将月份标题放在网格左侧的一列中,从该月的第一天或
我在按照 qemu/linaro 教程尝试执行 qemu, https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Vir
我正在尝试挂载 cephfs,密码没问题: mount -t ceph ceph-mon:6789:/docker/mnt/cephfs -o name=admin,secret=admin-pass
我可以将 HDFS 目录(在 Ubuntu 中配置)挂载到 Windows 服务器的驱动器吗? 映射后,例如 H:\--->\home\user1\HDFSCreatedDir ,想使用普通的 Jav
我有一个由 500 个 linux 机器组成的集群,现在需要使用带有绑定(bind)选项的挂载资源(参见 man 8 mount)来支持 chroot jail 。安装点需要在引导后强制执行和维护。我
我在一些代码片段和 Requests documentation 中看到过类似的事情。 : import requests sess = requests.Session() adapter = re
嗨,我正在编写一个安装cgroup的应用程序,如下所示 mount("cgroup", "/sys/fs/cgroup", "tmpfs",0,NULL); 我可以执行此操作,但是我想添加一个检查以了
我希望使用 Powershell 获取 VHD 安装的驱动器号。我可以使用以下 cmdlet 挂载 VHD: Mount-VHD -Path d:/tmp.vhdx 安装工作正常,但是当我尝试获取驱动
我正在编写一个脚本来创建坐骑。我使用的系统命令是: sudo /bin/mount -soft -t smbfs -o username='{username}',password='{passwor
我正在尝试在多个用户之间共享 NFS 安装。我无法让它工作,因为我总是被拒绝访问。我可以挂载共享,但看不到文件。 导出是通过Heartbeat+Pacemaker进行的。我认为这没有什么区别,但这是导
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我最近全新安装了elementary OS,与Windows 8.1双启动。安装完成后,我编辑了eOS的fstab文件,使其自动在/mnt/Windows地址挂载一个ntfs分区。后来我关闭了笔记本电
我正在尝试在装有 Android 2.1 的模拟器上分析 Android 恶意软件。我想在执行可疑应用程序后分析文件权限和指纹。我知道,我可以使用 adb shell 来获取此信息,但我认为在执行例如
在使用 Webpack 和 Vue 编译项目后,当我打开一个使用 Vue 组件的页面时,我得到: [Vue warn]: Failed to mount component: template or
我正在使用 Linux Inotify 来检测程序上的 FS 事件。 当设备挂载到监控目录时如何通知我? 最佳答案 我不认为你可以用 inotify 来做到这一点。这是方法: 阅读uevents fr
有几篇文章对理解 Docker 的卷和数据管理非常有帮助。这两个尤其出色: http://container-solutions.com/understanding-volumes-docker/ h
我正在使用 mount -o bind /some/directory/here /foo/bar 我想用 bash 脚本检查 /foo/bar,看看它是否已经挂载?如果不是,则调用上面的 mount
我是一名优秀的程序员,十分优秀!