当配置了带有 cifs 的 flexvolume 时,Pod 在 Node 上挂载了错误的目录
Pod mounts wrong directory on Node when a flexvolume with cifs is configured
1master3node的Kubernetes集群和单机Kubernetes都会出现如下问题
我设置了 Kubernetes 支持 flexvolume smb (https://github.com/Azure/kubernetes-volume-drivers/tree/master/flexvolume/smb)。当我应用带有 flexvolume 的新 pod 时,节点会按预期安装 smb 共享。但是 Pod 将他的共享指向节点上的某个 docker 目录。
我的安装:
- 最新的 CentOS 7
- 最新的 Kubernetes v1.14.0
(https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)
- 禁用 SELinux 和禁用防火墙
- Docker 1.13.1
- jq 和 cifs-utils
- https://raw.githubusercontent.com/Azure/kubernetes-volume-drivers/master/flexvolume/smb/deployment/smb-flexvol-installer/smb 安装到 /usr/libexec/kubernetes/kubelet-plugins/volume/exec/microsoft.com~smb 和可执行文件
创建 Pod
smb-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: smb-secret
type: microsoft.com/smb
data:
username: YVVzZXI=
password: YVBhc3N3b3Jk
nginx-flex-smb.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-flex-smb
spec:
containers:
- name: nginx-flex-smb
image: nginx
volumeMounts:
- name: test
mountPath: /data
volumes:
- name: test
flexVolume:
driver: "microsoft.com/smb"
secretRef:
name: smb-secret
options:
source: "//<host.with.smb.share>/kubetest"
mountoptions: "vers=3.0,dir_mode=0777,file_mode=0777"
会发生什么
- Node 上的挂载点创建于
/var/lib/kubelet/pods/bef26895-5ac7-11e9-a668-00155db9c92e/volumes/microsoft.com~smb
。
mount
returns //<host.with.smb.share>/kubetest on /var/lib/kubelet/pods/bef26895-5ac7-11e9-a668-00155db9c92e/volumes/microsoft.com~smb/test type cifs (rw,relatime,vers=3.0,cache=strict,username=aUser,domain=,uid=0,noforceuid,gid=0,noforcegid,addr=172.27.72.43,file_mode=0777,dir_mode=0777,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1)
- 读取和写入在主机和节点本身上按预期工作
- 在 Pod 上
mount
for /data 指向 tmpfs on /data type tmpfs (rw,nosuid,nodev,seclabel,size=898680k,nr_inodes=224670,mode=755)
- 但是目录/data的内容来自节点上的
/run/docker/libcontainerd/8039742ae2a573292cd9f4ef7709bf7583efd0a262b9dc434deaf5e1e20b4002/
。
我尝试使用 PersistedVolumeClaime 安装 Pod,但遇到了同样的问题。搜索这个问题没有找到解决方案。
我们的另一个 pods 使用 GlusterFS 和 heketi,效果很好。
是否配置失败?缺少什么?
编辑:解决方案
我已将 Docker 升级到经过验证的最新版本 18.06,现在一切正常。
我已将 Docker 升级到经过验证的最新版本 18.06,现在一切正常。
要按照 Get Docker CE for CentOS 上的说明进行安装。
1master3node的Kubernetes集群和单机Kubernetes都会出现如下问题
我设置了 Kubernetes 支持 flexvolume smb (https://github.com/Azure/kubernetes-volume-drivers/tree/master/flexvolume/smb)。当我应用带有 flexvolume 的新 pod 时,节点会按预期安装 smb 共享。但是 Pod 将他的共享指向节点上的某个 docker 目录。
我的安装:
- 最新的 CentOS 7
- 最新的 Kubernetes v1.14.0
(https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/) - 禁用 SELinux 和禁用防火墙
- Docker 1.13.1
- jq 和 cifs-utils
- https://raw.githubusercontent.com/Azure/kubernetes-volume-drivers/master/flexvolume/smb/deployment/smb-flexvol-installer/smb 安装到 /usr/libexec/kubernetes/kubelet-plugins/volume/exec/microsoft.com~smb 和可执行文件
创建 Pod
smb-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: smb-secret
type: microsoft.com/smb
data:
username: YVVzZXI=
password: YVBhc3N3b3Jk
nginx-flex-smb.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-flex-smb
spec:
containers:
- name: nginx-flex-smb
image: nginx
volumeMounts:
- name: test
mountPath: /data
volumes:
- name: test
flexVolume:
driver: "microsoft.com/smb"
secretRef:
name: smb-secret
options:
source: "//<host.with.smb.share>/kubetest"
mountoptions: "vers=3.0,dir_mode=0777,file_mode=0777"
会发生什么
- Node 上的挂载点创建于
/var/lib/kubelet/pods/bef26895-5ac7-11e9-a668-00155db9c92e/volumes/microsoft.com~smb
。 mount
returns//<host.with.smb.share>/kubetest on /var/lib/kubelet/pods/bef26895-5ac7-11e9-a668-00155db9c92e/volumes/microsoft.com~smb/test type cifs (rw,relatime,vers=3.0,cache=strict,username=aUser,domain=,uid=0,noforceuid,gid=0,noforcegid,addr=172.27.72.43,file_mode=0777,dir_mode=0777,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1)
- 读取和写入在主机和节点本身上按预期工作
- 在 Pod 上
mount
for /data 指向tmpfs on /data type tmpfs (rw,nosuid,nodev,seclabel,size=898680k,nr_inodes=224670,mode=755)
- 但是目录/data的内容来自节点上的
/run/docker/libcontainerd/8039742ae2a573292cd9f4ef7709bf7583efd0a262b9dc434deaf5e1e20b4002/
。
我尝试使用 PersistedVolumeClaime 安装 Pod,但遇到了同样的问题。搜索这个问题没有找到解决方案。
我们的另一个 pods 使用 GlusterFS 和 heketi,效果很好。
是否配置失败?缺少什么?
编辑:解决方案
我已将 Docker 升级到经过验证的最新版本 18.06,现在一切正常。
我已将 Docker 升级到经过验证的最新版本 18.06,现在一切正常。
要按照 Get Docker CE for CentOS 上的说明进行安装。