Yan*_*ong 3 kubernetes persistent-volumes
我在单个节点上设置了一个新的k8,这很麻烦。但是PersistentVolume,当我尝试创建简单的PostgreSQL时,不能成功创建。
以下是一些详细信息。
该StorageClass从官方网页复制:https://kubernetes.io/docs/concepts/storage/storage-classes/#local
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
Run Code Online (Sandbox Code Playgroud)
该StatefulSet是:
kind: StatefulSet
apiVersion: apps/v1beta1
metadata:
name: postgres
spec:
serviceName: postgres
replicas: 1
...
volumeClaimTemplates:
- metadata:
name: postgres-data
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Run Code Online (Sandbox Code Playgroud)
关于跑步StorageClass:
$ kubectl describe storageclasses.storage.k8s.io
Name: local-storage
IsDefaultClass: No
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"local-storage"},"provisioner":"kubernetes.io/no-provisioner","volumeBindingMode":"WaitForFirstConsumer"}
Provisioner: kubernetes.io/no-provisioner
Parameters: <none>
AllowVolumeExpansion: <unset>
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: WaitForFirstConsumer
Events: <none>
Run Code Online (Sandbox Code Playgroud)
关于跑步PersistentVolumeClaim:
$ kubectl describe pvc
Name: postgres-data-postgres-0
Namespace: default
StorageClass: local-storage
Status: Pending
Volume:
Labels: app=postgres
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal WaitForFirstConsumer <invalid> (x2 over <invalid>) persistentvolume-controller waiting for first consumer to be created before binding
Run Code Online (Sandbox Code Playgroud)
K8s版本:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698aa92f0b1", GitTreeState:"clean", BuildDate:"2019-02-28T13:37:52Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:31:33Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
Run Code Online (Sandbox Code Playgroud)
Rob*_*t J 16
我自己就遇到了这个问题,完全陷入了困境,直到我意识到 的StorageClass设置VolumeBindingMode与WaitForFirstConsumer我的预期值相反Immediate。该值是不可变的,因此您必须:
获取存储类yaml:
kubectl get storageclasses.storage.k8s.io gp2 -o yaml > gp2.yaml
Run Code Online (Sandbox Code Playgroud)
或者您也可以从此处的文档复制示例(确保元数据名称匹配)。这是我的配置:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp2
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate
Run Code Online (Sandbox Code Playgroud)
StorageClass并在将新volumeBindingMode设置为 重新创建之前删除旧的Immediate。
注意: EKS clsuter 可能需要权限来创建 EBS 或 EFS 等云资源。假设 EBS 你应该擅长使用arn:aws:iam::aws:policy/AmazonEKSClusterPolicy.
完成此操作后,创建和使用动态配置的 PV应该没有问题。
应用程序正在等待Pod,而Pod正在等待PersistentVolumea PersistentVolumeClaim。但是,PersistentVolume使用前应由用户准备。
我以前的YAML缺少PersistentVolume这样的代码:
kind: PersistentVolume
apiVersion: v1
metadata:
name: postgres-data
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 1Gi
local:
path: /data/postgres
persistentVolumeReclaimPolicy: Retain
accessModes:
- ReadWriteOnce
storageClassName: local-storage
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- postgres
Run Code Online (Sandbox Code Playgroud)
/data/postgres使用前应准备好本地路径。Kubernetes不会自动创建它。
对我来说,问题是accessModesPV 和 PVC 中的字段不匹配。PVC 正在请求RWX/ ReadWriteMany,而 PV 正在提供RWO/ ReadWriteOnce。
| 归档时间: |
|
| 查看次数: |
3834 次 |
| 最近记录: |