自建K8S通过PVC配置NAS动态磁盘要点回顾

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: 在K8S上如何配置永久性PVC是大家在生产环境中比较关心的话题,那么如果通过阿里云的NAS来结合进行永久性磁盘的配置呢?本文通过其详细步骤和要点把成功配置的方法给大家做一个分享。本文不做理论性阐述,纯实战,有不严谨之处还望评论指正。


为什么选择NAS主要有三个原因,一是管理方便,可以像本地磁盘一样进行文件管理和程序读写,只需要在目标Pod上进行简单的映射,不需要再单独写开发接口;二是NAS可以当作永久性磁盘使用,不用担心因为K8S问题影响数据本身,而且可以支持多Node读写;三是便宜!便宜!便宜!,虽然NAS单盘最高容量可高达1P,但是是按量计费,存

储可以说是白菜价。


背景:

K8S中基础的PVC管理工具是Longhorn,但是其灵活性差,不仅K8S系统出现问题的时候数据很难恢复,而且日常管理和维护也不方便,StorageClass支持的云接口很多,但是目前对阿里云的还不支持,我们只能手动来进行配置。

image.png

一、环境要求

K8S:阿里云ECS自建Linux:Ubuntu22.04+Rancher 7.0+RKE2

NAS:通用性NFS分区

二、环境准备

1、通过ECS安装Ubuntu22.04空白系统,安装上相关的Node节点(没有其他特殊要求,这里不再赘述)

image.png

2、配置好K8S相应的VPC和交换机(如果是跨账号或跨VPC请配置相应的云企业网以保证后续与NAS互通),指定或自动获取内网IP

image.png

3、根据自己需求选择NAS类型(一般选择通用型),然后进行配置专有网络:

image.png

在新建NAS的适合选择PVC或在建立后进行配置,效果都是一样的:

image.png

4、安装好NAS后获取其挂载点(格式为:98***0c-m***1.cn-zhangjiakou.nas.aliyuncs.com)保存,这个很重要。

image.png

image.png

至此,我们需要的K8S和NAS基本条件已经准备好,下面我们进行连通的操作和配置。


三、连通前的准备之K8S配置

1、在Node节点上安装NAS驱动工具(以ubuntu为例)

sudo apt-get install nfs-common -y

2、在K8S上进行配置

阿里云的NAS对于PVC的挂载分为静态存储卷和动态存储卷,动态存储卷又分为subpath和filesystem方式,我们这里选择动态存储卷subpath方式(格式为:98***0c-m***1.cn-zhangjiakou.nas.aliyuncs.com:/default-pvcname-GUID),关于其区别大家请自行浏览阿里官方文章,好了下面我们进行实操,大家务必按照我的步骤来操作:

a.创建用于部署NAS-Controller的YAML文件并另外为nas-controller.yaml并在K8S中执行

apiVersion: v1
kind: ServiceAccount
metadata:
  name: alicloud-nas-controller
  namespace: kube-system
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: alicloud-nas-controller
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "watch", "list", "delete", "update", "create"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: alicloud-nas-controller
subjects:
  - kind: ServiceAccount
    name: alicloud-nas-controller
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: alicloud-nas-controller
  apiGroup: rbac.authorization.k8s.io
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: alicloud-nas-controller
  namespace: kube-system
spec:
  selector:
    matchLabels:
      app: alicloud-nas-controller
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: alicloud-nas-controller
    spec:
      tolerations:
      - operator: Exists
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: node-role.kubernetes.io/master
                operator: Exists
          requiredDuringSchedulingIgnoredDuringExecution:
             nodeSelectorTerms:
             - matchExpressions:
               - key: type
                 operator: NotIn
                 values:
                 - virtual-kubelet
      priorityClassName: system-node-critical
      serviceAccount: alicloud-nas-controller
      hostNetwork: true
      containers:
        - name: nfs-provisioner
          image: registry.cn-hangzhou.aliyuncs.com/acs/alicloud-nas-controller:v1.14.8.17-7b898e5-aliyun
          env:
          - name: PROVISIONER_NAME
            value: alicloud/nas
          securityContext:
            privileged: true
          volumeMounts:
          - mountPath: /var/log
            name: log
      volumes:
      - hostPath:
          path: /var/log
        name: log

b.以下代码创建StorageClass并另存为sc-nas.yaml后加载执行。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alicloud-nas-51Aspx
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
  volumeAs: subpath
  server: "98***0c-m***1.cn-zhangjiakou.nas.aliyuncs.com"#在一(4)中获取的NAS路径
provisioner: alicloud/nas
reclaimPolicy: Retain

以上代码创建了名为alicloud-nas-51aspx的StorageClass,可以通过手动或执行脚本PVC的时候选择:

image.png

脚本方式创建(可选)

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: alicloud-nas-51aspx
  resources:
    requests:
      storage: 20Gi

如果配置成功在NAS中可以看到K8SNode客户端的连接IP,如下图:

image.png

至此阿里云的NAS已经加载操作已经完成,后续大家可以根据自己的需要在pod中进行PVC的映射和数据处理。


另外大家很关心的是如果管理NAS中的数据,这个可以在阿里云控制台中直接把NAS附加到ECS上进行控制和管理,如下图:

image.png

通过SSH工具连接这台ECS就可以进行文件管理和维护了

image.png

注意事项总结:通过NAS来实现K8S的永久性磁盘是一个非常实用的方案,配置上要注意操作顺序和其中一些参数的变更,另外创建PVC的时候尽量选择ManyNodesRead-Write方式,因为会有多节点进行PVC操作的情况比较多,否则在pod或container映射磁盘的时候出现错误。另外磁盘映射的时候通过SSH工具或者命令查看NAS中完整的文件路径有助于准确的进行映射,关于NAS和K8S的绑定方式以及高级应用还有其他很多种,大家自行查阅资料吧。


参考阿里云官方文章:

https://www.alibabacloud.com/help/zh/nas/latest/use-the-csi-storage-plug-in-to-mount-a-nas-instance-mount-a-dynamically-provisioned-nas-volume#task-2342476

https://help.aliyun.com/document_detail/151416.html

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
kde
|
4月前
|
Kubernetes 关系型数据库 文件存储
手把手教你完成极空间 NAS Docker 镜像加速配置
本教程详细介绍了如何在极空间NAS上配置轩辕镜像加速器,以提升Docker镜像的下载速度与稳定性。内容涵盖账号注册、网络确认、加速器设置及验证方法,并提供常见问题解决方案,帮助用户高效完成容器化应用部署。
kde
1658 1
kde
|
4月前
|
文件存储 数据安全/隐私保护 开发者
群晖NAS Docker镜像源加速配置教程
本教程介绍了群晖NAS用户如何通过配置轩辕镜像加速服务提升Docker镜像拉取速度。内容包括配置前准备、详细设置步骤及日常使用说明,帮助用户快速完成配置并享受高效稳定的镜像下载体验。
kde
3083 59
|
Kubernetes 安全 测试技术
超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?
超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?
|
运维 Serverless 文件存储
函数计算产品使用问题之在利用Docker镜像部署应用时,容器内的应用如何能访问函数计算配置的NAS挂载
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
226 0
|
存储 数据可视化 Serverless
函数计算产品使用问题之NAS该如何配置
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
319 0
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之如何配置NAS文件系统
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
运维 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之如何配置NAS
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
JSON Kubernetes 监控
阿里云容器服务 ACK 产品技术动态(202310)
容器服务 Kubernetes 版 ACK Feature:ACK 支持服务网格场景 Sidecar 加速 ACK 支持服务网格场景 Sidecar 加速,即服务网格 Sidecar 模式下,业务注入 Sidecar 之后,可通过开启 Sidecar Acceleration using eBPF 组件来实现同节点下 Sidecar 和 Sidecar 之间、同 Pod 下业务容器和 Sidecar之间的 TCP 网络通信加速。
428 1
阿里云容器服务 ACK 产品技术动态(202309)
阿里云容器服务 ACK 产品技术动态(202309)
|
人工智能 Kubernetes Cloud Native
阿里云容器服务 ACK 产品技术动态(202309)
简介: 容器服务 Kubernetes 版 ACK Feature:备份中心备份计划功能优化:控制台支持备份任务模糊搜索、根据创建时间排序及通过克隆快速生成立即备份和备份计划。
797 1

推荐镜像

更多