aws 中可重用静态文件的持久卷服务?

发布于 2025-01-13 02:25:07 字数 4561 浏览 3 评论 0原文

在问问题之前,我对 k8s 和 AWS 服务都很陌生,哦,还有英语。 如果我的上下文不明确或英语不好,请原谅我...

我的项目在 AKS 上运行,使用 docker 映像,没有静态文件。 这些静态文件需要在运行时替换,因此目前我将静态文件放置在 Azure 存储服务 中的 fileShare 上。到目前为止看起来效果很好。

现在,我需要将 K8s 服务从 AKS 更改为 EKS。 更改 K8s 服务非常容易......直到我遇到我的静态文件。

首先,我认为以某种方式使用 S3 存储类就可以了。 但从短期研究来看,有几篇文档推荐使用EBS或EFS。 我计划为 AKS 使用多个可用区,因此我选择 EFS。

实施 EFS 后,我意识到我无法将静态文件上传到 EFS 存储! 我的意思是我可以通过 sshd 或其他方式上传,但 K8s 中的 EFS 存储驱动程序是在 EFS 服务存储中创建随机生成的目录。

我仍然可以手动将静态文件放入随机生成的目录中。但在这种情况下,我只是希望 EFS 驱动程序 Pod 没有重新创建。 不,我不能使用它。

现在,我意识到 EFS 不仅仅适合我的情况。 我需要帮助来选择使用哪种存储服务来读取具有多个可用区和多个 Pod 的静态文件?

谢谢。

编辑

写完问题后,我意识到我的问题相当模糊。

我的kubernetes版本是1.21 我按照此文档了解实施 EFS 的说明

它工作得很好,我可以检查我的 EFS 有几个目录,如下所示,

./
./dynamic_provisioning
./dynamic_provisioning/{random-generated-dynamic-provision-dir-1}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-2}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-3}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-4}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-5}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-6}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-7}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-8}

因为我的 storageClass 设置。(设置是从 此处

好的,现在我需要将相同的静态文件放入 ./dynamic_provisioning/{random- generated-dynamic-provision-dir-N} 我可以手动将静态文件放入 ./dynamic_provisioning/{random- generated-dynamic-provision-dir-1} 但它不能确保 {random- generated-dynamic-provision-dir- 1} 目录在生成新的动态配置目录时永远不会更改或复制我的静态文件。

就在此时此刻,我发布了原始问题。 经过几次搜索,我只是将dynamic_provisioning方法更改为static_provisioning。 (像这样)

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  storageClassName: ""
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-{MY_EFS_ID}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
  name: myapi-lb
  labels:
    app: myapi-lb
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
spec:
  selector:
    app: myapi
  ports:
    - port: 80
      targetPort: 3000
  type: LoadBalancer
---
# 배포 대상.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapi
  labels:
    app: myapi
spec:
  selector:
    matchLabels:
      app: myapi
  replicas: 1
  template:
    metadata:
      labels:
        app: myapi
        run: myapi
    spec:
      containers:
        - name: myapi
          image:  MY_ECR_LOCATION.amazonaws.com/myapi:TAG
          envFrom:
            - secretRef:
                name: myapi-secrets
          ports:
            - containerPort: 3000
              name: myapi
          resources:
            requests:
              cpu: 250m
            limits:
              cpu: 500m
          volumeMounts:
            - name: persistent-storage
              mountPath: /data
      volumes:
        - name: persistent-storage
          persistentVolumeClaim:
            claimName: efs-claim

经过这些设置后,不再有动态生成的目录,我只是将静态文件放入我的 EFS 的根目录中...... 现在按我的预期工作。

[[email protected] efs]$ ls -l
total 12
drwx------ 12 efs_connector efs_connector 6144 Mar 14 03:52 dynamic_provisioning # ,_ dynamically created by storageClass.yml files but not use anymore!
drwxrwxrwx  4 efs_connector efs_connector 6144 Mar  8 06:37 files # <- this files are what i want to serve!
drwxrwxrwx  2 efs_connector efs_connector 6144 Mar  8 06:36 locale # <- this files are what i want to serve!

但在我内心深处,我担心这个设置会产生副作用,并且我找不到关于动态和静态配置之间的区别的明确解释。

或者我可能使用 EFS 完全错误..我仍然不知道

before ask question, Im very new for k8s neither AWS service, oh and also english.
please forgive me if my context are ambiguous or bad-english...

My project is run on AKS, with docker image without static files.
these static files are need to replace in run-time, so currently I place static files onto fileShare in Azure storage service. and it work lookin well so far.

Now, I need to change K8s service from AKS to EKS.
changing K8s service is quite easy...until i encounted my static files.

First, I thought it will be okay to just use S3 storage class somehow.
but from short research, several of documents are recommended to use EBS or EFS.
I was planned to use multiple Availity zone for AKS, so I choose EFS.

After implement EFS, I realized that I cannot upload my static file into EFS storage!
I mean I can just upload via sshd or something else, but EFS storage driver in K8s is create randomly generated directory in EFS services storage.

I still i can manually place static file into randomly-generated-directory. but in this case, I just hope that EFS driver pods are did not recreated.
No I cannot use it.

Now, I realized that EFS is not just fit in my case.
I need help to choose what kind of storage service do I use for read static files with multiple Availity zone and multiple pods?

Thanks.

Edit

After write question, I realized that my question is quite ambiguous.

My kubernetes version is 1.21
and I followed this document about instruction for implement EFS

And it work well, and I can check my EFS have several directory like below

./
./dynamic_provisioning
./dynamic_provisioning/{random-generated-dynamic-provision-dir-1}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-2}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-3}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-4}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-5}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-6}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-7}
./dynamic_provisioning/{random-generated-dynamic-provision-dir-8}

Because of my storageClass settings.(settings are copy from here)

Okay, now I need to place my same static files into
./dynamic_provisioning/{random-generated-dynamic-provision-dir-N}
I can manually place static file into ./dynamic_provisioning/{random-generated-dynamic-provision-dir-1} but it does not ensure {random-generated-dynamic-provision-dir-1} directory will never change nor copy my static files when new dynamic provision directory generated.

In very this moment, I post original question.
After few more searching, I just change dynamic_provisioning method to static_provisioning.
(like this)

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  storageClassName: ""
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-{MY_EFS_ID}
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
  name: myapi-lb
  labels:
    app: myapi-lb
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
spec:
  selector:
    app: myapi
  ports:
    - port: 80
      targetPort: 3000
  type: LoadBalancer
---
# 배포 대상.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapi
  labels:
    app: myapi
spec:
  selector:
    matchLabels:
      app: myapi
  replicas: 1
  template:
    metadata:
      labels:
        app: myapi
        run: myapi
    spec:
      containers:
        - name: myapi
          image:  MY_ECR_LOCATION.amazonaws.com/myapi:TAG
          envFrom:
            - secretRef:
                name: myapi-secrets
          ports:
            - containerPort: 3000
              name: myapi
          resources:
            requests:
              cpu: 250m
            limits:
              cpu: 500m
          volumeMounts:
            - name: persistent-storage
              mountPath: /data
      volumes:
        - name: persistent-storage
          persistentVolumeClaim:
            claimName: efs-claim

After theses settings, there is no dynamically generated directory anymore, and I just put static files into very root on my EFS...
and works now as I expect.

[[email protected] efs]$ ls -l
total 12
drwx------ 12 efs_connector efs_connector 6144 Mar 14 03:52 dynamic_provisioning # ,_ dynamically created by storageClass.yml files but not use anymore!
drwxrwxrwx  4 efs_connector efs_connector 6144 Mar  8 06:37 files # <- this files are what i want to serve!
drwxrwxrwx  2 efs_connector efs_connector 6144 Mar  8 06:36 locale # <- this files are what i want to serve!

But still in my deep inside, Im afraid what this settings cause side effects, and I cannot find clear explanation about what is difference between dynamic and static provisioning.

Or I might using EFS totally wrong.. I still don't know

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文