Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

news2024/12/23 8:30:10

Kubernetes安装NFS动态供给存储类并安装KubeSphere

  • KubeSphere介绍
  • 环境准备
    • KubeSphere
    • NFS动态供给
  • 安装NFS动态供给
    • 搭建NFS
    • 下载动态供给驱动
    • 修改驱动文件
    • 安装动态供给
  • 安装KubeSphere
    • 下载KubeSphere的yaml资源清单文件
    • 安装KubeSphere
  • 使用KubeSphere部署应用
    • 创建项目
    • 部署MySQL

KubeSphere介绍

它是一款全栈的 Kubernetes 容器云 PaaS 解决方案(来源于官网),而我觉得它是一款强大的Kubernetes图形界面,它继承了如下组件 (下面这段内容来自官网):

  • Kubernetes DevOps 系统
    • 基于 Jenkins 为引擎打造的 CI/CD,内置 Source-to-Image 和 Binary-to-Image 自动化打包部署工具
  • 基于 Istio 的微服务治理
    • 提供细粒度的流量管理、流量监控、灰度发布、分布式追踪,支持可视化的流量拓扑
  • 丰富的云原生可观测性
    • 提供多维度与多租户的监控、日志、事件、审计搜索,支持多种告警策略与通知渠道,支持日志转发
  • 云原生应用商店
    • 提供基于 Helm 的应用商店与应用仓库,内置多个应用模板,支持应用生命周期管理
  • Kubernetes 多集群管理
    • 跨多云与多集群统一分发应用,提供集群高可用与灾备的最佳实践,支持跨级群的可观测性
  • Kubernetes 边缘节点管理
    • 基于 KubeEdge 实现应用与工作负载在云端与边缘节点的统一分发与管理,解决在海量边、端设备上完成应用交付、运维、管控的需求

当然他的功能远不止这些,欢迎各位来到KubeSphere的官网了解更多内容:https://www.kubesphere.io/zh/

环境准备

KubeSphere

(摘自官网)

  • 您的 Kubernetes 版本必须为:v1.20.x、v1.21.x、* v1.22.x、* v1.23.x、* v1.24.x、* v1.25.x 和 * v1.26.x。带星号的版本可能出现边缘节点部分功能不可用的情况。因此,如需使用边缘节点,推荐安装 v1.21.x。
  • 确保您的机器满足最低硬件要求:CPU > 1 核,内存 > 2 GB。
  • 在安装之前,需要配置 Kubernetes 集群中的默认存储类型(这篇文章会介绍安装)。

我已经准备好了一个Kubernetes集群,如图:
在这里插入图片描述

符合KubeSphere的支持边缘节点的最高版本要求,但建议你版本号不要超过 v1.26.x

NFS动态供给

首先你需要准备一台NFS服务器,为了方便,我这次就以我的主服务器 k8s-master 来担任这个NFS服务器了。

安装NFS动态供给

搭建NFS

首先我们需要在NFS服务器(我的NFS服务器和master是同一台)和所有k8s节点当中安装 nfs-utils 软件包(master和node都需要安装),可执行下面这行命令:

yum install -y nfs-utils

安装如图:
在这里插入图片描述

然后确定一个nfs共享的目录,这次我就使用 /data/nfs/dynamic-provisioner 这个目录作为nfs的共享目录了。所以我们来执行下面命令创建并共享这个目录:

# 创建这个目录
mkdir -p /data/nfs/dynamic-provisioner
# 执行这行命令将这个目录写到写到 /etc/exports 文件当中去,这样NFS会对局域网暴露这个目录
cat >> /etc/exports << EOF
/data/nfs/dynamic-provisioner *(rw,sync,no_root_squash)
EOF
# 启动NFS服务
systemctl enable --now nfs-server

执行后如图:
在这里插入图片描述

检查是否暴露成功:

showmount -e {nfs服务器地址}

可以看到是暴露成功的:
在这里插入图片描述

下载动态供给驱动

因为Kubernetes自己不自带NFS动态供给的驱动,所以我们需要下载第三方的NFS动态供给驱动。Kubernetes官方推荐了两个第三方的驱动可供选择,如图:
在这里插入图片描述

个人觉得这个 NFS subdir 驱动比较好用,这次就用这个驱动来搭建动态供给了。我们可以来到它的官网:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner,并找到最新的release:
在这里插入图片描述

目前最新的发行版是 4.0.18 我们就下载这个版本:
在这里插入图片描述

也可直接通过命令下载:

wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/archive/refs/tags/nfs-subdir-external-provisioner-4.0.18.tar.gz

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

我们直接解压它:

tar -zxvf nfs-subdir-external-provisioner-4.0.18.tar.gz

解压之后会获得一个特别长的文件夹:
在这里插入图片描述

修改驱动文件

我们来到这个文件夹下的deploy目录:

cd nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-4.0.18/deploy/

可以看到这里面有一些yaml,我们需要修改一部分:
在这里插入图片描述

首先我们需要修改的就是 deployment.yaml ,我们直接用vim修改:

vim deployment.yaml

首先就是这个镜像是在谷歌的k8s官方镜像仓库拉取的,国内拉取不到,所以我们要修改一下:
在这里插入图片描述

我已经通过一些方法将它拉取下来并且上传到了国内的阿里云镜像仓库,我们可以直接用下面这个镜像来替换:

# 这个镜像是在谷歌上的,国内拉取不到
# image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
# 使用这个我先在谷歌上拉取下来再上传到阿里云上的镜像
image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nfs-subdir-external-provisioner:v4.0.2

修改后如图:
在这里插入图片描述

然后我们还需要修改一下下面的nfs服务器地址和nfs服务器内共享的目录:
在这里插入图片描述

我的nfs服务器地址为 172.18.0.2 ,且按照上面的安装步骤,我nfs服务器暴露的共享目录为 /data/nfs/dynamic-provisioner ,所以我修改文件为(你的有可能和我不一样,根据自己设置的共享目录和nfs服务器地址修改此文件):
在这里插入图片描述

执行下面这一段脚本我们可以看到还是有很多资源是存放在默认命名空间下:

yamls=$(grep -rl 'namespace: default' ./)
for yaml in ${yamls}; do
  echo ${yaml}
  cat ${yaml} | grep 'namespace: default'
done

执行结果:
在这里插入图片描述

我们可以新创建一个命名空间专门装这个驱动,也方便以后管理,所以我决定创建一个名为 nfs-provisioner 命名空间,为了方便就不用yaml文件了,直接通过命令创建:

kubectl create namespace nfs-provisioner

执行后可以看到这个命名空间创建成功:
在这里插入图片描述

涉及命名空间这个配置的文件还挺多的,所以我们干脆通过一行脚本更改所有:

sed -i 's/namespace: default/namespace: nfs-provisioner/g' `grep -rl 'namespace: default' ./`

这行批量替换脚本直接将所有文件的命名空间都改过来了:
在这里插入图片描述

安装动态供给

之前我们已经修改好了所有的yaml资源清单文件,接下来我们直接执行安装。安装也是非常简单,直接通过下面一行命令就可以安装完成:

kubectl apply -k .

执行结果如图:
在这里插入图片描述

可以执行下面这个行命令查看是否部署完成:

kubectl get all -o wide -n nfs-provisioner

看到READY为 1/1 并且STATUS状态为 Running 那么动态供给就已经部署完毕:
在这里插入图片描述

可以执行下面命令查询安装的动态供应存储类的名字:

kubectl get storageclass

可以看到动态供应类的名字为 nfs-client
在这里插入图片描述

nfs动态供应就已经安装完毕了

如果你只打算安装动态供给的存储类,那么到这里就结束了哦,接下来是KubeSphere相关的内容

安装KubeSphere

下载KubeSphere的yaml资源清单文件

此次安装的是最新的 v3.4.0 的 KubeSphere,可以通过以下命令下载资源清单文件(共两个):

wget \
https://github.com/kubesphere/ks-installer/releases/download/v3.4.0/kubesphere-installer.yaml \
https://github.com/kubesphere/ks-installer/releases/download/v3.4.0/cluster-configuration.yaml

可以看到一共下载了两个文件:
在这里插入图片描述

其中这两个文件的作用:

  • kubesphere-installer.yaml: KubeSphere的安装器
  • cluster-configuration.yaml: KubeSphere的集群配置文件

我们需要修改一下 cluster-configuration.yaml 文件,还记得我们之前的那个存储类吗?我们记住这个名字:
在这里插入图片描述

然后我们开始修改这个文件:

vim cluster-configuration.yaml

可以看到后面注释的说明,所以我们将 nfs-client 这个存储类的名字写在后面:
在这里插入图片描述

安装KubeSphere

然后我们先创建 kubesphere-installer.yaml 里面的资源:

kubectl apply -f kubesphere-installer.yaml

可以看到创建了一些资源:
在这里插入图片描述

然后我们检查这个资源是否创建成功:

kubectl get pod -o wide -n kubesphere-system

同样当READY为 1/1 并且STATUS状态为 Running 的时候这个文件就执行完毕了:
在这里插入图片描述

接下来我们来执行 cluster-configuration.yaml 文件:

kubectl apply -f cluster-configuration.yaml

它虽然只有一个资源,但是里面还是要做很多事的:
在这里插入图片描述

执行下面命令检查KubeSphere的执行日志:

kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

一段时间之后看到这个就是安装成功了:
在这里插入图片描述

因为我使用的是云服务器,所以我使用任何一个云服务器的公网IP地址+端口就能访问KubeSphere了,默认的用户名/密码是 admin/P@88w0rd
在这里插入图片描述

初次登陆需要修改admin用户的密码:
在这里插入图片描述

随后即可以登录到KubeSphere的首页了:
在这里插入图片描述

同时我们来到NFS服务器共享的目录,可以看到KubeSphere的持久化数据存储在这:
在这里插入图片描述

使用KubeSphere部署应用

创建项目

因为KubeSphere的管理是基于项目的,所以我们先要创建一个项目,先点击企业空间:
在这里插入图片描述

选择这个默认企业(一般是新建一个企业,这里就简化了):
在这里插入图片描述

然后点击项目->创建:
在这里插入图片描述

创建一个测试项目:
在这里插入图片描述

创建一个项目其实就是创建了一个命名空间:
在这里插入图片描述

部署MySQL

现在我们开始部署MySQL了,点击这个刚创建的项目:
在这里插入图片描述

然后依次点击 工作负载->有状态副本集->创建
在这里插入图片描述

填写部署一个测试的数据库然后点击下一步:
在这里插入图片描述

点击添加容器:
在这里插入图片描述

搜索指定的镜像并填写要创建的容器名字:
在这里插入图片描述

网下面拉可以设置CPU和内存限制还有需要使用的端口:
在这里插入图片描述

然后我们往下拉勾选环境变量,然后点击创建保密字典:
在这里插入图片描述

我们来设置mysql的密码,这个名字可以随便写,但是自己要记住:
在这里插入图片描述

类型选择默认后点击添加数据:
在这里插入图片描述

在这里设置mysql的root用户密码:
在这里插入图片描述

然后点击创建:
在这里插入图片描述

最后创建的Secret会自动填充,但是注意MySQL设置root用户密码的环境变量名不能自定义,是由Docker规定死的 MYSQL_ROOT_PASSWORD
在这里插入图片描述

点击勾选同步主机时区:
在这里插入图片描述

点击下面的对勾✅:
在这里插入图片描述

最后点击下一步:
在这里插入图片描述

到了下一步点击添加持久卷声明模版:
在这里插入图片描述

然后按照提示输入内容:
在这里插入图片描述

最后点击下一步:
在这里插入图片描述

点击创建:
在这里插入图片描述

点击部署的这个mysql进来:
在这里插入图片描述

可以看到容器状态并且可以快速伸缩容器:
在这里插入图片描述

当这个变绿了就代表创建好了:
在这里插入图片描述

然后点击容器右边的向下的小箭头,最后点击终端:
在这里插入图片描述

最后在终端中即可运行mysql相关的命令了:
在这里插入图片描述

这篇文章就先写到这里,更多的KubeSphere操作,可以登录KubeSphere的官网了解,关注我,我以后一会写更多相关知识的哦!
KubeSphere官网:https://www.kubesphere.io/zh/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 13 - Media框架(9)- NuPlayer::Decoder

这一节我们将了解 NuPlayer::Decoder&#xff0c;学习如何将 MediaCodec wrap 成一个强大的 Decoder。这一节会提前讲到 MediaCodec 相关的内容&#xff0c;如果看不大懂可以先跳过此篇。原先觉得 Decoder 部分简单&#xff0c;越读越发现自己的无知&#xff0c;Android 源码真…

nginx-缓存

disk cache&#xff1a;磁盘缓存数据&#xff0c;有时间延迟&#xff0c;但是非常小&#xff0c;相对于直接请求服务器返回 对于用户来说基本无感知。 memory cache&#xff1a;磁盘缓存数据&#xff0c;基本上没有时间延迟 协商缓存&#xff08;nginx自带功能&#xff0c; 不…

机器人中的数值优化(五)——信赖域方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

18.kthread_worker:内核线程异步传输

目录 kthread_worker 驱动传输数据的方式 同步传输 异步传输 头文件 kthread_worker结构体 kthread_work结构体 kthread_flush_work结构体 init_kthread_worker()函数 为kthread_worker创建内核线程 init_kthread_work()函数 启动工作 刷新工作队列 停止内核线程…

3D点云测量:计算三个平面的交点

文章目录 0. 测试效果1. 基本内容文章目录:3D视觉测量目录微信:dhlddxB站: Non-Stop_0. 测试效果 1. 基本内容 计算三个平面的交点需要找到满足所有三个平面方程的点。三个平面通常由它们的法向量和通过它们的点(或参数形式的方程)来定义。以下是计算三个平面的交点的一般步…

在VScode中使用sftp传输本地文件到服务器端

安装SFTP 在VScode的扩展中安装sftp 注意这里需要在你没连接服务器的状态下安装&#xff0c;即本机需要有sftp 配置传输端口 安装成功后&#xff0c;使用快捷键"ctrlshiftp",输入sftp&#xff0c;选择Config 根据自己的实际情况修改配置文件&#xff0c;主要改h…

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式&#xff08;Decorator Pattern&#xff09; 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你在不修改现有对象的情况下&#xff0c;动态地将新功能附加到对象上。这种模式通过创建一个包装类&#xff0c;…

排序之交换排序

文章目录 前言一、冒泡排序1、冒泡排序基本思想2、冒泡排序的效率 二、快速排序 -- hoare版本1、快速排序基本思想2、快速排序代码实现3、为什么最左边值做key时&#xff0c;右边先走 三、快速排序 -- 挖坑法1、快速排序 -- 挖坑法基本思想2、快速排序 -- 挖坑法代码实现3、为什…

stable diffusion实践操作-随机种子seed

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么&#xff1f;二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改 三、差异随机种子1. webUI位置2. 什么是差异随机种子3.使用差异…

找redis大key工具rdb_bigkeys

github官网 https://github.com/weiyanwei412/rdb_bigkeys 在centos下安装go [roothadoop102 rdb_bigkeys-master]# wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz [roothadoop102 rdb_bigkeys-master]# tar -zxf go1.13.5.linux-amd64.tar.gz -C /usr/local将g…

安装bpftrace和bcc的踩坑记录

最后在Ubuntu22.04使用Ubuntu提供的安装命令完成了安装。这里是记录尝试在Ubuntu18.04和Ubuntu22.04使用源码安装未果的过程。 文章目录 22版本安装bcc准备工具安装命令使用报错&#xff1a;iovisor封装的安装方式ubuntu的安装方式 For Bionic (18.04 LTS)官方提供的源码安装准…

SpringCloudGateway集成SpringDoc

SpringCloudGateway集成SpringDoc 最近在搞Spring版本升级&#xff0c;按客户要求升级Spring版本&#xff0c;原来用着SpringBoot 2.2.X版本&#xff0c;只需要升级SpringBoot 2.X最新版本也就可以满足客户Spring版本安全要求&#xff0c;可是好像最新的SpringBoot 2.X貌似也不…

Laravel chunk和chunkById的坑

在编写定时任务脚本的时候&#xff0c;经常会用到chunk和chunkById的API。 一、前言 数据库引擎为innodb。 表结构简述&#xff0c;只列出了本文用到的字段。 字段类型注释idint(11)IDtypeint(11)类型mark_timeint(10)标注时间&#xff08;时间戳&#xff09; 索引&#x…

手撕 视觉slam14讲 ch13 代码(1)工程框架与代码结构

在学习slam一年之后开始&#xff0c;开始自己理思路&#xff0c;全手敲完成ch13的整个代码 我们按照自己写系统的思路进行&#xff0c;首先确定好SLAM整体系统的流程&#xff0c;见下图&#xff0c;输入为双目图像&#xff0c;之后进入前端位姿估计和后端优化&#xff0c;中间…

滑动窗口实例3(最大连续1的个数Ⅲ)

题目&#xff1a; 给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 1 的最大个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出&#xff1a;6 解释&#xff1a;[1,1,1,0,0,1,1…

stable diffusion实践操作-宽高设置以及高清修复

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、SD宽高怎么设置&#xff1f;1.1 宽高历史 二、高清修复总结 前言 主要介绍SD的宽高设置以及高清修复 一、SD宽高怎么设置&#xff1f; 1.1 宽高历史 SD生成256256图片效果最好。512512是SD一直使用的画…

【管理运筹学】第 7 章 | 图与网络分析(1,图论背景以及基本概念、术语)

文章目录 引言一、图与网络的基本知识1.1 图与网络的基本概念1.1.1 图的定义1.1.2 图中相关术语1.1.3 一些特殊图类1.1.4 图的运算 写在最后 引言 按照正常进度应该学习动态规划了&#xff0c;但我想换换口味&#xff0c;而且动态规划听说也有一定难度&#xff0c;还不一定会考…

设计模式—简单工厂

目录 一、前言 二、简单工厂模式 1、计算器例子 2、优化后版本 3、结合面向对象进行优化&#xff08;封装&#xff09; 3.1、Operation运算类 3.2、客户端 4、利用面向对象三大特性&#xff08;继承和多态&#xff09; 4.1、Operation类 4.2、加法类 4.3、减法类 4…

VTK——使用ICP算法进行模型配准

ICP算法 迭代最近点&#xff08;Iterative Closest Point&#xff0c;ICP&#xff09;算法是一种用于两个三维形状之间几何对齐&#xff08;也叫做配准&#xff09;的计算方法。通常&#xff0c;这两个形状至少有一个是点云数据。ICP算法用于最小化源点云与目标点云之间点到点…

【设计模式】Head First 设计模式——构建器模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 ​ 将一个复杂对象的构建与其表示相分离&…