当前位置:网站首页>k8s入门:Helm 构建 MySQL
k8s入门:Helm 构建 MySQL
2022-07-02 06:29:00 【不懂一休】
一、系列文章
第一章: k8s入门:裸机部署 k8s 集群
第二章: k8s入门:部署应用到 k8s 集群
第三章: k8s入门:service 简单使用
第四章: k8s入门:StatefulSet 简单使用
第五章: k8s入门:存储(storage)
第六章: K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间
第七章: k8s入门:配置 ConfigMap & Secret
第八章: k8s入门:k8s入门:Helm 构建 MySQL
第九章: k8s入门:kubernetes-dashboard 安装
第十章: k8s入门:kube-prometheus-stack 全家桶搭建(Grafana + Prometheus)
文章目录
二、简介
Helm 类似 npm,pip,docker hub, 可以理解为是一个软件库,可以方便快速的为我们的集群安装一些第三方软件。Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。使用 Helm 我们可以非常方便的就搭建出来 MongoDB / MySQL 副本集群,YAML 文件别人都给我们写好了,直接使用
Helm 官网:https://helm.sh/zh/docs/
Helm chart 仓库 Artifact Hub :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/
五、实践:helm 安装 mysql
1、安装 helm
自动化脚本安装
安装 helm,下面使用脚本安装 helm 3,更多安装方法可参考:https://helm.sh/zh/docs/intro/install/
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
压缩包安装
- 下载 需要的版本:https://github.com/helm/helm/releases
- 解压(
tar -zxvf helm-v3.9.0-linux-amd64.tar.gz
) - 在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
2、添加 chart 仓库
# 天剑 bitnami 仓库
[[email protected] secret]# helm repo add bitnami https://charts.bitnami.com/bitnami
# 添加开源社/Azure中国
[[email protected] secret]# helm repo add azure http://mirror.azure.cn/kubernetes/charts/
# 查看添加的仓库
[[email protected] secret]# helm repo list
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,也可以使用如下命令查找
# 查询 Artifact Hub 中可用的 mysql chart
[[email protected] secret]# helm search hub mysql
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
# 查询 repo 仓库可用的 mysql chart
[[email protected] secret]# helm search repo mysql
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
参数 | 说明 | 默认值 |
MySQL 常用参数 | ||
auth.rootPassword | root 账户密码 | "" |
auth.createDatabase | 创建 auth.database 指定的数据库 | true |
auth.database | 数据库名 | my_database |
MySQL 主要参数参数 | ||
primary.persistence.storageClass | MySQL主持久卷存储类 | "" |
primary.persistence.annotations | MySQL 主持久卷声明注释 | {} |
primary.persistence.accessModes | MySQL主持久卷访问模式 | ["ReadWriteOnce"] |
primary.persistence.size | MySQL 主持久卷大小 | 8Gi |
MySQL 辅助参数 | ||
secondary.service.type | service 类型 | ClusterIP |
secondary.service.ports.mysql | service 端口 | 3306 |
secondary.service.nodePorts.mysql | service nodePorts | "" |
②、参数文件
config.yaml 文件内容如下,YAML是JSON的超集,也可以使用 JSON文件
auth:
createDatabase: true
database: "study_database"
rootPassword: "[email protected]"
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 动态申领本地磁盘空间
[[email protected] mysql]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-storage nfs-diy Retain Immediate false 6d20h
[[email protected] mysql]# kubectl describe sc/nfs-storage
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
# 安装 MySQL,-f config.yaml 指定参数文件
[[email protected] mysql]# helm install mysql bitnami/mysql -f config.yaml
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"
# 查看 pod 详情
[[email protected] mysql]# kubectl get pod -o wide
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>
# 查看 PVC
[[email protected] mysql]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-mysql-0 Bound pvc-e9484bd1-9ec2-4f09-8d71-d7bd1342792b 1Gi RWX nfs-storage 15s
# 查看 PV
[[email protected] mysql]# kubectl get pv
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
# 挂载的目录
[[email protected] mysql]# ls /home/data/default-data-mysql-0-pvc-e9484bd1-9ec2-4f09-8d71-d7bd1342792b/data/
auto.cnf binlog.000002 binlog.index ca.pem client-key.pem #ib_16384_1.dblwr ibdata1 ib_logfile1 #innodb_temp mysql.ibd performance_schema public_key.pem server-key.pem sys undo_002
binlog.000001 binlog.000003 ca-key.pem client-cert.pem #ib_16384_0.dblwr ib_buffer_pool ib_logfile0 ibtmp1 mysql mysql_upgrade_info private_key.pem server-cert.pem study_database undo_001
# 查看 SVC
[[email protected] mysql]# kubectl get svc
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 数据库
# 创建一个 MySQL pod,退出即删除
[[email protected] mysql]# kubectl run mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.29-debian-11-r3 --namespace default --env [email protected] --command -- bash
If you don't see a command prompt, try pressing enter. I have no [email protected]:/$ 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
[[email protected] mysql]# helm uninstall mysql
release "mysql" uninstalled
边栏推荐
- STL速查手册
- 什么是SQL注入
- Carsim problem failed to start Solver: Path Id Obj (X) was set to y; Aucune valeur de correction de xxxxx?
- File upload and download performance test based on the locust framework
- Comparable,Comparator,Clonable 接口使用剖析
- Causes of laptop jam
- Force buckle method summary: sliding window
- C language implements XML generation and parsing library (XML extension)
- Makefile基本原理
- 王-课外单词
猜你喜欢
2022 Heilongjiang's latest eight member (Safety Officer) simulated test question bank and answers
Carla-UE4Editor导入RoadRunner地图文件(保姆级教程)
乐理基础(简述)
Analysis of the use of comparable, comparator and clonable interfaces
Intelligent manufacturing solutions digital twin smart factory
樂理基礎(簡述)
c语言将字符串中的空格替换成%20
How to build the alliance chain? How much is the development of the alliance chain
双向链表的实现(双向链表与单向链表的简单区别联系和实现)
链表经典面试题(反转链表,中间节点,倒数第k个节点,合并分割链表,删除重复节点)
随机推荐
Introduction to anti interception technology of wechat domain name
Simple implementation scheme of transcoding and streaming (I)
Backup, recovery and repair of XFS file system
Summary of one question per day: linked list (continuously updated)
How to build the alliance chain? How much is the development of the alliance chain
使用wireshark抓取Tcp三次握手
DWORD ptr[]
什么是SQL注入
OpenCV3 6.3 用滤波器进行缩减像素采样
How to wrap qstring strings
SQL操作数据库语法
Method recursion (Fibonacci sequence, frog jumping steps, tower of Hanoi problem)
双向链表的实现(双向链表与单向链表的简单区别联系和实现)
OpenCV关于x,y坐标容易混淆的心得
Global and Chinese markets for magnetic resonance imaging (MRI) transmission 2022-2028: Research Report on technology, participants, trends, market size and share
c语言自定义类型——结构体,位段(匿名结构体,结构体的自引用,结构体的内存对齐)
Erase method in string
Jz-061-serialized binary tree
Opencv common method source link (continuous update)
Rotating linked list (illustration)