如何为StatefulSet静态配置卷?

Dan*_*Dan 6 google-cloud-platform kubernetes google-kubernetes-engine

我正在使用Google Kubernetes Engine,希望我StatefulSet使用以前创建的磁盘,my-app-disk而不是为该集中的每个副本动态创建新的永久磁盘。我的配置如下:

PersistentVolume yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-app-data
  labels:
    app: my-app
spec:
  capacity:
    storage: 60Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: my-app-disk
    fsType: ext4
Run Code Online (Sandbox Code Playgroud)

PersistentVolumeClaim yaml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-app-data
  labels:
    app: my-app
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 60Gi
  selector:
    matchLabels:
      app: my-app
Run Code Online (Sandbox Code Playgroud)

StatefulSet yaml:

apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: my-stateful-set
spec:
  serviceName: my-stateful-set
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: gcr.io/projectname/my-app:0.0.3
        ports:
        - containerPort: 80
          name: http
        volumeMounts:
        - name: my-app-data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: my-app-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi
Run Code Online (Sandbox Code Playgroud)

Ian*_*wis 7

StatefulSet将为PersistentVolumeClaim每个吊舱创建自己的一个,因此您不必自己创建一个。A PersistentVolume和a PersistentVolumeClaim将仅一对一绑定。您的PVC已绑定到您的卷,因此,由创建的任何PVC StatefulSet都无法绑定到您的卷,因此将不会使用它。

在您的情况下,您PersistentVolumeStatefulSet以下人员应该可以解决问题。请确保删除PersistentVolumeClaim您创建的,以便它不会绑定到上PersistentVolume。此外,确保存储类名称设置正确下方查看光伏并在volumeClaimTemplates你的StatefulSet下面或PVC制成由StatefulSet可能不结合到卷。

PersistentVolume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-app-data
  labels:
    app: my-app
spec:
  capacity:
    storage: 60Gi
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: my-app-disk
    fsType: ext4
Run Code Online (Sandbox Code Playgroud)

StatefulSet.yaml

apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: my-stateful-set
spec:
  serviceName: my-stateful-set
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: gcr.io/projectname/my-app:0.0.3
        ports:
        - containerPort: 80
          name: http
        volumeMounts:
        - name: my-app-data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: my-app-data
    spec:
      selector:
        matchLabels:
          app: my-app
      storageClassName: standard
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi
Run Code Online (Sandbox Code Playgroud)

  • StatefulSet 将只有 3 个副本,并且您将拥有 3 个带有 app=myapp 标签的 PersistentVolume,因为这就是 PersistentVolumeClaim 标签选择器所使用的内容。 (3认同)
  • 对于 3 个副本和 3 个磁盘来说,这会如何?我的应用程序磁盘1、我的应用程序磁盘2、我的应用程序磁盘3? (2认同)
  • 这在 AWS 上不起作用。``` 无法使用 StorageClass“gp2-encrypted” 来配置卷:AWS 上的动态配置不支持 Claim.Spec.Selector ``` (2认同)