阿里云容器服务集群存储 | 学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习阿里云容器服务集群存储

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程:阿里云容器服务集群存储 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14651


阿里云容器服务集群存储

摘要:本讲主要内容为阿里云容器服务集群存储,包括 CSI 概述、存储卷特点、存储卷应用场景、集群存储常见问题。

 

目录

Ÿ CSI 概述

Ÿ 存储卷特点和应用场景

Ÿ 集群存储常见问题

 

一、CSI 概述

1. 阿里云容器服务集群存储概述

Ÿ CSI Controller 的主要功能,是提供存储服务视角对存储资源和存储卷进行管理和操作。在 Kubernetes 中被部署为单实例 Pod,使用 StatefulSet 控制器进行部署,设置副本数量为 1,保证为一种存储插件只运行一个控制器实例。

Ÿ 存储插件持续监测 PV 和物理存储介质之间的关系,根据集群 apiserver 中的请求,当发现 Pod 需要挂载 PVC 时,会指挥节点内的 kubelet 组件把物理存储介质挂载到宿主机对应容器的目录内。

image.png

2. 常见存储插件类型

目前阿里云容器服务 ACK (Alibaba Cloud Container Service for Kubernetes) 集群支持两种存储插件:Flexvolume和CSI,二者的区别和特点如下:

a. Flexvolume 插件

Flexvolume 插件是 Kubernetes 社区较早实现的存储卷扩展机制。ACK 从上线起, 即支持 Flexvolume 类型数据卷服务。Flexvolume 插件包括以下三部分:

Ÿ Flexvolume:负责数据卷的挂载、卸载功能。ACK 默认提供云盘、NAS、OSS 三种存储卷的挂载能力;

Ÿ Disk-Controller:负责云盘卷的自动创建能力;

Ÿ Nas-Controller:负责 NAS 卷的自动创建能力;

b. CSI 插件

CSI 插件是当前 Kubernetes 社区推荐的插件实现方案。ACK 集群提供的 CSI 存储插件兼容社区的 CSI 特性。CSI 插件包括以下两部分:

Ÿ CSI-Plugin:实现数据卷的挂载、卸载功能。ACK 默认提供云盘、NAS、OSS 三种存储卷的挂载能力;

Ÿ CSI-Provisioner:实现数据卷的自动创建能力,目前支持云盘、NAS 两种存储卷创建能力。

使用推荐

Ÿ 针对新建集群,推荐使用 CSI 插件。ACK 会跟随社区持续更新 CSI 插件的各种能力。

Ÿ 针对已经创建的集群,仍然使用已经安装的存储插件类型。ACK 会持续支持 Flexvolume 插件。

存储有三种对象:PV、PVC、Storage class (存储类)。

3. 如何为 Pod 挂载云盘或 OSS 存储呢?

登录阿里云平台,在容器服务集群中,依次创建存储类、存储卷、存储声明;然后创建无状态应用,在选择数据卷时进行存储挂载,依次点击“下一步”将应用创建成功。

注意:

Ÿ 如果使用存储类型的是云盘存储,则在创建应用时不能创建多副本,因为云盘不是共享存储,无法挂载到多个副本上;

Ÿ 如果创建过程中出现报错,可以点击“事件”查看报错信息,如:Pending 0/4 nodes are avaliable:1 insuffcient cpu xxx的报错信息,根据报错进行分析处理。

4. 存储 CSI 概述

阿里云容器服务 ACK 的容器存储功能,基于 Kubernetes 存储系统,深度融合阿里云存储服务,并完全兼容 Kubernetes 原生的存储服务,例如 EmptyDir、HostPath、Secret、ConfigMap 等存储。ACK 基于社区容器存储接口 ( CSI ),通过部署 CSI 插件实现了阿里云存储服务接入能力。

块存储和文件存储支持动态挂载到 Pod 上,而对象存储不支持动态存储,文件存储和对象存储是共享存储,支持多个 Pod 同时挂载,而块存储不支持该功能。

image.png

 

二、存储卷特点和应用场景

1. 阿里云云盘

Ÿ 特点:支持动态和静态存储卷,但非共享存储,每个云盘只能在单个节点上挂载。

Ÿ 应用场景:

ž 高 IO、低延时场景。云盘块存储设备适用于对 IO、延迟要求较高的应用场景,例如:数据库、中间件等服务;

ž 非共享场景云盘卷是独享模式,同时只能给一个 Pod 使用,在非共享数据业务场景可以考虑使用云盘卷。

2. 本地卷

Ÿ 特点:低延迟、高 IO,非高可用。

Ÿ 应用场景:

ž 本地临时文件存储如果您期望将非高可用数据保存在本地,可以通过 LVM 卷进行存储管理。

ž IO 要求高、自带高可用场景有些业务对 IO 要求很高,且应用自带高可用方案,例如:MySQL ;可以使用 LVM 卷。

ž 大数据分析场景 Spark 等类型的大数据分析场景,可以用 LVM 卷替代共享本地盘的方案。

 

三、CSI 常见问题

1. 使用云盘时,提示 The specified disk is not a portable disk

Ÿ 问题原因:申请了包年包月的云盘,或者在升级 ECS 时,把 ECS 关联的云盘一起升级为包年包月。

Ÿ 解决方法:将云盘的付费方式改为按量付费。

2. 在启动挂载云盘的 Pod 的时候,出现Pod无法启动的情况并报错had volume node affinity conflict

Ÿ 问题原因:PV 中编写了 nodeaffinity 属性,这个属性与 Pod 中声明的属性不一致,导致 Pod 无法被调度到正确的节点上。

Ÿ 解决方法:修改 PV 或者 Pod 的属性,使二者属性保持一致。

3. 在启动挂载云盘的 Pod 时,无法找到对应 diskid。

Ÿ 问题原因:在编写 PV 的时候输入了错误的 diskid 或者账号无权限操作 diskid,可能不是当前账号的 diskid。

Ÿ 解决方法:更换 diskid。

4. 创建 PV 失败,PVC Event 提示The specified AZone inventory is insufficient

Ÿ 问题原因: ECS 库存不足,导致创建云盘失败。

Ÿ 解决方法:更换云盘类型或者更换 Azone。

5. 动态创建 PV 失败, 提示disk size is not supported

Ÿ 问题原因:在 PVC 中指定的云盘大小不符合规范,要求最小 20 Gi。

Ÿ 解决方法:调整 PVC 中云盘的大小,使其符合规范。

6. 磁盘出现阻塞, kubelet 日志出现下以下大量报错。

Operation for "{volumeName:kubernetes.io/csi/diskplugin.csi.alibabacloud.com^d-2zejaz33icbp2vvc9le PodName: nodeName:}" failed. No retriespermitted until 2020-11-0514:38:12.653566679 +0800 CST m=+9150650.781033052 (durationBeforeRetry 2m2s). Error:"Mou\"d-2zejaz33icbp2vvvc9le\"(UniqueName:\"kubernetes.io/csi/diskplugin.csi.alibabacloud.com^d-2zejaz33icbp2vvvc9le\") Pod\"Pod-e5ee2d454cdb4d1d916d933495e56cbe-3584893\"(UID:\"f8d71e90-d934-4d5a-b54f-62555da5df22\"): rpc error: code= Aborted desc =NodeStageVolume: Previous attach action is still in processntVolume.MountDevice failed for volume

Ÿ 问题原因:使用的是旧版本的 CSI, 旧版本的 CSI 使用了 blkid 通过 uuid 获取盘符。由于使用快照恢复的云盘有着相同的 uuid,导致 blkid 命令卡死。

Ÿ 解决方法:重启当前节点,或升级 CSI 到最新版本。

7. 启动 Pod 时,出现 FailedMount 警告

Ÿ 问题原因:一般出现在新增的节点。由于 CSI 的 Pod 是和业务 Pod 一起启动, 且 CSI 注册需要一定时间,所以业务 Pod 开始挂载的时候, CSI 还没有注册完成,导致出现警告。

Ÿ 解决方法:无需处理,不影响 Pod 启动。

8. Pod 卸载失败,并且 Kubelet 出现不受 ACK 管理的 Pod 日志。

Ÿ 问题原因:Pod 异常退出,导致数据卷挂载点在卸载过程中没有清理干净,最终导致 Pod 无法删除。Kubelet 的 GC 流程对数据卷垃圾回收实现并不完善,目前需要手动或脚本自动化实现垃圾挂载点的清理工作。

Ÿ 解决方法:在问题节点运行以下脚本,对垃圾挂载点进行清理。

wget https://raw.githubusercontent.com/AliyunContainerService/kubernetes-issues-solution/master/kubelet/kubelet.sh

sh kubelet.sh

9. 使用 NAS 时,提示 chown:option not permitted

Ÿ 问题原因:您的容器没有权限使用该 NAS。

Ÿ 解决方法:使用 root 权限启动容器。

 

 

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
3天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
2天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
2天前
|
人工智能 运维 Kubernetes
拥抱智算时代:阿里云容器服务智能、托管、弹性新体验
本文总结了2024云栖大会容器计算专场的演讲内容,重点介绍了阿里云容器服务的新产品体验,包括智能、托管、弹性的特点,以及如何助力客户拥抱智算时代。文中还分享了多项实际案例和技术细节,展示了阿里云容器服务在提升用户体验和解决实际问题方面的努力。
|
4天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
122 77
|
12天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
6天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
32 3
|
12天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
43 7
|
12天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
23 5
|
12天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
34 4