Kops 的 AWS 上的 Kubernetes - 单节点集群的动态配置 gp2 失败; PVC待定;
Kubernetes on AWS by Kops - dynamic provisioning gp2 fails for single node cluster; PVC is pending;
我的 PVC 一直处于 Pending
状态。
kubectl describe pvc project-s3-pvc
给出:
Name: project-s3-pvc
Namespace: default
StorageClass: gp2
Status: Pending
Volume:
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"project-s3-pvc","namespace":"default"},"spec":{"ac...
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/aws-ebs
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
Events: <none>
Mounted By: project-s3-86ccd56868-skvv5
✔ /data/project [kubernetes-aws L|✚ 10⚑ 66
kubectl get storageclass
给出:
NAME PROVISIONER AGE
default kubernetes.io/aws-ebs 1h
gp2 (default) kubernetes.io/aws-ebs 1h
我是 运行 由 Kops 启动的 1 节点集群:
kops create cluster --node-count 0 --zones eu-west-1a ${NAME} --master-size t2.large
# Change size from 2 to 0, since above node-count does seem to be ignored
kops edit ig --name=${NAME} nodes
kops edit cluster ${NAME}
# Add this to cluster specification
iam:
allowContainerRegistry: true
legacy: false
kops update cluster ${NAME} --yes
kubectl taint nodes --all node-role.kubernetes.io/master-node
然后我添加 PVC,例如:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: bomcheck-s3-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Kops 版本:Version 1.11.0 (git-2c2042465)
编辑:
当我尝试手动创建 PV 时:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-manual
spec:
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
persistentVolumeReclaimPolicy: Delete
storageClassName: gp2
capacity:
storage: 30Gi
我得到:ValidationError(PersistentVolume.spec.awsElasticBlockStore): missing required field "volumeID" in io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource;
这是否意味着我需要在AWS 中手动创建前面的卷?我希望通过动态配置来增加容量。
知道如何调试 PVC/PV 无法代表我的 AWS 进行配置的原因吗?
如您所见,没有 Volume:
绑定到您的 PVC,这意味着自动卷配置失败并且未创建应该使用动态配置配置创建的 PV。您需要在 describe 命令的 Volume:
部分查看创建的 PV 名称。
不幸的是,没有显示问题的日志或事件。
我建议您进行故障排除,使用 gp2 手动创建存储类,看看它是否适用于下面的 yaml,然后在您的 PVC yaml 文件上定义 storageClassName
,如下所示:
存储类-手册-gp2.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp2-manual
parameters:
type: gp2
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Delete
volumeBindingMode: Immediate
申请:
kubectl apply -f storageclass-manual-gp2.yaml
pv-manual.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-manual
spec:
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
capacity:
storage: 30Gi
persistentVolumeReclaimPolicy: Delete
storageClassName: gp2-manual #your new storageclass name
申请:
kubectl apply -f pv-manual.yaml
描述 PVC:
kubectl describe pvc pvc-gp2-manual
如果不成功,我也建议你尝试不同的storage type for AWS EBS。
问题似乎与我[=16=]只是一个主节点有关。
当我使用 kops create cluster --zones eu-west-1a ${NAME} --master-size t2.large
启动集群时,它会启动 1 个主节点和 2 个节点。问题没有出现。
我不确定问题的直接根本原因是什么,因为没有任何东西可以阻止一个节点拥有外部 EBS 卷。这可能是 kops
本身的错误,因为只有一个主节点是例外而不是规则。
我的 PVC 一直处于 Pending
状态。
kubectl describe pvc project-s3-pvc
给出:
Name: project-s3-pvc
Namespace: default
StorageClass: gp2
Status: Pending
Volume:
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"project-s3-pvc","namespace":"default"},"spec":{"ac...
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/aws-ebs
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
Events: <none>
Mounted By: project-s3-86ccd56868-skvv5
✔ /data/project [kubernetes-aws L|✚ 10⚑ 66
kubectl get storageclass
给出:
NAME PROVISIONER AGE
default kubernetes.io/aws-ebs 1h
gp2 (default) kubernetes.io/aws-ebs 1h
我是 运行 由 Kops 启动的 1 节点集群:
kops create cluster --node-count 0 --zones eu-west-1a ${NAME} --master-size t2.large
# Change size from 2 to 0, since above node-count does seem to be ignored
kops edit ig --name=${NAME} nodes
kops edit cluster ${NAME}
# Add this to cluster specification
iam:
allowContainerRegistry: true
legacy: false
kops update cluster ${NAME} --yes
kubectl taint nodes --all node-role.kubernetes.io/master-node
然后我添加 PVC,例如:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: bomcheck-s3-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Kops 版本:Version 1.11.0 (git-2c2042465)
编辑: 当我尝试手动创建 PV 时:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-manual
spec:
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
persistentVolumeReclaimPolicy: Delete
storageClassName: gp2
capacity:
storage: 30Gi
我得到:ValidationError(PersistentVolume.spec.awsElasticBlockStore): missing required field "volumeID" in io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource;
这是否意味着我需要在AWS 中手动创建前面的卷?我希望通过动态配置来增加容量。
知道如何调试 PVC/PV 无法代表我的 AWS 进行配置的原因吗?
如您所见,没有 Volume:
绑定到您的 PVC,这意味着自动卷配置失败并且未创建应该使用动态配置配置创建的 PV。您需要在 describe 命令的 Volume:
部分查看创建的 PV 名称。
不幸的是,没有显示问题的日志或事件。
我建议您进行故障排除,使用 gp2 手动创建存储类,看看它是否适用于下面的 yaml,然后在您的 PVC yaml 文件上定义 storageClassName
,如下所示:
存储类-手册-gp2.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp2-manual
parameters:
type: gp2
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Delete
volumeBindingMode: Immediate
申请:
kubectl apply -f storageclass-manual-gp2.yaml
pv-manual.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-manual
spec:
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
capacity:
storage: 30Gi
persistentVolumeReclaimPolicy: Delete
storageClassName: gp2-manual #your new storageclass name
申请:
kubectl apply -f pv-manual.yaml
描述 PVC:
kubectl describe pvc pvc-gp2-manual
如果不成功,我也建议你尝试不同的storage type for AWS EBS。
问题似乎与我[=16=]只是一个主节点有关。
当我使用 kops create cluster --zones eu-west-1a ${NAME} --master-size t2.large
启动集群时,它会启动 1 个主节点和 2 个节点。问题没有出现。
我不确定问题的直接根本原因是什么,因为没有任何东西可以阻止一个节点拥有外部 EBS 卷。这可能是 kops
本身的错误,因为只有一个主节点是例外而不是规则。