如何在k8s中对接s3存储

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

yaml 复制代码
# 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 部署

bash 复制代码
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

bash 复制代码
kubectl apply -f deploy/sample/pvc.yaml

Check if the PVC has been bound:

bash 复制代码
$ 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:

bash 复制代码
kubectl apply -f deploy/sample/pod.yaml
If the pod can start, everything should be working.

Test the mount

bash 复制代码
$ 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 存储后端,并不总是有一致性保证。

相关推荐
zhojiew3 分钟前
istio in action之服务网格和istio组件
云原生·istio
hi,编程哥3 小时前
Docker、ECS 与 K8s 网段冲突:解决跨服务通信中的路由问题
docker·容器·kubernetes
How_doyou_do3 小时前
项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台
运维·docker·容器
代码的奴隶(艾伦·耶格尔)3 小时前
微服务!!
微服务·云原生·架构
Cloud Traveler6 小时前
Kubernetes vs. OpenShift:深入比较与架构解析
架构·kubernetes·openshift
是垚不是土7 小时前
探秘高可用负载均衡集群:企业网络架构的稳固基石
运维·服务器·网络·云原生·容器·架构·负载均衡
杰克逊的日记7 小时前
大规模k8s集群怎么规划
云原生·容器·kubernetes
luck_me57 小时前
K8S已经成为了Ai应用运行的平台工具
人工智能·容器·kubernetes
大G哥8 小时前
实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API
云原生·serverless·云计算·gateway·aws
matrixlzp8 小时前
K8S Ingress、IngressController 快速开始
云原生·容器·kubernetes