在 k8s 上运行的 Docker 容器中安装现有的 EBS 卷

在 k8s 上运行的 Docker 容器中安装现有的 EBS 卷

我们在 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 卷绑定到一个服务的每个容器。

使用这些插件,您可以将一个卷挂载到一个容器。容器不会占用根空间,也不会相互影响。

看一看:ebs-容器内ebs-aws

相关内容