使用来自 Kubernetes 部署应用程序的 Windows SMB 共享
Using Windows SMB shares from Kubernetes deployment app
我们正在将遗留 java 和 .net 应用程序从本地 VM 迁移到本地 Kubernetes 集群。
其中许多应用程序利用 windows 文件共享在其他现有系统之间传输文件。部署到 Kubernetes 的优先级低于重新设计所有解决方案以避免使用 samba 共享,因此如果我们想要迁移,我们将必须找到一种保持许多东西原样的方法。
我们使用 Kubeadm 和 Canal 在 3 台 centos 7 机器上设置了一个 3 节点集群。
除了 azure volumes 之外,我找不到任何积极维护的插件或库来挂载 SMB。
我想到的是在所有节点上使用相同的挂载点在每个 centos 节点上挂载 SMB 共享,即:“/data/share1”,然后我创建了一个本地 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 中的节点,这可以吗?
我在 r/kubernetes 上问了同样的问题,一位用户对此发表了评论。我们现在正在尝试这个,看起来还可以。
We had to deal with a similar situation and I ended up developing a
custom Flexvolume driver to mount CIFS shares into pods from examples
I found online.
I have written a repo with the solution that works for my use case.
https://github.com/juliohm1978/kubernetes-cifs-volumedriver
You still need to intall cifs-utils and jq on each Kubernetes host as
a pre-requisite. But it does allow you to create PersistentVoluems
that mount CIFS volumes and use them in your pods.
I hope it helps.
我们正在将遗留 java 和 .net 应用程序从本地 VM 迁移到本地 Kubernetes 集群。
其中许多应用程序利用 windows 文件共享在其他现有系统之间传输文件。部署到 Kubernetes 的优先级低于重新设计所有解决方案以避免使用 samba 共享,因此如果我们想要迁移,我们将必须找到一种保持许多东西原样的方法。
我们使用 Kubeadm 和 Canal 在 3 台 centos 7 机器上设置了一个 3 节点集群。
除了 azure volumes 之外,我找不到任何积极维护的插件或库来挂载 SMB。
我想到的是在所有节点上使用相同的挂载点在每个 centos 节点上挂载 SMB 共享,即:“/data/share1”,然后我创建了一个本地 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 中的节点,这可以吗?
我在 r/kubernetes 上问了同样的问题,一位用户对此发表了评论。我们现在正在尝试这个,看起来还可以。
We had to deal with a similar situation and I ended up developing a custom Flexvolume driver to mount CIFS shares into pods from examples I found online.
I have written a repo with the solution that works for my use case.
https://github.com/juliohm1978/kubernetes-cifs-volumedriver
You still need to intall cifs-utils and jq on each Kubernetes host as a pre-requisite. But it does allow you to create PersistentVoluems that mount CIFS volumes and use them in your pods.
I hope it helps.