Author:rab
# K8s版本
v1.23.6
# Docker版本
v20.10.20
# Helm版本
v3.10.3
# NFS
v4
说明:通过 NFS 对 MySQL 服务做数据持久化存储。这篇文章是建立在你已经掌握 Deployment、DaemonSet、Service、探针机制、PV/PVC、Secret/ConfigMap 基础上的。
1、安装 NFS Server
yum -y install rpcbind
yum -y install nfs-utils
2、启动 NFS Server
systemctl start nfs-server
systemctl enable nfs-server
systemctl start rpcbind
systemctl enable rpcbind
3、验证 NFS Server 是否启动
systemctl status nfs.service
4、配置文件共享路径
vim /etc/exports
/home/data/app 192.168.56.0/24(rw,no_root_squash,sync)
# 说明
# /home/data/app:是要共享的目录
# 192.168.56.0/24:授权的目标主机(即允许访问共享目录的主机或IP地址范围)
# rw:表示共享是可读写的,允许客户端对共享的目录执行读取和写入操作
# no_root_squash:这个选项表示在客户端使用 root 权限(超级用户权限)访问共享目录时,不会将其权限限制为匿名用户(通常映射为"nobody")。这意味着 root 用户可以在共享目录上执行操作,而不会受到权限的限制
# sync:这个选项指定NFS服务器应该采用同步写入模式。这意味着在数据写入共享目录之前,NFS服务器会等待确认写入操作,以确保数据的稳定性和一致性。这可以降低性能,但可以提供更高的数据一致性
5、验证 NFS Server 是否生效
showmount -e
1、下载并上传 Helm 二进制包
Helm 二进制安装包下载地址:https://github.com/helm/helm/tags
Helm 的作用:像 CentOS 7 中的 yum 命令一样管理软件包,只不过 Helm 这儿管理的是在 K8s 上安装的各种容器应用。
tar xzf helm-v3.10.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/bin/
2、版本验证
helm version
3、Helm 命令 Tab 补全
Helm 有很多子命令和参数,为了提高使用命令行的效率,通常建议安装 helm 的 bash 命令补全脚本。
helm completion bash > .helmrc
echo "source .helmrc" >> .bashrc
重新登录 Linux 系统,输入 helm 命令并按 Tab 键,此时就会列出 helm 命令的选项参数。
4、配置国内 Chart 仓库
微软仓库(推荐,基本上官网有的 chart 这里都有):http://mirror.azure.cn/kubernetes/charts/
官方仓库(官方 Chart 仓库,国内有点不好使):https://hub.kubeapps.com/charts/incubator
国内阿里云 Chart 仓库:https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update # 类似 yum update
5、查看配置的存储库
helm repo list
helm search repo stable
扩展:如何删除存储库?
helm repo remove aliyu # 移除你指定的存储库即可
安装完成 Helm 后,接下来就是通过 Helm 包管理工具来安装 MySQL,我们可以将这个 MySQL 服务部署在我们自定义的 namespace 中,便于后续的管理、运维,具体步骤如下。
kubectl create namespace helm
NFS Server 我们 2.1 步骤已经安装完成了,接下来就是创建持久卷(PV)。
vim mysql-helm-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-helm-pv
namespace: helm
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 8Gi
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /home/data/app
server: 192.168.56.160
kubectl apply -f mysql-helm-pv.yml
执行完成后验证 PV 是否被创建:
kubectl get pv -n helm
1、下载 MySQL 安装包
# 先查可用的MySQL版本(下图部分截图)
helm search repo mysql
# 下载安装包至本地
helm pull stable/mysql --version=1.6.9
# 注意:1.6.9不是MySQL的版本,而是chart的版本
2、解压缩安装包
会解压出mysql目录,我们的一且配置都在解压出的mysql目录中。
tar xzf mysql-1.6.9.tgz
3、指定 MySQL 镜像版本
根据实际情况来指定你的 MySQL 版本。
cd mysql && cp values.yaml values.yaml.bak && vim values.yaml
4、修改 MySQL 密码 root 密码
vim values.yaml
5、配置 Service
将 Type 设置为 NodePort,便于我们外部可请求 MySQL
并指定将 service 的 3306 端口映射到主机(Host)的 32000 端口。
vim values.yaml
以上配置完成后,接下来就是运行 MySQL 服务了。
# 进入values.yaml文件所在目录执行
helm install --name myhelm-mysql --name-template mysql -f values.yaml . --namespace helm
查看是否正常运行/部署:
以上部署完成后,接下来我们可以通过自己本地的 MySQL 客户端工具来连接 MySQL,可是否可正常连接。
测试连接没问题,以上就是简单的如何通过 Helm 来部署 MySQL,更多的 Helm 配置模板配置我们在后续继续深入,本次文章就是想让你整体认识到 Helm 包管理工具在 K8s 集群中的应用/特点。
那我们如何删除由 Helm 管理的资源呢?其实很简单,只需只想以下指令即可:
先列出 Helm 管理的资源
helm list -n helm
在删除你想删除的资源即可
会连同 deployment、service 等资源都会被删除,而且要注意的是,如果你的 PV 策略为 Recycle 时,该操作将会将你的持久化数据也一并连同删除,因此在实际生产中,为了保证我们数据的安全/完整性,我们一般会将 PV 回收策略设置为 Retain(即由我们管理员收到回收)。
helm uninstall mysql -n helm
好了,本次的内容就到此结束了,如果文中出现了相关技术性错误,欢迎批评指正!
—END