如何在k8s中对接s3存储

发布于:2025-04-02 ⋅ 阅读:(29) ⋅ 点赞:(0)

github地址:

https://github.com/majst01/csi-driver-s3

1.CSI for S3

这是用于 S3(或兼容 S3)存储的容器存储接口 (CSI)。它可以动态分配存储桶并通过Fuse mount将它们安装到任何容器中

2.状态

这仍处于试验阶段,不应在任何生产环境中使用。根据所使用的安装器和 S3 存储后端,可能会发生意外的数据丢失。

3.Kubernetes installation

3.1Requirements

Kubernetes 1.16+(CSI v1.0.0 兼容性)
Kubernetes 必须允许特权容器
Docker 守护进程必须允许共享挂载(Systemd 标志 MountFlags=shared)

3.2 用S3凭证创建secret

# deploy/kubernetes/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: csi-driver-s3-secret
  namespace: kube-system
stringData:
  accessKeyID: <YOUR_ACCESS_KEY_ID>
  secretAccessKey: <YOUR_SECRET_ACCES_KEY>
  # For AWS set it to "https://s3.<region>.amazonaws.com"
  endpoint: <S3_ENDPOINT_URL>
  # If not on S3, set it to ""
  region: <S3_REGION>

如果您使用其他 S3 兼容存储,region可以为空。

3.2 部署

kubectl apply -f deploy/kubernetes

如果你用的是k8s 1.25+ 的版本,下面这段可以不执行。

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: psp-s3
spec:
  allowPrivilegeEscalation: true
  fsGroup:
    rule: RunAsAny
  privileged: true
  runAsUser:
    rule: RunAsAny
  seLinux:
    rule: RunAsAny
  supplementalGroups:
    rule: RunAsAny
  hostNetwork: true
  allowedHostPaths: []
  allowedCapabilities:
    - "SYS_ADMIN"
  volumes:
  - '*'

测试S3 driver

Create a PVC

kubectl apply -f deploy/sample/pvc.yaml

Check if the PVC has been bound:

$ kubectl get pvc
NAME                STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
csi-driver-s3-pvc   Bound     pvc-c5d4634f-8507-11e8-9f33-0e243832354b   5Gi        RWO            csi-driver-s3  9s

Create a test pod which mounts your volume:

kubectl apply -f deploy/sample/pod.yaml
If the pod can start, everything should be working.

Test the mount

$ kubectl exec -ti csi-driver-s3-test-nginx bash
$ mount | grep fuse
s3fs on /var/lib/www/html type fuse.s3fs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
$ touch /var/lib/www/html/hello_world

用S3 Browser连接,发现bucket已经创建了,bucket的名称即为pv的名称

在这里插入图片描述
由于 S3 不是真正的文件系统,因此需要考虑一些限制。根据您使用的安装器,您将拥有不同级别的 POSIX 兼容性。此外,根据您使用的 S3 存储后端,并不总是有一致性保证。