Kubernetes版本对接对象存储几种方案

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: Kubernetes版本对接对象存储几种方案

对象存储

想要通过创建 PersistentVolume(PV)/PersistentVolumeClaim(PVC),并为工作负载挂载数据卷的方式使用云对象存储 COS

对于对象存储,在k8s中不需要PV/PVC来做资源抽象,应用可以直接访问和使用,如果需要在k8s支持访问,就需要相应的csi插件,支持对象存储转成文件存储

例如: 几个大厂的方式

阿里:https://help.aliyun.com/document_detail/130911.html

腾讯:https://cloud.tencent.com/document/product/457/44232

华为:https://support.huaweicloud.com/intl/zh-cn/usermanual-cce/cce_01_0267.html

如果对接文件存储,可以使用使用S3fs可以把Bucket当成一个文件夹挂载到Linux系统内部,当成一个系统文件夹使用。

社区方案

方案1:Object Storage API (COSI)

目前开发中,不成熟

官方文档

https://container-object-storage-interface.github.io/docs/

https://container-object-storage-interface.github.io/

https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1979-object-storage-support#provisionergetinfo

Kubernetes v1.23 正式发布,有哪些增强?

Kubernetes 现在对文件和块存储都有了较好的扩展支持 (CSI),但是这些并不能很好的支持对象存储,原因如下:

  • oss 以桶 (bucket) 来组织分配存储单元而不是文件系统挂载或是块设备
  • oss 服务的访问是通过网络调用而不是本地的 POSIX 调用
  • oss 不试用 csi 定义的 Attach/Detach 逻辑 (无需挂载/卸载)

COSI 是关于如何为容器化的工作负载 (Pod) 提供对象存储服务 (oss) 的标准协议。与 csi 和 cni 类似,Kubernetes 旨在通过定义一些标准的接口与第三方 oss 服务提供方解耦。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJJmj72m-1651055590510)(https://cdn.jsdelivr.net/gh/Fly0905/note-picture@main/img/202204252104317.jpeg)]

方案2:csi-s3

可以使用,但需要多测试

官方文档

https://github.com/CTrox/csi-s3

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

使用s3(minio)为kubernetes提供pv存储

Kubernetes 要求
  • Kubernetes 1.13+(CSI v1.0.0 兼容性)
  • Kubernetes 必须允许特权容器
  • Docker 守护进程必须允许共享挂载(systemd 标志MountFlags=shared
  • 是非常实验性的,还未在任何生产环境中使用。根据使用的挂载程序和 S3 存储后端,可能会发生意外的数据丢失。
MountFlags

在 18.09 之前的 Docker 版本中,containerd 由 Docker 引擎守护进程管理。

在 Docker Engine 18.09 中,containerd 由 systemd 管理。由于 containerd 由 systemd 管理,因此任何docker.service更改挂载设置的 systemd 配置的自定义配置(例如,MountFlags=slave)都会破坏 Docker Engine 守护进程和 containerd 之间的交互,并且您将无法启动容器。

运行以下命令以获取 的MountFlags属性的当前值docker.service

$ sudo systemctl show --property=MountFlags docker.service
MountFlags=

如果此命令为 打印非空值,请更新您的配置MountFlags,然后重新启动 docker 服务。

为什么要将S3 以文件存储的方式挂载到 Kubernetes 平台?

对于原来使用本地目录访问数据的应用程序,比如使用本地磁盘或网络共享盘保存数据的应用系统,如果用户希望把数据放到S3上,则需要修改数据的访问方式,比如修改为使用SDK 或CLI访问S3中存储的数据。

同时实现kubernetes集群是很多用户的需求,无论是使用托管服务还是自建kubernetes集群,存储都是kubernetes集群搭建的重点。并且docker的部署方式也让客户程序减少了对于底层环境的依赖。为了让用户原来的应用系统能在不做修改的情况下直接使用S3服务,需要把S3存储桶作为目录挂载到用户kubernetes集群中的worker节点上

利用S3fs将S3存储桶在kubernetes平台上以sidecar方式挂载到kubernetes集群的worker实例上的pod中,挂载后需要读写此存储桶的pod都可以对此桶进行读写,以实现共享存储功能。

什么是 S3FS ?

S3fs是基于FUSE的文件系统,允许Linux和Mac Os X 挂载S3的存储桶在本地文件系统,S3fs能够保持对象原来的格式,S3FS是POSIX的大子集,包括读/写文件、目录、符号链接、模式、uid/gid和扩展属性,AmazonS3、Google云存储和其他基于S3的对象存储兼容。关于S3fs的详细介绍,请参见:https://github.com/s3fs-fuse/s3fs-fuse

后续

  1. 验证特权容器,升级了多少特权

参考链接

  1. 使用s3(minio)为kubernetes提供pv存储
  2. 基于openshift+华为对象存储的CSI开发
  3. 利用 S3FS 将 S3 作为共享存储挂载到 Kubernetes Pod
  4. 使用S3fs在Linux实例上挂载Bucket
  5. S3FS:基于对象存储的文件系统
  6. https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core
  7. https://github.com/FLY-Open-K8s/csi-driver-s3.git
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4月前
|
Kubernetes Cloud Native 网络协议
Kubernetes 高可用性与灾难恢复方案
【8月更文第29天】随着业务的不断增长,保持应用程序的高可用性和灾难恢复能力变得越来越重要。Kubernetes 作为现代云原生应用的主要平台,提供了丰富的工具和方法来保证应用的高可用性以及快速恢复的能力。本文将详细介绍如何利用 Kubernetes 的功能来构建高可用性的系统,并实施有效的灾难恢复策略。
260 1
|
8天前
|
人工智能 Kubernetes 安全
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
46 13
|
2月前
|
Kubernetes Linux 测试技术
|
2月前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
3月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
3月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
125 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
2月前
|
Kubernetes 监控 测试技术
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案
|
3月前
|
Kubernetes 容器
k8s基于secretRef认证对接rbd块设备
文章介绍了如何在Kubernetes集群中通过secretRef认证方式接入Ceph的RBD块设备,并提供了详细的步骤和配置文件示例。
48 7
|
3月前
|
存储 Kubernetes Ubuntu
Ubuntu 22.04LTS版本二进制部署K8S 1.30+版本
这篇文章详细介绍了在Ubuntu 22.04 LTS系统上使用VMware Fusion虚拟化软件部署Kubernetes 1.30+版本的完整过程,包括环境准备、安装containerd、配置etcd、生成证书、部署高可用组件、启动Kubernetes核心组件以及网络插件的部署和故障排查。
206 4
|
3月前
|
存储 Kubernetes 数据安全/隐私保护
k8s对接ceph集群的分布式文件系统CephFS
文章介绍了如何在Kubernetes集群中使用CephFS作为持久化存储,包括通过secretFile和secretRef两种方式进行认证和配置。
113 5