我们正在将传统的java和.net应用程序从本地VM迁移到本地Kubernetes集群。
这些应用程序中的许多都使用windows文件共享来在其他现有系统之间传输文件。部署到Kubernetes的优先级低于重新设计所有解决方案以避免使用桑巴舞共享,所以如果我们想迁移,我们必须找到一种方法来保持许多东西的原样。
我们使用Kubeadm和Canal在3台centos 7机器上设置了一个3节点集群。
我找不到任何积极维护的插件或库来挂载SMB,除了Azure卷。
我想到的是在每个centos节点上使用所有节点上的相同挂载点挂载SMB共享,即:“/data/share 1”,然后创建本地PersistentVolume
kind: PersistentVolume
apiVersion: v1
metadata:
name: samba-share-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/data/share1"
字符串
和一个要求,
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: samba-share-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
型
并将权利要求分配给应用程序。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: samba-share-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: samba-share-deployment
tier: backend
spec:
containers:
- name: samba-share-deployment
image: nginx
ports:
- containerPort: 80
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: samba-share-volume
volumes:
- name: samba-share-volume
persistentVolumeClaim:
claimName: samba-share-claim
型
它从每个副本工作,但有巨大的警告使用本地卷在生产中。我不知道任何其他方式来做到这一点或什么是实际的警告使用这种配置。
我可以用另一种方法吗?如果我监视挂载点,并在挂载失败时禁用kubernetes中的节点,这可以吗?
2条答案
按热度按时间zf2sa74q1#
我在r/kubernetes上问了同样的问题,一个用户评论了这个问题。我们现在正在尝试这个,看起来还可以。
https://www.reddit.com/r/kubernetes/comments/7wcwmt/accessing_windows_smbcifs_shares_from_pods/duzx0rs/
我们不得不处理类似的情况,我最终开发了一个自定义的Flexvolume驱动程序,从我在网上找到的示例中将CIFS共享装载到Pod中。
我已经用适用于我的用例的解决方案编写了一个repo。
https://github.com/juliohm1978/kubernetes-cifs-volumedriver的
您仍然需要在每个Kubernetes主机上安装cifs-utils和jq作为先决条件。但它确实允许您创建挂载CIFS卷并在Pod中使用它们的PersistentVolumes。
希望能帮上忙。
33qvvth12#
现在我会选择https://github.com/kubernetes-csi/csi-driver-smb,这个解决方案非常可靠,是一个官方的Kubernetes项目,并且有很好的文档记录。