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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
云服务器 ECS,u1 2核4GB 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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
122 1
|
4天前
|
Kubernetes 安全 测试技术
超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?
超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?
|
2月前
|
Kubernetes 安全 API
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
|
16天前
|
SQL Kubernetes 数据处理
实时计算 Flink版产品使用问题之在 flink-conf.yaml 中定义的配置在某些情况下未被正确应用到 K8s 上运行的任务管理器(JobManager)和任务管理节点(TaskManager),是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
存储 Kubernetes Docker
k8s-配置与存储-配置管理
k8s-配置与存储-配置管理
|
2月前
|
运维 Kubernetes Linux
Kubernetes详解(九)——资源配置清单创建Pod实战
Kubernetes详解(九)——资源配置清单创建Pod实战
83 2
|
2月前
|
JSON Kubernetes API
Kubernetes详解(八)——Kubernetes资源配置清单
Kubernetes详解(八)——Kubernetes资源配置清单
43 2
|
2月前
|
存储 Kubernetes 监控
【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解
【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解
|
2月前
|
存储 Kubernetes 应用服务中间件
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
245 0