K8s 之 Helm 部署 MySQL 5.7

本文详细描述了在Kubernetes环境中,通过Helm部署MySQL,利用NFS进行数据持久化存储,并验证其可用性的过程,包括安装NFS服务器、配置Helm、创建PV和Namespace,以及MySQL的部署和连接验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

helm

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 基础上的。

二、部署

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

image-20231021120721591

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

image-20231021121732731

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 命令的选项参数。

image-20230116170328442

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

image-20230116174458427

5、查看配置的存储库

helm repo list
helm search repo stable

image-20230116174731285

扩展:如何删除存储库?

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

image-20231020181515267

# 下载安装包至本地
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

image-20231023100705754

4、修改 MySQL 密码 root 密码

vim values.yaml

image-20231023102610555

5、配置 Service

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

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

vim values.yaml

image-20231023103054641

2.3.4 部署 MySQL

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

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

image-20231023104101470

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

image-20231023105305106

2.4 MySQL 可用性验证

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

image-20231023105513874

小结

测试连接没问题,以上就是简单的如何通过 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

### 配置 MySQL 5.7 的 Secrets 为了在 Kubernetes 中为 MySQL 5.7 正确配置 Secrets,可以按照以下方法创建 YAML 文件并部署到集群中。Secret 是一种用于保存敏感数据的对象,例如密码、密钥等。 #### 创建 Secret 的 YAML 文件 以下是 `mysql-secret.yaml` 文件的内容示例: ```yaml apiVersion: v1 kind: Secret metadata: name: mysql-secret namespace: default type: Opaque data: root-password: cm9vdC1wYXNzd29yZA== # Base64 编码后的字符串 "root-password" ``` 上述文件定义了一个名为 `mysql-secret` 的 Secret 对象[^2]。其中: - `apiVersion: v1` 表明此对象属于核心 API 版本。 - `kind: Secret` 指定这是一个 Secret 类型资源。 - `metadata.name` 和 `metadata.namespace` 设置了 Secret 的名称和命名空间。 - `type: Opaque` 表示该 Secret 存储的是不透明的数据(即普通的键值对)。 - `data.root-password` 是经过 Base64 编码的根用户密码。如果原始密码是 `mypassword`,则其 Base64 编码形式应为 `bXlwYXNzd29yZA==`。 #### 应用 Secret 到 Kubernetes 集群 使用以下命令将 Secret 部署Kubernetes 集群中: ```bash kubectl apply -f mysql-secret.yaml ``` 执行成功后,可以通过以下命令验证 Secret 是否已创建: ```bash kubectl get secret mysql-secret -o yaml ``` #### 获取 Root 用户密码 当需要从 Secret 中提取根用户的密码时,可运行如下命令: ```bash kubectl get secrets mysql-secret -o jsonpath='{.data.root-password}' | base64 -d ``` 这会解码之前存储的 Base64 数据,并返回实际的密码[^3]。 #### 将 Secret 绑定至 Pod 或 StatefulSet 为了让 MySQL 实例能够访问这些秘密信息,需将其挂载到容器内的环境变量或卷路径上。例如,在 `mysql-statefulset.yaml` 中添加以下部分来引用 Secret: ```yaml env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: root-password ``` 这样就完成了 Secret 的绑定操作[^1]。 #### Helm 替代方案 除了手动编写 YAML 文件外,还可以利用 Helm Chart 来简化 MySQL 及其相关组件的安装过程。尽管 Helm 并非 Kubernetes 官方提供,但它的功能强大且易于扩展[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值