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

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Python库 Django 的简介、安装、用法入门教程

《Python库Django的简介、安装、用法入门教程》Django是Python最流行的Web框架之一,它帮助开发者快速、高效地构建功能强大的Web应用程序,接下来我们将从简介、安装到用法详解,... 目录一、Django 简介 二、Django 的安装教程 1. 创建虚拟环境2. 安装Django三、创

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知