• K8s 之 Helm 部署 MySQL 5.7


    helm

    Author:rab



    一、环境

    # K8s版本
    v1.23.6
    
    # Docker版本
    v20.10.20
    
    # Helm版本
    v3.10.3
    
    # NFS
    v4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    二、部署

    2.1 安装 NFS

    1、安装 NFS Server

    yum -y install rpcbind
    yum -y install nfs-utils
    
    • 1
    • 2

    2、启动 NFS Server

    systemctl start nfs-server
    systemctl enable nfs-server
    systemctl start rpcbind
    systemctl enable rpcbind
    
    • 1
    • 2
    • 3
    • 4

    3、验证 NFS Server 是否启动

    systemctl status nfs.service
    
    • 1

    image-20231021120721591

    4、配置文件共享路径

    vim /etc/exports
    
    • 1
    /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服务器会等待确认写入操作,以确保数据的稳定性和一致性。这可以降低性能,但可以提供更高的数据一致性
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5、验证 NFS Server 是否生效

    showmount -e
    
    • 1

    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/
    
    • 1
    • 2

    2、版本验证

    helm version
    
    • 1

    image-20230116165436895

    3、Helm 命令 Tab 补全

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

    helm completion bash > .helmrc
    echo "source .helmrc" >> .bashrc
    
    • 1
    • 2

    重新登录 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
    
    • 1
    • 2
    • 3

    image-20230116174458427

    5、查看配置的存储库

    helm repo list
    helm search repo stable
    
    • 1
    • 2

    image-20230116174731285

    扩展:如何删除存储库?

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

    2.3 安装 MySQL

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

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

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

    vim mysql-helm-pv.yml
    
    • 1
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    kubectl apply -f mysql-helm-pv.yml
    
    • 1

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

    kubectl get pv -n helm
    
    • 1

    image-20231023101750465

    2.3.3 配置 MySQL

    1、下载 MySQL 安装包

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

    image-20231020181515267

    # 下载安装包至本地
    helm pull stable/mysql --version=1.6.9
    
    # 注意:1.6.9不是MySQL的版本,而是chart的版本
    
    • 1
    • 2
    • 3
    • 4

    image-20231020181902080

    2、解压缩安装包

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

    tar xzf mysql-1.6.9.tgz
    
    • 1

    3、指定 MySQL 镜像版本

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

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

    image-20231023100705754

    4、修改 MySQL 密码 root 密码

    vim values.yaml
    
    • 1

    image-20231023102610555

    5、配置 Service

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

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

    vim values.yaml
    
    • 1

    image-20231023103054641

    2.3.4 部署 MySQL

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

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

    image-20231023104101470

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

    image-20231023105305106

    2.4 MySQL 可用性验证

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

    image-20231023105513874

    小结

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

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

    • 先列出 Helm 管理的资源

      helm list -n helm
      
      • 1

      image-20231023110118447

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

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

      helm uninstall mysql -n helm
      
      • 1

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

    —END

  • 相关阅读:
    Java死锁的原因及解决方法
    Linux运维10:scp命令详解
    怎样构建符合HIPAA的服务?
    IDEA-远程debug
    Nuxt3 实战 (五):Header 头部布局
    【JS】你不知道的 console 命令
    衍三的硬件笔记之如何选择MOS管
    redis 复制集群搭建
    基于百度、高德路线规划的出行圈获取
    mindspore两日集训营202209-自定义算子 数据处理
  • 原文地址:https://blog.csdn.net/IT_ZRS/article/details/133985291