阿里云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
目录
相关文章
|
17天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
59 2
|
27天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
2月前
|
专有云 Serverless 持续交付
亚太唯一,阿里云再度入选Gartner®容器管理魔力象限领导者
Gartner正式发布 2024《容器管理魔力象限》报告,阿里云再度成为中国唯一一家入选「领导者象限」的科技公司。
|
17天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
50 1
|
27天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
72 4
|
28天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
62 3
|
12天前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
31 0
|
2月前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
38 2
|
2月前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
89 2
|
2月前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
107 2

相关产品

  • 容器服务Kubernetes版