我们在 AWS 上运行了一个 k8s 集群,它拉取了一堆 Docker 容器,用户必须运行 JupyterLab、VSCode 等。在这种情况下,有没有办法在启动 Docker 容器时挂载现有的 EBS 卷?只需要一些想法和方向,我想我应该能够实现它们。
谢谢 Petter
答案1
为了创建一个附加了现有 EBS 卷的 pod,您可以执行以下操作,您需要完成一些步骤,可以通过执行命令在集群中创建以下每个资源$ kubectl apply -f file-name.yaml
:
1. 创建存储类别
当持久卷声明指定此存储类时,需要此资源来指定 K8s 将应用的配置者、卷类型和绑定属性。
您可以拥有默认存储类,因此以后无需通过名称声明它,但是这里让我们使用与默认存储类不同的存储类,因为其属性可能因不同的用例而异。
这里最重要的选项是回收策略,它设置为保留,使用默认选项,一旦持久卷声明被删除,删除也会导致 EBS 卷被删除,我们希望将卷保留在数据所在的位置,因此它将被“释放”。
指定的配置程序是随 kubernetes 一起提供的卷插件。VolumeBinding
模式“Intermediate”意味着不会引入延迟,就像在需要满足进一步要求的情况下一样,绑定是在创建持久卷声明时完成的。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: example-sc
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
mountOptions:
- debug
volumeBindingMode: Immediate
2. 通过创建持久卷将卷添加到集群
通过此资源 (pv),您可以向集群添加之前在 AWS 帐户中创建的现有 EBS 卷。这可能包含我们想要提供给容器的现有信息,或者您可能从现在开始将同一卷用于新数据库。
kind: PersistentVolume
apiVersion: v1
metadata:
name: test
labels:
type: amazonEBS
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
volumeID: <volume-id>
fsType: ext4
3. 创建持久卷声明
创建持久卷声明您只是创建了一个存储“请求”。稍后在创建 pod 并指定此 PVC 时将调用此请求。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: task-pv-claim
spec:
storageClassName: example-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
4. 创建 Pod 引用之前创建的持久卷声明。
看一看:ebs-k8s,
有用的信息
另外,还有一些 EBS 卷插件可以将 EBS 卷直接与容器绑定,例如火营,绒布,雷克斯雷
。Flocker 和 RexRay 可以将一个 EBS 卷绑定到一个容器。而 FireCamp 可以识别有状态服务,并且可以将一个 EBS 卷绑定到一个服务的每个容器。
使用这些插件,您可以将一个卷挂载到一个容器。容器不会占用根空间,也不会相互影响。