我使用 kubeadm
设置了一个包含四个 EC2 实例的 Kubernetes 集群。 Kubernetes 集群运行良好,但在我尝试创建 PersistentVolumeClaim
时失败。
首先,我使用以下 YAML 创建了一个 StorageClass
,它工作正常。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: generic
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
encrypted: "false"
然后我尝试使用以下 YAML 创建一个 PersistentVolumeClaim
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: slow
labels:
app: nginx
spec:
storageClassName: generic
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
得到的错误信息是:
Failed to provision volume with StorageClass "generic": Failed to get AWS Cloud Provider. GetCloudProvider returned <nil> instead
顺便说一句,似乎从未创建过PersistentVolume
。
kubectl get pv
No resources found.
有什么解决办法吗?
谢谢。
最佳答案
这是因为您在运行 kubeadm init 时没有使用选项 --cloud-provider=aws
kubeadm --cloud-provider=aws init ...
或者,您应该将云提供商信息 (cloudProvider) 放入您的配置文件中,它会在初始化期间将云提供商标志添加到 api 和 Controller 管理器:
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
etcd:
endpoints:
- "http://my-etcd1"
- "http://my-etcd2"
- "http://my-etcd3"
cloudProvider: aws
apiServerExtraArgs:
apiserver-count: 3
apiServerCertSANs:
- "my-master-hostname1"
- "my-master-hostname2"
- "my-master-hostname3"
- "10.10.0.50"
- "10.10.0.51"
- "10.10.0.52"
- "127.0.0.1"
token: "my-kube-token"
tokenTTL: "0"
更多信息:https://medium.com/jane-ai-engineering-blog/kubernetes-on-aws-6281e3a830fe
关于amazon-web-services - Kubernetes 无法在 AWS-EBS 上创建 PersistentVolumeClaim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57876648/