企业级运维之云原生与Kubernetes实战课程 - 第二章第5讲 阿里云容器服务集群存储

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

企业级运维之云原生与Kubernetes实战课程

第二章第5讲 阿里云容器服务集群存储

 

 

视频地址: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) 集群支持两种存储插件:FlexvolumeCSI,二者的区别和特点如下:

 

a.  Flexvolume插件

 

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

 

  • Flexvolume:负责数据卷的挂载、卸载功能。ACK默认提供云盘、NASOSS三种存储卷的挂载能力;
  • Disk-Controller:负责云盘卷的自动创建能力;
  • Nas-Controller:负责NAS卷的自动创建能力;

 

b.  CSI插件

 

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

 

  • CSI-Plugin:实现数据卷的挂载、卸载功能。ACK默认提供云盘、NASOSS三种存储卷的挂载能力;
  • CSI-Provisioner:实现数据卷的自动创建能力,目前支持云盘、NAS两种存储卷创建能力。

 

使用推荐

 

  • 针对新建集群,推荐使用CSI插件。ACK会跟随社区持续更新CSI插件的各种能力。
  • 针对已经创建的集群,仍然使用已经安装的存储插件类型。ACK会持续支持Flexvolume插件。

 

存储有三种对象:PVPVCStorage class(存储类)

 

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

 

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

 

注意:

  • 如果使用存储类型的是云盘存储,则在创建应用时不能创建多副本,因为云盘不是共享存储,无法挂载到多个副本上;
  • 如果创建过程中出现报错,可以点击“事件”查看报错信息,如:Pending 0/4 nodes are avaliable:1 insuffcient cpu xxx的报错信息,根据报错进行分析处理。

 

4.  存储CSI概述

 

阿里云容器服务ACK的容器存储功能,基于Kubernetes存储系统,深度融合阿里云存储服务,并完全兼容Kubernetes原生的存储服务,例如EmptyDirHostPathSecretConfigMap等存储。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 "{volumeNamekubernetes.io/csi/diskplugin.csi.alibabacloud.com^d-2zejaz33icbp2vvc9le PodName nodeName}" failed. No retriespermitted until 2020-11-05143812.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警告。

 

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

 

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

 

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

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

sh kubelet.sh

 

9. 使用NAS时,提示chownoption not permitted

 

  • 问题原因:您的容器没有权限使用该NAS
  • 解决方法:使用root权限启动容器。

 

 

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
10月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
1135 2
|
10月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
857 115
|
10月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
1022 3
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
678 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
11月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
900 15
|
11月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
691 59
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
462 13

相关产品

  • 容器服务Kubernetes版