我正在尝试使用storageOS设置高可用性集群。从字面上看,我想在节点之间复制卷,并且如果我的全状态应用程序下的某个节点应该在具有最后状态的新节点上启动。
我在裸机(virtualbox)上有1个主节点和2个从节点。我根据以下文档成功安装了带头盔的storageos:https://docs.storageos.com/docs/platforms/kubernetes/install/1.13
我可以在浏览器上访问storageos的Web GUI,一切似乎都很好。我也成功创建了storageclass。
我尝试创建一个持久卷声明并绑定到一个pod.pvc和pod创建之后,pv成功生成并绑定到声明。我从浏览器中检查它,并且节点上有1个副本和1个主持久卷。直到这里都没有问题。
当我关闭Pod节点的电源并在另一个节点上重新启动Pod时,该Pod停留在容器的创建状态.Describe命令会给出以下结果:
警告FailedAttachVolume 23s卷“ pvc-0b2a1dbf-62e4-11e9-8b86-0800278a3f7b”的多连接错误吊舱nginx,nginx-6779c9f48b-g2825已使用该卷
我遵循此指南,并且Pod必须以相同状态在另一个节点上启动: https://docs.storageos.com/docs/platforms/kubernetes/firstvolume/
我在节点“ / var / lib / storageos / volumes”和pod上检查了该目录,我可以看到一个节点中的卷(具有持久卷),但是看不到另一节点上的任何卷。
我尝试过:
更改光伏回收政策
尝试使用openebs,但存在相同问题
我尝试此故障排除结果是相同的:https://docs.storageos.com/docs/platforms/kubernetes/troubleshoot/volumes#pod-in-pending-because-of-mount-error(我仅尝试用于docker,我不知道如何在kubernetes上启用MountPropagation)
我尝试等待15-20分钟,但错误状态仍然相同
我尝试了1个主节点和3个从节点的结果相同
秘密和群集
apiVersion: v1
kind: Secret
metadata:
name: "storageos-api"
namespace: "default"
labels:
app: "storageos"
type: "kubernetes.io/storageos"
data:
# echo -n '<secret>' | base64
apiUsername: c3RvcmFnZW9z
apiPassword: c3RvcmFnZW9z
---
apiVersion: "storageos.com/v1"
kind: "StorageOSCluster"
metadata:
name: "example-storageos"
namespace: "default"
spec:
secretRefName: "storageos-api"
secretRefNamespace: "default"
---
PVC and Pod
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mpvc
labels:
storageos.com/replicas: "1"
annotations:
volume.beta.kubernetes.io/storage-class: fast
spec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
volumeMounts:
- mountPath: /usr/share/nginx/html/
name: v1
volumes:
- name: v1
persistentVolumeClaim:
claimName: mpvc
The pod must start on the other node when a node fails but cannot bind the same volume on new node