通过open-local实现Kubernetes本地盘PVC
概述
open-local是由阿里巴巴开源的一款针对Kubernetes设计的CSI(Container Storage Interface)插件,旨在提供对本地存储的支持。它允许用户在Kubernetes集群中使用节点上的本地磁盘作为持久卷(Persistent Volumes, PV),并通过持久卷声明(Persistent Volume Claims, PVC)来动态分配和管理这些资源。这为需要高性能存储的应用提供了可能,同时简化了本地存储的管理和维护。
项目地址
安装前准备
在开始安装之前,请确保Kubernetes集群满足以下条件:
- Kubernetes版本 >= 1.16
- 已启用RBAC(基于角色的访问控制)
- 节点上已经挂载了可用的本地磁盘,并且没有被其他服务占用
安装Helm
Helm是Kubernetes的包管理工具,用于简化应用部署。如果还没有安装Helm,可以通过以下命令进行安装:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 bash
安装Open-Local
下载并解压Open-Local代码
首先,需要下载Open-Local的发布版本。根据需求选择合适的版本,例如0.7.1
wget https://github.com/alibaba/open-local/releases/download/v0.7.1/open-local-0.7.1.tar.gz
tar -xzf open-local-0.7.1.tar.gz
cd open-local-0.7.1
使用Helm安装Open-Local
进入解压缩后的目录后,可以使用Helm来安装Open-Local
helm install open-local ./helm
注意:默认情况下,Open-Local只会安装在master节点上。如果希望在所有节点上安装,请调整Helm图表中的相关配置。
验证安装
安装完成后,可以检查Open-Local相关的Pod是否正常运行
kubectl get pods -n kube-system -l app=open-local
预期输出应类似于:
NAME READY STATUS RESTARTS AGE
open-local-agent-rw888 3/3 Running 0 27d
open-local-agent-vfzdz 3/3 Running 0 27d
open-local-agent-xtl72 3/3 Running 0 27d
open-local-controller-66bd46476f-rgxxx 6/6 Running 0 27d
open-local-init-job-97n5b 0/1 Completed 0 27d
open-local-init-job-kz4d8 0/1 Completed 0 27d
open-local-init-job-wmp4l 0/1 Completed 0 27d
open-local-scheduler-extender-64558d9c48-vjj7g 1/1 Running 0 27d
NodeLocalStorageClass (nlsc) 配置
Open-Local安装后会自动创建一个名为open-local
的NodeLocalStorageClass(nlsc)。这个资源定义了如何初始化和管理节点上的本地存储资源。可以查看当前的nlsc配置;
kubectl get nlsc
添加新的机型配置
当需要为集群添加新的节点类型时,应该相应地更新nlsc配置以包含新节点的信息。由于直接修改nlsc会导致覆盖现有配置,建议先备份现有的配置文件,然后在其基础上进行修改。
备份现有配置
kubectl get nlsc open-local -o yaml > nlsc-open-local.yaml.bak
修改配置
编辑nlsc-open-local.yaml
文件,追加新的节点配置。例如
apiVersion: csi.aliyun.com/v1alpha1
kind: NodeLocalStorageInitConfig
metadata:
name: open-local
spec:
nodesConfig:
- selector:
matchExpressions:
- key: device-type # 机型1
operator: In
values:
- "edcps.s2.normal"
listConfig:
vgs:
include:
- open-local-pool-[0-9]+
resourceToBeInited:
vgs:
- name: open-local-pool-0
devices:
- /dev/sdb
- /dev/sdc
- selector:
matchExpressions:
- key: device-type # 机型2
operator: In
values:
- "edcps.s2.normal-2"
listConfig:
vgs:
include:
- open-local-pool-[0-9]+
resourceToBeInited:
vgs:
- name: open-local-pool-0
devices:
- /dev/nvme0n1
应用更新后的配置
kubectl apply -f nlsc-open-local.yaml
Node打标
为了让Open-Local能够正确识别和初始化新加入的节点,需要为这些节点打上相应的标签。例如
K8s-node1打标
kubectl label nodes k8s-node1 device-type=edcps.s2.normal
K8s-node2打标
kubectl label nodes k8s-node2 device-type=edcps.s2.normal-2
日常维护与监控
监控健康状态
定期检查Open-Local组件的状态,确保它们都在正常运行。可以使用Kubernetes的内置命令或集成Prometheus等监控系统来获取更详细的指标。
日志分析
通过查看Open-Local的日志,可以帮助诊断问题并了解系统的运行情况。日志通常位于每个组件的Pod中,可以通过kubectl logs
命令来访问。
性能调优
根据应用的需求,可能需要调整Open-Local的配置参数以优化性能。例如,可以调整卷组的大小、选择不同的磁盘类型等。
扩展功能
Open-Local还支持一些高级功能,如快照、克隆等。如果应用场景需要这些特性,可以参考官方文档进一步探索。
最佳实践
- 规划磁盘布局:在部署之前,仔细规划好各个节点的磁盘布局,确保不会影响到其他服务。
- 保持版本同步:尽量保持Open-Local与Kubernetes版本的一致性,以便利用最新的特性和修复。
- 测试环境先行:任何重要的配置更改都应在测试环境中充分验证后再推广到生产环境。
- 文档化变更:记录所有的配置更改和操作,便于后续的审计和故障排查。