Kubernetes从0到1-第二篇 安装NFS Provisioner存储置备程序

2024-05-31 07:38

本文主要是介绍Kubernetes从0到1-第二篇 安装NFS Provisioner存储置备程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 架构
    • 准备工作
      • kubectl自动补全
      • 安装helm
    • 部署NFS服务器
    • 使用helm部署NFS Subdir External Provisioner
    • 测试
      • 自定义存储类
      • 创建一个tomcat应用进行测试

想必大家对PV、PVC的概念都不会陌生,它们的好处也应该了解,对静态卷配置、动态卷配置也应该有了解,所以这里不再做讲解。熟悉ACK的都知道,ACK集群有flexvolume、CSI存储置备程序,现在我们基于NFS服务器搭建一套自己的存储置备程序。

架构

NFS subdir external provisioner 可动态为kubernetes提供pv卷,是Kubernetes的简易NFS的外部provisioner,本身不提供NFS,需要现有的NFS服务器提供存储。持久卷目录的命名规则为: n a m e s p a c e − {namespace}- namespace{pvcName}-${pvName}。
在这里插入图片描述

准备工作

kubectl自动补全

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

安装helm

wget https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz
tar -zxvf helm-v3.3.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version

命令补全

vim ~/.bashrc
source <(helm completion bash)source ~/.bashrc

部署NFS服务器

yum -y install nfs-utils rpcbindmkdir -p /nfs-data
chmod -R 777 /nfs-datacat >> /etc/exports << EOF
/nfs-data *(rw,no_root_squash,sync)
EOFexportfs -arv
exportfs -s# 启动,注意:先启动rpc服务,再启动nfs服务systemctl start rpcbind
systemctl enable rpcbindsystemctl start nfs-server
systemctl enable nfs-server

kubernetes集群所有节点安装nfs客户端

yum -y install nfs-utils

使用helm部署NFS Subdir External Provisioner

为了操作方便,我直接在master上操作。

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/helm repo updatehelm search repo nfs-subdir-external-provisioner
NAME                                                    CHART VERSION   APP VERSION     DESCRIPTION
nfs-subdir-external-provisioner/nfs-subdir-exte...      4.0.13          4.0.2           nfs-subdir-external-provisioner is an automatic...helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.13tar -xvf nfs-subdir-external-provisioner-4.0.13.tgzcd nfs-subdir-external-provisioner/

修改values.yaml

...
replicaCount: 2 # 修改副本数image:repository: willdockerhub/nfs-subdir-external-provisioner # 修改镜像仓库tag: v4.0.2nfs:server: 192.168.238.145  # nfs服务器地址path: /nfs-data  # 路径storageClass:defaultClass: true  # 开启默认存储类
...

开始安装,将其安装至kube-system命名空间下

helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -f /root/nfs-subdir-external-provisioner/values.yaml

查看安装

kubectl get pods -n kube-system
NAME                                               READY   STATUS    RESTARTS   AGE
...
nfs-subdir-external-provisioner-677789d968-lsvp5   1/1     Running   0          21s
nfs-subdir-external-provisioner-677789d968-xvgs8   1/1     Running   0          21s

查看是否创建了默认存储类

kubectl get sc
NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   64s

测试

自定义存储类

创建yaml文件

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storage
provisioner: cluster.local/nfs-subdir-external-provisioner  # 可以是其他名字,但是必须是deployment环境变量 PROVISIONER_NAME 的值
parameters:archiveOnDelete: "true"  # false表示不存档,即删除数据,true表示存档,即重命名路径
allowVolumeExpansion: true  # 是否允许pvc扩容

查看创建的storageClass

kubectl get sc
NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage    cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   4s
nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   39m

创建一个tomcat应用进行测试

helm repo add bitnami https://charts.bitnami.com/bitnamihelm repo updatehelm install tomcat bitnami/tomcat \--namespace=test01 \--create-namespace \--set global.storageClass=managed-nfs-storage \  # 此处使用自定义的storageClass,也可用使用默认的--set replicaCount=2 \--set service.type=NodePort \--set service.nodePort=30089
  1. 查看是否自动创建pv
kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM           STORAGECLASS          REASON   AGE
pvc-6300d49b-f3f1-4874-ad77-f174c0acf48f   8Gi        RWO            Delete           Bound    test01/tomcat   managed-nfs-storage            27s
  1. 查看应用是否创建pvc
kubectl get pvc -n test01
NAME     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
tomcat   Bound    pvc-6300d49b-f3f1-4874-ad77-f174c0acf48f   8Gi        RWO            managed-nfs-storage   40s
  1. 查看pod状态
kubectl get pods -n test01 -o wide
NAME                      READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
tomcat-697685bcd9-mzdqn   1/1     Running   0          4m37s   10.244.1.6   k8s-n01   <none>           <none>
tomcat-697685bcd9-z9cmt   1/1     Running   0          4m37s   10.244.2.7   k8s-n02   <none>           <none>
  1. 查看service
kubectl get svc -n test01
NAME     TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
tomcat   NodePort   10.1.161.183   <none>        80:30089/TCP   5m33s
  1. 访问tomcat

http://192.168.238.147:30089/

如下图:
在这里插入图片描述

  1. 到nfs服务器上验证文件是否存储归档
tree /nfs-data/ -L 3
/nfs-data/
├── archived-test01-tomcat-pvc-f9bca252-1150-4cd9-bb9b-c29f8c6b2042
└── test01-tomcat-pvc-6300d49b-f3f1-4874-ad77-f174c0acf48f└── webapps├── docs├── examples├── host-manager├── manager└── ROOT8 directories, 0 files

参考文档:
[1]: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

这篇关于Kubernetes从0到1-第二篇 安装NFS Provisioner存储置备程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017576

相关文章

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs