K8S有状态服务-OSS存储使用最佳实践

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 阿里云对象存储服务(OSS)提供海量、安全、低成本、高可靠的云存储服务。适用于配置文件、图片、小视频等共享业务;

OSS介绍:

阿里云对象存储服务(OSS)提供海量、安全、低成本、高可靠的云存储服务。适用于配置文件、图片、小视频等共享业务;

容器服务访问OSS 数据是通过 ossfs 把 bucket 挂载到本地文件系统中,容器中的应用通过本地文件系统操作OSS上的数据,实现数据的访问、共享。

使用OSS卷挂载时:

随机或者追加写文件会导致整个文件的重写。

元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。

多个客户端挂载同一个bucket时,用户自行处理并发。例如:避免多个客户端写同一个文件。

不适合用在高并发读/写的场景,这样会让系统的load升高。

创建OSS存储卷

创建OSS Bucket

  1. 在OSS控制台创建一个Bucket,根据需求配置bucket的读写权限;
  2. 在概览页查询访问bucket的Endpoint;
  3. 可以在集群中一个节点挂载OSS Bucket测试是否可行;

创建PV

通过OSS卷创建PV资源类型,配置PV唯一性标签alicloud-pvname: pv-oss,“pv-oss”为PV Name;

配置storageClassName: oss,标识此PV为oss存储类型,只会与oss类型的PVC绑定;

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-oss
  labels:
    alicloud-pvname: pv-oss
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  storageClassName: oss
  flexVolume:
    driver: "alicloud/oss"
    options:
      bucket: "docker"
      url: "oss-cn-hangzhou.aliyuncs.com"
      akId: "***"
      akSecret: "***"
      otherOpts: "-o max_stat_cache_size=0 -o allow_other"

options支持的参数:

bucket:目前只支持挂载 Bucket,不支持挂载 Bucket 下面的子目录或文件。

url: OSS Bucket的endpoint,挂载 OSS 的接入域名。

akId: 用户的 access id 值。

akSecret:用户的 access secret 值。

otherOpts: 挂载 OSS 时支持定制化参数输入,格式为: -o **。 参考文档

创建应用

PVC通过配置selector,指定与创建的oss PV进行绑定;

配置storageClassName: oss,表示至于OSS类型存储卷绑定;

OSS为共享存储,可以同时由多个Pod挂载一个bucket;

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-oss
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: oss
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-oss
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: oss-static
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
          - name: pvc-oss
            mountPath: "/data"
          - name: pvc-oss
            mountPath: "/data1"
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - cd /data
          initialDelaySeconds: 30
          periodSeconds: 30
      volumes:
        - name: pvc-oss
          persistentVolumeClaim:
            claimName: pvc-oss

健康检查使用说明

OSSFS通过s3fs进行bucket挂载,是在用户态挂载的文件系统(FUSE);OSSFS在kubelet重置的时候会重新启动,这时容器内部的bind目录已经不可用,需要重启容器;配置健康检查能保证容器内oss目录不可用时重启容器,进而重新bind oss目录;(升级最近版本flexvolume可解决此问题)

livenessProbe 参数说明:

command:sh -c cd /oss-path;语法如上面示例所示,目录为容器内部的oss对应目录,多个目录时写一个即可;
initialDelaySeconds:容器启动后开始检查的时间;
periodSeconds:检查时间周期;

高可用验证

创建服务:

# kubectl create -f oss.yaml
persistentvolume "pv-oss" created
persistentvolumeclaim "pvc-oss" created
deployment.apps "oss-static" created

# kubectl get pod
NAME                          READY     STATUS    RESTARTS   AGE
oss-static-5d8cd48d96-9gc6c   1/1       Running   0          3s

OSS Bucket上创建临时文件:

# kubectl exec oss-static-5d8cd48d96-9gc6c ls /data | grep tmpfile

# kubectl exec oss-static-5d8cd48d96-9gc6c touch /data/tmpfile

# kubectl exec oss-static-5d8cd48d96-9gc6c ls /data/ | grep tmpfile
tmpfile

删除Pod,查看新创建Pod数据:

# kubectl delete pod oss-static-5d8cd48d96-9gc6c

# kubectl get pod
NAME                          READY     STATUS        RESTARTS   AGE
oss-static-5d8cd48d96-bfwb2   1/1       Running       0          14s

# kubectl exec oss-static-5d8cd48d96-bfwb2 ls /data | grep tmpfile
tmpfile

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
6天前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
6天前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
1天前
|
存储 弹性计算 Kubernetes
【阿里云云原生专栏】深入解析阿里云Kubernetes服务ACK:企业级容器编排实战
【5月更文挑战第20天】阿里云ACK是高性能的Kubernetes服务,基于开源Kubernetes并融合VPC、SLB等云资源。它提供强大的集群管理、无缝兼容Kubernetes API、弹性伸缩、安全隔离及监控日志功能。用户可通过控制台或kubectl轻松创建和部署应用,如Nginx。此外,ACK支持自动扩缩容、服务发现、负载均衡和持久化存储。多重安全保障和集成监控使其成为企业云原生环境的理想选择。
114 3
|
1天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第19天】 在现代微服务架构中,容器编排平台如Kubernetes已成为部署、管理和扩展应用程序的关键工具。随着其应用范围不断扩大,集群的稳定性和性能监控变得至关重要。本文将探讨针对Kubernetes集群的监控策略,并深入分析日志管理的实现方法。通过介绍先进的技术堆栈和实用工具,旨在为运维专家提供一套完整的解决方案,以确保集群运行的透明度和可靠性。
32 3
|
4天前
|
存储 Kubernetes 应用服务中间件
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
|
4天前
|
存储 Kubernetes Docker
k8s-配置与存储-配置管理
k8s-配置与存储-配置管理
|
6天前
|
存储 Kubernetes 数据安全/隐私保护
|
6天前
|
存储 SQL 关系型数据库
存储系统、数据库和对象存储 | 青训营
存储系统、数据库和对象存储 | 青训营
|
6天前
|
存储 Kubernetes 调度
K8S常见的持久化(存储)方案用法详解
K8S常见的持久化(存储)方案用法详解
|
6天前
|
存储 JSON 前端开发
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
26 0

相关产品

  • 容器服务Kubernetes版