阿里云Kubernetes CSI实践 - 部署详解

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文以阿里云ACK环境为例介绍如何在Kubernetes系统中部署CSI插件;CSI部署拓扑:分为CSI Provisioner和CSI Plugin两部分:Provisioner:目前只支持云盘,提供云盘数据卷动态创建的功能;Plugin:云盘、NAS、OSS均需实现plugin;云盘...

本文以阿里云ACK环境为例介绍如何在Kubernetes系统中部署CSI插件;

CSI部署拓扑:

分为CSI Provisioner和CSI Plugin两部分:

Provisioner:目前只支持云盘,提供云盘数据卷动态创建的功能;

Plugin:云盘、NAS、OSS均需实现plugin;云盘实现了attach、mount的功能;NAS、OSS实现mount功能;

image

OSS Plugin是通过fuse驱动实现的文件系统挂载,在为了解决升级问题,通过systemd方案 说明

环境准备:

需要有Kubernetes集群,可以通过阿里云ACK服务快速创建:使用文档

阿里云CSI插件推荐使用Node Attach方式参考,需要在kubelet中配置下面参数:

--enable-controller-attach-detach=false

下载部署模板:

https://github.com/AliyunContainerService/csi-plugin/blob/master/deploy/all/csi-plugin.yaml
https://github.com/AliyunContainerService/csi-plugin/blob/master/deploy/all/csi-provisioner.yaml

插件组成:

1. 依赖部分:

RBAC:
参考模板:https://github.com/AliyunContainerService/csi-plugin/blob/master/deploy/rbac.yaml
这里我们使用阿里云ACK中默认提供的serviceaccount:admin,可以满足我们的需求;

CSIDriver:
定义插件执行Node Attach方式,不需要部署attacher;分别为NAS,OSS,EBS创建CSIDriver;

2. Plugin 插件:

默认提供云盘、NAS、OSS三种存储的插件,每个插件由plugin容器 和 driver-registrar容器组成;

模板:https://github.com/AliyunContainerService/csi-plugin/blob/master/deploy/all/csi-plugin.yaml

通过配置- operator: "Exists",逃过所有node taint,保证在所有节点都部署;

通过配置priorityClassName: system-node-critical,保证插件在所有节点优先部署;

      tolerations:
        - operator: "Exists"
      priorityClassName: system-node-critical

网络、Pid、securityContext都配置为高权模式,以便插件具有挂载权限;

      hostNetwork: true
      hostPID: true

csi-diskplugin,配置以下环境变量:

    # 通过配置AK环境,为plugin提供挂载ak权限;也可用通过STS方式配置;
    #   文档:https://help.aliyun.com/document_detail/86485.html
    # 配置MAX_VOLUMES_PERNODE,声明单个节点最多过载的云盘数量;ecs限制最大值为16,这里取值应该小于等于16;
    
            - name: ACCESS_KEY_ID
              value: ""
            - name: ACCESS_KEY_SECRET
              value: ""
            - name: MAX_VOLUMES_PERNODE
              value: "15"

3. Provisioner插件:

默认提供以下5个StorageClass:

alicloud-disk-available:会通过efficiency、ssd、common的顺序依次尝试创建云盘;
alicloud-disk-essd:创建essd类型云盘;
alicloud-disk-common:创建普通云盘;
alicloud-disk-ssd:创建ssd类型云盘;
alicloud-disk-efficiency:创建高效云盘;

通过配置- operator: "Exists",逃过所有node taint,保证在所有节点都部署;

通过配置priorityClassName: system-node-critical,保证插件在所有节点优先部署;

通过配置nodeSelector,限制Provisioner只在master上执行,对于managed K8S场景可以去掉这个限制;

      tolerations:
      - operator: "Exists"
      nodeSelector:
         node-role.kubernetes.io/master: ""
      priorityClassName: system-node-critical

部署插件:

下载部署模板:

https://github.com/AliyunContainerService/csi-plugin/blob/master/deploy/all/csi-plugin.yaml
https://github.com/AliyunContainerService/csi-plugin/blob/master/deploy/all/csi-provisioner.yaml

执行部署命令:

# kubectl create -f csi-plugin.yaml
# kubectl create -f csi-provisioner.yaml

查看服务:

# kubectl get pod -nkube-system | grep csi
csi-plugin-2csjm                                    6/6     Running   0          75s
csi-plugin-52cs7                                    6/6     Running   0          75s
csi-plugin-g7kwr                                    6/6     Running   0          75s
csi-plugin-lqv2p                                    6/6     Running   0          75s
csi-plugin-r5d82                                    6/6     Running   0          75s
csi-plugin-vgkzp                                    6/6     Running   0          75s
csi-provisioner-0                                   2/2     Running   0          65s

# kubectl get sc
NAME                       PROVISIONER                       AGE
alicloud-disk-available    diskplugin.csi.alibabacloud.com   2m8s
alicloud-disk-common       diskplugin.csi.alibabacloud.com   2m8s
alicloud-disk-efficiency   diskplugin.csi.alibabacloud.com   2m8s
alicloud-disk-essd         diskplugin.csi.alibabacloud.com   2m8s
alicloud-disk-ssd          diskplugin.csi.alibabacloud.com   2m8s

# kubectl get CSIDriver
NAME                              CREATED AT
diskplugin.csi.alibabacloud.com   2019-07-11T08:36:09Z
nasplugin.csi.alibabacloud.com    2019-07-11T08:36:09Z
ossplugin.csi.alibabacloud.com    2019-07-11T08:36:09Z

插件测试:

部署下面模板,通过指定storageclass为alicloud-disk-ssd创建一个ssd类型云盘;

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: disk-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 25Gi
  storageClassName: alicloud-disk-ssd
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-disk
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
        volumeMounts:
          - name: disk-pvc
            mountPath: "/data"
      volumes:
        - name: disk-pvc
          persistentVolumeClaim:
            claimName: disk-pvc

查看部署:

# kubectl get pvc
NAME       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
disk-pvc   Bound    pvc-008eee21-a3db-11e9-8dec-00163e0a6ecc   25Gi       RWO            alicloud-disk-ssd   14s

# kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS        REASON   AGE
pvc-008eee21-a3db-11e9-8dec-00163e0a6ecc   25Gi       RWO            Retain           Bound    default/disk-pvc   alicloud-disk-ssd            23s

# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
nginx-disk-6d5659d745-pdjjl   1/1     Running   0          33s

# 云盘已经挂载成功
# kubectl exec nginx-disk-6d5659d745-pdjjl ls data
lost+found

# kubectl exec nginx-disk-6d5659d745-pdjjl mount | grep /data
/dev/vdb on /data type ext4 (rw,relatime,data=ordered)

欢迎加入阿里云CSI钉钉开发群

项目地址:https://github.com/AliyunContainerService/csi-plugin

image

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
1月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
1月前
|
SQL 分布式计算 关系型数据库
阿里云E-MapReduce Trino专属集群外连引擎及权限控制踩坑实践
本文以云厂商售后技术支持的角度,从客户的需求出发,对于阿里云EMR-Trino集群的选型,外连多引擎的场景、Ldap以及Kerberos鉴权等问题进行了简要的实践和记录,模拟客户已有的业务场景,满足客户需求的同时对过程中的问题点进行解决、记录和分析,包括但不限于Mysql、ODPS、Hive connector的配置,Hive、Delta及Hudi等不同表格式读取的兼容,aws s3、阿里云 oss协议访问异常的解决等。
|
26天前
|
SQL 存储 API
阿里云实时计算Flink的产品化思考与实践【下】
本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。
110565 55
阿里云实时计算Flink的产品化思考与实践【下】
|
1月前
|
弹性计算 运维 安全
2024年阿里云一键搭建部署幻兽帕鲁服务器解决方案
幻兽帕鲁火了,为了确保畅快体验游戏,构建高效、稳定的游戏服务器至关重要。幸运的是,阿里云为您提供了快速、简便的服务器搭建解决方案,即使您对技术知识了解有限,也能在短短一分钟内轻松完成《幻兽帕鲁》游戏的联机服务器搭建!
1453 4
|
5天前
|
Java 应用服务中间件 Linux
在阿里云服务器上部署Tomcat详细图文详解
本文介绍了在阿里云服务器上安装和配置JDK和Tomcat的步骤。首先,需要注册阿里云账号并进行实名认证,然后购买并设置服务器。接着,通过File Zilla连接服务器,创建Java和Tomcat的安装目录,并将JDK和Tomcat的tar.gz文件上传到服务器,解压并重命名。之后,配置JDK的环境变量,将catalina.sh复制到/etc/init.d/目录下,并修改相关配置。最后,启动Tomcat并配置安全组规则,确保可以通过公网访问。
|
5天前
|
弹性计算 Java Linux
阿里云服务器搭建部署宝塔详细流程
该内容是一个阿里云服务器和域名的配置指南。首先,需注册阿里云账号并进行企业实名认证。接着,选购服务器如2核2G1兆的Linux系统,并购买域名。完成域名备案后,进行域名解析和ICP备案。然后,通过远程连接登录服务器,重置密码,安装宝塔面板。在安全组中开启宝塔面板随机生成的端口。最后,登录宝塔面板安装LNMP环境,配置数据库如MySQL和Redis,部署JDK、Tomcat,上传前端和后端项目以实现上线。
|
6天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
6天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
8天前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署项目流程
本文主要讲解阿里云服务器的部署,如何选择配置等
|
11天前
|
Java 应用服务中间件 Linux
阿里云服务器部署多个tomcat
阿里云服务器部署多个tomcat

相关产品

  • 容器服务Kubernetes版