K8s 之 Helm 部署 MySQL 5.7

**Author:**rab


目录

    • 一、环境
    • 二、部署
      • [2.1 安装 NFS](#2.1 安装 NFS)
      • [2.2 安装 Helm](#2.2 安装 Helm)
      • [2.3 安装 MySQL](#2.3 安装 MySQL)
        • [2.3.1 创建 Namespace](#2.3.1 创建 Namespace)
        • [2.3.2 创建 PV](#2.3.2 创建 PV)
        • [2.3.3 配置 MySQL](#2.3.3 配置 MySQL)
        • [2.3.4 部署 MySQL](#2.3.4 部署 MySQL)
      • [2.4 MySQL 可用性验证](#2.4 MySQL 可用性验证)
    • 小结

一、环境

sh 复制代码
# K8s版本
v1.23.6

# Docker版本
v20.10.20

# Helm版本
v3.10.3

# NFS
v4

说明:通过 NFS 对 MySQL 服务做数据持久化存储。这篇文章是建立在你已经掌握 Deployment、DaemonSet、Service、探针机制、PV/PVC、Secret/ConfigMap 基础上的。

二、部署

2.1 安装 NFS

1、安装 NFS Server

sh 复制代码
yum -y install rpcbind
yum -y install nfs-utils

2、启动 NFS Server

sh 复制代码
systemctl start nfs-server
systemctl enable nfs-server
systemctl start rpcbind
systemctl enable rpcbind

3、验证 NFS Server 是否启动

sh 复制代码
systemctl status nfs.service

4、配置文件共享路径

sh 复制代码
vim /etc/exports
sh 复制代码
/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 是否生效

sh 复制代码
showmount -e

2.2 安装 Helm

1、下载并上传 Helm 二进制包

Helm 二进制安装包下载地址:https://github.com/helm/helm/tags

Helm 的作用:像 CentOS 7 中的 yum 命令一样管理软件包,只不过 Helm 这儿管理的是在 K8s 上安装的各种容器应用。

sh 复制代码
tar xzf helm-v3.10.3-linux-amd64.tar.gz
cp linux-amd64/helm /usr/bin/

2、版本验证

sh 复制代码
helm version

3、Helm 命令 Tab 补全

Helm 有很多子命令和参数,为了提高使用命令行的效率,通常建议安装 helm 的 bash 命令补全脚本。

sh 复制代码
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

sh 复制代码
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、查看配置的存储库

sh 复制代码
helm repo list
helm search repo stable

扩展:如何删除存储库?

sh 复制代码
helm repo remove aliyu   # 移除你指定的存储库即可

2.3 安装 MySQL

安装完成 Helm 后,接下来就是通过 Helm 包管理工具来安装 MySQL,我们可以将这个 MySQL 服务部署在我们自定义的 namespace 中,便于后续的管理、运维,具体步骤如下。

2.3.1 创建 Namespace
sh 复制代码
kubectl create namespace helm
2.3.2 创建 PV

NFS Server 我们 2.1 步骤已经安装完成了,接下来就是创建持久卷(PV)。

sh 复制代码
vim mysql-helm-pv.yml
sh 复制代码
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
sh 复制代码
kubectl apply -f mysql-helm-pv.yml

执行完成后验证 PV 是否被创建:

sh 复制代码
kubectl get pv -n helm
2.3.3 配置 MySQL

1、下载 MySQL 安装包

sh 复制代码
# 先查可用的MySQL版本(下图部分截图)
helm search repo mysql
sh 复制代码
# 下载安装包至本地
helm pull stable/mysql --version=1.6.9

# 注意:1.6.9不是MySQL的版本,而是chart的版本

2、解压缩安装包

会解压出mysql目录,我们的一且配置都在解压出的mysql目录中。

sh 复制代码
tar xzf mysql-1.6.9.tgz

3、指定 MySQL 镜像版本

根据实际情况来指定你的 MySQL 版本。

sh 复制代码
cd mysql && cp values.yaml values.yaml.bak && vim values.yaml

4、修改 MySQL 密码 root 密码

sh 复制代码
vim values.yaml

5、配置 Service

将 Type 设置为 NodePort,便于我们外部可请求 MySQL

并指定将 service 的 3306 端口映射到主机(Host)的 32000 端口。

sh 复制代码
vim values.yaml
2.3.4 部署 MySQL

以上配置完成后,接下来就是运行 MySQL 服务了。

sh 复制代码
# 进入values.yaml文件所在目录执行
helm install --name myhelm-mysql --name-template mysql -f values.yaml . --namespace helm

查看是否正常运行/部署:

2.4 MySQL 可用性验证

以上部署完成后,接下来我们可以通过自己本地的 MySQL 客户端工具来连接 MySQL,可是否可正常连接。

小结

测试连接没问题,以上就是简单的如何通过 Helm 来部署 MySQL,更多的 Helm 配置模板配置我们在后续继续深入,本次文章就是想让你整体认识到 Helm 包管理工具在 K8s 集群中的应用/特点。

那我们如何删除由 Helm 管理的资源呢?其实很简单,只需只想以下指令即可:

  • 先列出 Helm 管理的资源

    sh 复制代码
    helm list -n helm
  • 在删除你想删除的资源即可

    会连同 deployment、service 等资源都会被删除,而且要注意的是,如果你的 PV 策略为 Recycle 时,该操作将会将你的持久化数据也一并连同删除,因此在实际生产中,为了保证我们数据的安全/完整性,我们一般会将 PV 回收策略设置为 Retain(即由我们管理员收到回收)。

    sh 复制代码
    helm uninstall mysql -n helm

好了,本次的内容就到此结束了,如果文中出现了相关技术性错误,欢迎批评指正!

---END

相关推荐
moton20171 小时前
云原生:构建现代化应用的基石
后端·docker·微服务·云原生·容器·架构·kubernetes
一个假的前端男3 小时前
Windows Docker Desktop安装及使用 Docker 运行 MySQL
windows·docker·容器
小马爱打代码3 小时前
125个Docker的常用命令
运维·docker·容器
xiao-xiang3 小时前
jenkins-k8s pod方式动态生成slave节点
java·kubernetes·jenkins
胡八一4 小时前
解决docker: ‘buildx‘ is not a docker command.
运维·docker·容器
QQ_7781329746 小时前
在K8S中使用Values文件定制不同环境下的应用配置详解
kubernetes
huosenbulusi15 小时前
helm推送到harbor私有库--http: server gave HTTP response to HTTPS client
云原生·容器·k8s
不会飞的小龙人15 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人15 小时前
Docker基础安装与使用
linux·运维·docker·容器
元气满满的热码式20 小时前
K8S中Service详解(三)
云原生·容器·kubernetes