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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: Kubernetes 作为一个可以自动部署、扩展和管理容器化应用程序的开源系统,深受开发者喜爱,那么在 Kubernetes 系统中应该如何来部署 CSI 插件呢?本文将以阿里云 ACK 环境为例,为大家详细介绍如何在 Kubernetes 系统中部署 CSI 插件。

作者:阚俊宝

一、CSI部署拓扑

共分为 CSI Provisioner 和 CSI Plugin 两部分:

Provisioner:目前只支持云盘,提供云盘数据卷动态创建的功能;
Plugin:云盘、NAS、OSS均需实现plugin;云盘实现了attach、mount的功能;NAS、OSS实现mount功能;

1.png

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 为 licloud-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)

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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
Kubernetes 网络协议 应用服务中间件
K8S二进制部署实践-1.15.5
K8S二进制部署实践-1.15.5
34 0
|
27天前
|
SQL 存储 API
阿里云实时计算Flink的产品化思考与实践【下】
本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。
110664 81
阿里云实时计算Flink的产品化思考与实践【下】
|
27天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
34 7
|
2天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
14 4
|
6天前
|
Java 应用服务中间件 Linux
在阿里云服务器上部署Tomcat详细图文详解
本文介绍了在阿里云服务器上安装和配置JDK和Tomcat的步骤。首先,需要注册阿里云账号并进行实名认证,然后购买并设置服务器。接着,通过File Zilla连接服务器,创建Java和Tomcat的安装目录,并将JDK和Tomcat的tar.gz文件上传到服务器,解压并重命名。之后,配置JDK的环境变量,将catalina.sh复制到/etc/init.d/目录下,并修改相关配置。最后,启动Tomcat并配置安全组规则,确保可以通过公网访问。
|
6天前
|
弹性计算 Java Linux
阿里云服务器搭建部署宝塔详细流程
该内容是一个阿里云服务器和域名的配置指南。首先,需注册阿里云账号并进行企业实名认证。接着,选购服务器如2核2G1兆的Linux系统,并购买域名。完成域名备案后,进行域名解析和ICP备案。然后,通过远程连接登录服务器,重置密码,安装宝塔面板。在安全组中开启宝塔面板随机生成的端口。最后,登录宝塔面板安装LNMP环境,配置数据库如MySQL和Redis,部署JDK、Tomcat,上传前端和后端项目以实现上线。
|
7天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
7天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
8天前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署项目流程
本文主要讲解阿里云服务器的部署,如何选择配置等
|
11天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
15 4

推荐镜像

更多