K8s 之 Helm 部署 MySQL 5.7

K8s 之 Helm 部署 MySQL 5.7_第1张图片

Author:rab


目录

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


一、环境

# 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

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

K8s 之 Helm 部署 MySQL 5.7_第2张图片

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

K8s 之 Helm 部署 MySQL 5.7_第3张图片

2.2 安装 Helm

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

image-20230116165436895

3、Helm 命令 Tab 补全

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

helm completion bash > .helmrc
echo "source .helmrc" >> .bashrc

重新登录 Linux 系统,输入 helm 命令并按 Tab 键,此时就会列出 helm 命令的选项参数。

K8s 之 Helm 部署 MySQL 5.7_第4张图片

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

K8s 之 Helm 部署 MySQL 5.7_第5张图片

5、查看配置的存储库

helm repo list
helm search repo stable

K8s 之 Helm 部署 MySQL 5.7_第6张图片

扩展:如何删除存储库?

helm repo remove aliyu   # 移除你指定的存储库即可

2.3 安装 MySQL

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

2.3.1 创建 Namespace
kubectl create namespace helm
2.3.2 创建 PV

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

image-20231023101750465

2.3.3 配置 MySQL

1、下载 MySQL 安装包

# 先查可用的MySQL版本(下图部分截图)
helm search repo mysql

K8s 之 Helm 部署 MySQL 5.7_第7张图片

# 下载安装包至本地
helm pull stable/mysql --version=1.6.9

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

image-20231020181902080

2、解压缩安装包

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

tar xzf mysql-1.6.9.tgz

3、指定 MySQL 镜像版本

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

cd mysql && cp values.yaml values.yaml.bak && vim values.yaml

K8s 之 Helm 部署 MySQL 5.7_第8张图片

4、修改 MySQL 密码 root 密码

vim values.yaml

image-20231023102610555

5、配置 Service

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

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

vim values.yaml

K8s 之 Helm 部署 MySQL 5.7_第9张图片

2.3.4 部署 MySQL

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

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

K8s 之 Helm 部署 MySQL 5.7_第10张图片

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

K8s 之 Helm 部署 MySQL 5.7_第11张图片

2.4 MySQL 可用性验证

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

K8s 之 Helm 部署 MySQL 5.7_第12张图片

小结

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

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

  • 先列出 Helm 管理的资源

    helm list -n helm
    

    image-20231023110118447

  • 在删除你想删除的资源即可

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

    helm uninstall mysql -n helm
    

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

—END

你可能感兴趣的:(云原生,kubernetes,容器)