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,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
24天前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用合集之写入OSS是否要开通oss-hdfs服务
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
1月前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
4天前
|
机器学习/深度学习 Kubernetes 算法框架/工具
|
6天前
|
Kubernetes 前端开发 Serverless
Serverless 应用引擎产品使用合集之如何调用Kubernetes集群内服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6天前
|
存储 分布式计算 大数据
MaxCompute产品使用合集之是否支持创建OSS外部表为分区表,并访问OSS上以分区方式存储的数据
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7天前
|
存储 DataWorks 关系型数据库
DataWorks产品使用合集之在使用数据集成中的同步任务从mysql同步表到oss,存储为csv时,最终生成的文件中没有表头,这个属性可以在哪里配置么
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
17天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与维护最佳实践
【5月更文挑战第30天】 在现代云计算环境中,容器编排工具如Kubernetes已成为部署和管理微服务的关键。随着其日益广泛的应用,对集群进行有效的监控和维护显得尤为重要。本文将深入探讨Kubernetes集群监控的策略,并分享维护的最佳实践,以确保系统的稳定性和性能优化。我们将从监控工具的选择、关键指标的跟踪到故障排除流程等方面进行详细阐述,并提供实用的操作建议。
|
19天前
|
域名解析 Kubernetes 网络协议
【域名解析DNS专栏】云原生环境下的DNS服务:Kubernetes中的DNS解析
【5月更文挑战第29天】本文探讨了Kubernetes中的DNS解析机制,解释了DNS如何将服务名转换为网络地址,促进集群内服务通信。Kubernetes使用kube-dns或CoreDNS作为内置DNS服务器,每个Service自动分配Cluster IP和DNS条目。通过示例展示了创建Service和使用DNS访问的流程,并提出了优化DNS解析的策略,包括使用高性能DNS解析器、启用DNS缓存及监控日志,以实现更高效、可靠的DNS服务。
|
23天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护最佳实践
【5月更文挑战第25天】 在现代微服务架构中,容器编排平台如Kubernetes已成为不可或缺的组成部分。随着其广泛应用,对集群进行有效的监控和维护变得至关重要。本文将探讨针对Kubernetes集群监控的最佳工具选择、常见问题的诊断方法以及预防性维护措施。通过深入分析Prometheus和Grafana在性能监控中的应用,以及介绍如何使用ELK栈进行日志管理,文章旨在为运维专家提供一系列实用的策略和步骤,以确保集群的健康和优化性能。

热门文章

最新文章

相关产品

  • 容器服务Kubernetes版