我必须挂载 CIFS 存储,尝试使用 flexvolume,fstab/cifs,但我不知道我做错了什么。
使用 microk8s v1.18
root@master:~/yamls# cat pod.yaml
apiVersion: v1
kind: Secret
metadata:
name: cifs-secret
namespace: default
type: fstab/cifs
data:
username: 'xxxxxxxxxxx='
password: 'xxxxxxxxxxxxxxxxxxxxxx=='
---
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: test
mountPath: /data
volumes:
- name: test
flexVolume:
driver: "fstab/cifs"
fsType: "cifs"
secretRef:
name: "cifs-secret"
options:
networkPath: "//srv/storage"
mountOptions: "dir_mode=0755,file_mode=0644,noperm"
但
root@master:~/yamls# kubectl apply -f pod.yaml
pod/busybox configured
The Secret "cifs-secret" is invalid: type: Invalid value: "fstab/cifs": field is immutable
在将机密类型更改为时,Opaque
我得到了这个
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/busybox to spb-airsys-services.spb.rpkb.ru
Warning FailedMount 17m (x23 over 48m) kubelet, master MountVolume.SetUp failed for volume "test" : Couldn't get secret default/cifs-secret err: Cannot get secret of type fstab/cifs
我必须在 Secret 上使用 CIFS 驱动程序吗?为什么这么难?是 API 发生了变化还是其他原因?为什么 API 版本会随着版本而变化,是为了提供版本兼容性而发明的吗?
将来,您对 NFS 挂载有什么建议?此外,您使用哪些做法来提供挂载的快照(或任何其他备份系统)?
答案1
如果机密在创建时被标记为不可变,则无法更改;只能删除并重新创建。您需要先删除旧的不可变机密。
kubectl delete secret cifs-secret
如果您希望更改机密,则不应将其标记为不可变。您似乎没有在此 YAML 中这样做,但似乎之前已经这样做了。
使用该 secret 的现有 pod 在删除后仍会继续使用;即使 secret 具有相同的名称,也需要重新创建它们以使用新创建的 secret。
您应该将 secret 创建与 pod 创建分开,并为它们使用不同的 YAML 文件。这不仅允许您使用不可变 secret 并防止此类问题再次发生,还允许您分离关注点并将 pod 部署到不同的环境(例如开发、生产),每个环境可能具有不同的 secret。