容器技术
ubuntu使用APT安装docker并指定版本
Helm部署与使用
Helm常用命令
从Helm仓库创建应用流程示例
Helm部署与使用
K8S中部署mysql-ha高可用集群
helm启动mysql-ha
helm几个常用仓库
Kubernetes使用helm部署Mysql-Ha
k8s入门:Helm 构建 MySQL
docker批量修改tag(批量push)
k8s之yaml文件详解
将 MySQL 通过 bitpoke/mysql-operator 部署到 k8s 内部
k8s pvc扩容:pvc创建后扩容
K8S性能分析
部署Metrics Server
Kubernetes集群搭建
kubespray 部署常见问题和优化汇总
kubernetes-sigs/kubespray at release-2.15
K8S-pod配置文件详解
KubeSphere知识库
在 Kubernetes 上最小化安装 KubeSphere
卸载 KubeSphere 和 Kubernetes
KubeSphere 应用商店
修改pod中容器的时区
k8s之Pod安全策略
Harbor 登陆失败,用户名或者密码不正确。405 Not Allowed
Docker-leanote_n1
kubesphere/kubekey
Kubernetes Static Pod (静态Pod)
kubernets kube-proxy的代理 iptables和ipvs - 30岁再次出发 - 博客园
k8s生产实践之获取客户端真实IP - SSgeek - 博客园
kube-proxy ip-tables故障解决
k8s入门:Helm 构建 MySQL
docker批量修改tag(批量push)
prometheus operator 监控redis-exporter
Helm3 安装 ElasticSearch & Kibana 7.x 版本
kubernete强力删除namespace_redis删除namespace命令
EFK (Elasticsearch + Fluentd + Kibana) 日志分析系统
k8s日志收集实战(无坑)
fluentd收集k8s集群pod日志
Elasticsearch+Fluentd+Kibana 日志收集系统的搭建
TKE/EKS之configmap,secret只读挂载
K8s基于Reloader的ConfigMap/Secret热更新
使用 Reloader 实现热部署_k8s reloader
k8s使用Reloader实现更新configmap后自动重启pod
在 Kubernetes 上对 gRPC 服务器进行健康检查 | Kubernetes
Kubernetes ( k8s ) gRPC服务 健康检查 ( livenessProbe ) 与 就绪检查 ( readinessProbe )
排查kubernetes中高磁盘占用pod
helm 安装 MongoDB 集群
helm 安装 Redis 1 主 2 从 3哨兵
【k8s】使用 Reloader 实现热部署
k8s证书过期,更新后kubelet启动失败
kubeadm证书/etcd证书过期处理
三种监控 Kubernetes 集群证书过期方案
K8s 集群(kubeadm) CA 证书过期解决方案
k8s调度、污点、容忍、不可调度、排水、数据卷挂载
5分钟搞懂K8S的污点和容忍度(理论+实战)
Kubernetes进阶-8基于Istio实现微服务治理
macvlan案例配置
快速解决Dockerhub镜像站无法访问问题
info_scan开源漏洞扫描主系统部署
本文档使用 MrDoc 发布
-
+
首页
k8s入门:Helm 构建 MySQL
第一章:✨ [k8s入门:裸机部署 k8s 集群](https://blog.csdn.net/qq_41538097/article/details/124869179) 第二章:✨ [k8s入门:部署应用到 k8s 集群](https://blog.csdn.net/qq_41538097/article/details/124884400) 第三章:✨ [k8s入门:service 简单使用](https://blog.csdn.net/qq_41538097/article/details/125175685) 第四章:✨ [k8s入门:StatefulSet 简单使用](https://blog.csdn.net/qq_41538097/article/details/125189618) 第五章:✨ [k8s入门:存储(storage)](https://blog.csdn.net/qq_41538097/article/details/125215989) 第六章:✨ [K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间](https://blog.csdn.net/qq_41538097/article/details/125380287) 第七章:✨ [k8s入门:配置 ConfigMap & Secret](https://blog.csdn.net/qq_41538097/article/details/125387461) 第八章:✨ [k8s入门:k8s入门:Helm 构建 MySQL](https://yixiu.blog.csdn.net/article/details/125442282) 第九章:✨ [k8s入门:kubernetes-dashboard 安装](https://blog.csdn.net/qq_41538097/article/details/125561769) 第十章:✨ [k8s入门:kube-prometheus-stack 全家桶搭建(Grafana + Prometheus)](https://blog.csdn.net/qq_41538097/article/details/125564711) #### 二、简介 Helm 类似 npm,pip,docker hub, 可以理解为是一个软件库,可以方便快速的为我们的集群安装一些第三方软件。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。使用 Helm 我们可以非常方便的就搭建出来 MongoDB / MySQL 副本集群,YAML 文件别人都给我们写好了,直接使用 Helm 官网:[https://helm.sh/zh/docs/](https://helm.sh/zh/docs/) Helm chart 仓库 Artifact Hub :[https://artifacthub.io/packages/search](https://artifacthub.io/packages/search) Artifact Hub 是基于web页面的应用,支持CNCF项目的查找、安装和发布包及配置项,包括了公开发布的Helm chart。它是CNCF的沙盒项目 环境: - linux:centos 7.9 - helm:v3.9.0 - docker:v20.10.17 - k8s:v1.23.1 - MySQL:v8.0.29 - MySQL chart:9.1.8 #### 三、三大概念 - Chart: 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。 - Repository(仓库): 是用来存放和共享 charts 的地方,供 Kubernetes 包所使用的。 - Release: 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一个 chart 都拥有自己的 release 和 release name。 Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。 #### 四、常用命令 - helm search:查找 Charts,可以直接到 Artifact Hub 网站查找 charts, helm search hub 从 Artifact Hub 中查找并列出 helm charts ,Helm 搜索使用模糊字符串匹配算法,所以你可以只输入名字的一部分 - helm search hub - 在 Artifact Hub 或自己的 hub 实例中搜索 chart - helm search repo - 在你添加的仓库中搜索 - helm install:安装一个 helm 包,最简单的使用方法只需要传入两个参数:你命名的release名字和你想安装的chart的名称。 - helm upgrade 和 helm rollback:升级 release 和失败时恢复 - helm uninstall:卸载 release - helm repo:Helm 3 不再附带一个默认的 chart 仓库。helm repo 提供了一组命令用于添加(helm repo add)、列出(helm repo list)、更新(helm repo update)和移除仓库(helm repo remove)。 更多详细命令参考:[https://helm.sh/zh/docs/helm/helm/](https://helm.sh/zh/docs/helm/helm/) #### 五、实践:helm 安装 mysql ##### 1、安装 helm ```bash curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash ``` ##### 2、添加 chart 仓库 ```bash [root@master secret] [root@master secret] [root@master secret] NAME URL azure http://mirror.azure.cn/kubernetes/charts/ bitnami https://charts.bitnami.com/bitnami ``` ##### 3、查询 mysql 可用版本 查找可用的 MySQL,可以去 Helm chart 仓库 Artifact Hub 中查找可用的 MySQL,如:[https://artifacthub.io/packages/helm/bitnami/mysql](https://artifacthub.io/packages/helm/bitnami/mysql),也可以使用如下命令查找 ```bash [root@master secret] URL CHART VERSION APP VERSION DESCRIPTION https://artifacthub.io/packages/helm/cloudnativ... 5.0.1 8.0.16 Chart to create a Highly available MySQL cluster https://artifacthub.io/packages/helm/stakater/m... 1.0.6 mysql chart that runs on kubernetes https://artifacthub.io/packages/helm/saber/mysql 8.8.21 8.0.27 Chart to create a Highly available MySQL cluster [root@master secret] NAME CHART VERSION APP VERSION DESCRIPTION azure/prometheus-mysql-exporter 0.7.1 v0.11.0 DEPRECATED A Helm chart for prometheus mysql ex... bitnami/mysql 9.1.8 8.0.29 MySQL is a fast, reliable, scalable, and easy t... ``` ##### 4、安装 MySQL ###### ①、可选参数 安装 MySQL,更多详细参数可参考 [https://artifacthub.io/packages/helm/bitnami/mysql](https://artifacthub.io/packages/helm/bitnami/mysql) <table><tbody><tr><td>参数</td><td>说明</td><td>默认值</td></tr><tr><td>MySQL 常用参数</td></tr><tr><td>auth.rootPassword</td><td>root 账户密码</td><td>""</td></tr><tr><td>auth.createDatabase</td><td>创建 auth.database 指定的数据库</td><td>true</td></tr><tr><td>auth.database</td><td>数据库名</td><td>my_database</td></tr><tr><td>MySQL 主要参数参数</td></tr><tr><td>primary.persistence.storageClass</td><td>MySQL主持久卷存储类</td><td>""</td></tr><tr><td>primary.persistence.annotations</td><td>MySQL 主持久卷声明注释</td><td>{}</td></tr><tr><td>primary.persistence.accessModes</td><td>MySQL主持久卷访问模式</td><td>["ReadWriteOnce"]</td></tr><tr><td>primary.persistence.size</td><td>MySQL 主持久卷大小</td><td>8Gi</td></tr><tr><td>MySQL 辅助参数</td></tr><tr><td>secondary.service.type</td><td>service 类型</td><td>ClusterIP</td></tr><tr><td>secondary.service.ports.mysql</td><td>service 端口</td><td>3306</td></tr><tr><td>secondary.service.nodePorts.mysql</td><td>service nodePorts</td><td>""</td></tr></tbody></table> ###### ②、参数文件 config.yaml 文件内容如下,YAML是JSON的超集,也可以使用 JSON文件 ```yaml auth: createDatabase: true database: "study_database" rootPassword: "Root@1234." primary: service: ports: mysql: "3306" type: "NodePort" nodePorts: mysql: "33060" persistence: storageClass: "nfs-storage" size: "1Gi" annotations: {} accessModes: - "ReadWriteMany" enabled: true ``` ###### ③、storageClass 其中 primary.persistence.storageClass=“nfs-storage” 如下,具体实现可参考我另一篇文章:[K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间](https://yixiu.blog.csdn.net/article/details/125380287) ```bash [root@master mysql] NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-storage nfs-diy Retain Immediate false 6d20h [root@master mysql] Name: nfs-storage IsDefaultClass: No Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{},"name":"nfs-storage"},"parameters":{"archiveOnDelete":"false"},"provisioner":"nfs-diy","reclaimPolicy":"Retain"} Provisioner: nfs-diy Parameters: archiveOnDelete=false AllowVolumeExpansion: <unset> MountOptions: <none> ReclaimPolicy: Retain VolumeBindingMode: Immediate Events: <none> ``` ###### ④、安装 MySQL chart ```bash [root@master mysql] NAME: mysql LAST DEPLOYED: Mon Jun 27 19:05:45 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: mysql CHART VERSION: 9.1.8 APP VERSION: 8.0.29 ** Please be patient while the chart is being deployed ** Tip: Watch the deployment status using the command: kubectl get pods -w --namespace default Services: echo Primary: mysql.default.svc.cluster.local:3306 Execute the following to get the administrator credentials: echo Username: root MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d) To connect to your database: 1. Run a pod that you can use as a client: kubectl run mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.29-debian-11-r3 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash 2. To connect to primary service (read/write): mysql -h mysql.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD" [root@master mysql] NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-0 1/1 Running 0 105s 10.244.1.57 node1 <none> <none> [root@master mysql] NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-mysql-0 Bound pvc-e9484bd1-9ec2-4f09-8d71-d7bd1342792b 1Gi RWX nfs-storage 15s [root@master mysql] NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-9e1650f2-4f5b-4c14-95c2-eb046ebddb2c 8Gi RWO Retain Released default/data-mysql-0 nfs-storage 85m [root@master mysql] auto.cnf binlog.000002 binlog.index ca.pem client-key.pem binlog.000001 binlog.000003 ca-key.pem client-cert.pem [root@master mysql] NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mysql NodePort 10.96.52.109 <none> 3306:33060/TCP 26s mysql-headless ClusterIP None <none> 3306/TCP 26s ``` ###### ⑤、连接测试 - 命令行连接如下,可以见到连接成功,并且创建 study\_database 数据库 ```bash [root@master mysql] If you don't see a command prompt, try pressing enter. I have no name!@mysql-client:/$ mysql -h mysql.default.svc.cluster.local -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 352 Server version: 8.0.29 Source distribution Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | study_database | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> ``` - 可视化界面 sqlyog 连接成功,端口号 33060  ##### 5、卸载 mysql 使用如下命令卸载 mysql,会删除 pod 和 service,但不会删除 PV 、 PVC 和 SC,PV 状态会变为 Released ```bash [root@master mysql] release "mysql" uninstalled ```
adouk
2023年1月13日 16:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码