我目前正在使用GCE标准容器集群,取得了很大的成功和乐趣。但是我对GCE持久磁盘的配置有疑问。
如this文件形式Kubernetes所述。我创建了两个YAML文件:
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
annotations:
storageclass.beta.kubernetes.io/is-default-class: "true"
name: slow
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
和
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
如果我现在创建以下批量声明:
{
"kind": "PersistentVolumeClaim",
"apiVersion": "v1",
"metadata": {
"name": "claim-test",
"annotations": {
"volume.beta.kubernetes.io/storage-class": "hdd"
}
},
"spec": {
"accessModes": [
"ReadWriteOnce"
],
"resources": {
"requests": {
"storage": "3Gi"
}
}
}
}
磁盘创建完美! 如果我现在开始关注单位
apiVersion: v1
kind: ReplicationController
metadata:
name: nfs-server
spec:
replicas: 1
selector:
role: nfs-server
template:
metadata:
labels:
role: nfs-server
spec:
containers:
- name: nfs-server
image: gcr.io/google_containers/volume-nfs
ports:
- name: nfs
containerPort: 2049
- name: mountd
containerPort: 20048
- name: rpcbind
containerPort: 111
securityContext:
privileged: true
volumeMounts:
- mountPath: /exports
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: claim-test
磁盘安装完美但很多次我偶然发现了以下错误(在kubelet.log文件中找不到更多):
无法在节点“....”上附加卷“claim-test”:找不到GCE永久磁盘:diskName =“.....”zone =“europe-west1-b” 同步窗格时出错,跳过:超时已过期,等待卷附加/装入窗格“....”。未附加/未安装卷的列表= [....]
有时,pod会完美启动,但有时它会崩溃。我唯一能找到的是创建PVC和RC本身之间需要足够的时间。我尝试了很多次,但结果不一样。
我希望有人可以给我一些建议或帮助。
提前致谢! 最好的问候,
Hacor
答案 0 :(得分:0)
提前感谢您的评论!经过几天的搜索,我终于能够确定问题所在,我发布它是因为它可能对其他用户有用。
我使用NFS example作为Kubernetes作为复制控制器为我的应用程序提供NFS存储,但似乎当NFS服务器和PV,PVC被删除时,有时NFS共享会卡在节点上本身,我认为这与我没有按特定顺序删除这些元素这一事实有关,因此节点因为共享无法将新股份加载到自身或pod而陷入困境!
我注意到在从群集中删除了一些应用程序(NFS,PV,PVC和其他组件)后,问题总是发生。如果我在GCE上创建了一个新的集群,它可以完美地创建应用程序,直到我删除它并且它出错...
正确的删除顺序是什么我不确定,但我认为:
如果pod需要更长时间才能删除,并且在删除PV之前它没有完全消失,那么节点会挂起一个无法删除的挂载,因为它正在使用中,而且这就是问题发生的地方。
我必须诚实地说,现在我正在转向外部配置的GlusterFS集群。 希望它可以帮助别人!
此致
Hacor