首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用StorageClass进行Kubernetes部署

使用StorageClass进行Kubernetes部署
EN

Stack Overflow用户
提问于 2022-05-16 10:43:02
回答 1查看 204关注 0票数 1

我有StorageClassprovisioner: kubernetes.io/aws-ebs

我有一个部署,我需要安装一些卷。所以,我需要使用这个StorageClass

这是我的sc.yaml

代码语言:javascript
复制
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
  name: gp2
parameters:
  fsType: ext4
  type: gp2
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

这是我的deployment.yaml

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
  namespace: var.namespace
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:10.4
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgredb
      # how can I specify my storage class here?
      volumes:
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pv-claim

我需要在部署中指定存储类。有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-16 13:55:19

我需要在部署中指定存储类。有人能帮我吗?

在我们回答之前,让我们先解释一下StroageClassPersistentVolumePersistent Volume Claim

术语

StroageClass

  • 我们可以将StorageClass视为驱动程序(软件)。
  • 负责与存储硬件“通信”的驱动程序。
  • 通常但不是必须的,StorageClass由存储提供程序(硬件或虚拟)提供。

PersistentVolume

  • PersistentVolume (PV)是集群中的一个存储,它已经由管理员提供或使用Storage Classes动态提供。

PersistentVolumeClaim

  • PersistentVolumeClaim (PVC)是用户(通常为Pod)存储的请求。

通用图(描述K8存储对象)

TL;DR;解释

  • 您有物理存储(磁盘、SSD、虚拟等)
  • 有人(通常是存储方或云提供商)向您提供了StorageClass对象。顺便说一句,您不需要在大多数情况下定义/声明它,K8S将为您提供默认存储(emptyDir)。
  • 然后定义PersistentVolume (PV),它将根据所需的类型(StorageClass)“创建”存储。
  • 下一步是定义PersistentVolumeClaim (PVC)。PVC是从您在前一步中定义的(PV)中安装的“物理”存储的分配。
  • 最后一步是为您的执行(PodDeploymentStatefulSet等)分配卷,这是使用volumes完成的。

**说明

  • 如前所述,大多数情况下,您可以简单地使用卷,而无需定义StorageClassPV/PVC。只需在所需的参考资料中使用一个卷,K8S将为您处理这个问题。
  • 有一些例外(这里没有过多的细节,比如StaefulSet)。如果未指定StorageClass,则将使用默认StorageClass。

现在让我们回答你的问题

  • 您已经定义了一个StorageClass
代码语言:javascript
复制
apiVersion: storage.k8s.io/v1
kind: StorageClass
...
provisioner: kubernetes.io/aws-ebs
  • 在您的部署中,您指定了volumes (如
代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
...
        
        # --> Here you define the actual mount path you need for your pods
        #     The name (PVC) is corresponding to the one you 
        #     defined below under volumes
        volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgredb
      # ->>>> how can I specify my storage class here?
      # You don't need to specify storage class, you need to define PVC,
      # This is the missing piece in your code.
      volumes:
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pv-claim

丢失的那块..。

代码语言:javascript
复制
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-pv-claim ### <<< The name as mentioned above in your Deploymnet
  labels:
    app: postgres
spec:
  # The name of the storage class u defined earlier
  storageClassName: gp2

  # The access modes are:
  #   ReadWriteOnce - The volume can be mounted as read-write by a single node
  #   ReadWriteMany - The volume can be mounted as read-write by a many nodes
  #   ReadOnlyMany  - The volume can be mounted as read-only  by many nodes
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

希望它能帮到你。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72257944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档