Helm安装MySQL集群(较为常用)
Helm简介
Helm 是一个 Kubernetes 应用的包管理工具,类似于 Ubuntu 的 APT 和 CentOS 中的 YUM。
Helm使用chart 来封装kubernetes应用的 YAML 文件,我们只需要设置自己的参数,就可以实现自动化的快速部署应用。
三大概念
- Chart 代表着 Helm 包。
-
- 它包含运行应用程序需要的所有资源定义和依赖,相当于模版。
- 类似于maven中的
pom.xml
、Apt中的dpkb
或 Yum中的RPM
。
- Repository(仓库) 用来存放和共享 charts。
-
- 不用的应用放在不同的仓库中。
- Release 是运行 chart 的实例。
一个 chart 通常可以在同一个集群中安装多次。
每一次安装都会创建一个新的 release,release name
不能重复。
Helm仓库
Helm有一个跟docker Hub类似的应用中心(Artifact Hub),我们可以在里面找到我们需要部署的应用。
安装Helm
下载安装包:
https://github.com/helm/helm/releases
https://get.helm.sh/helm-v3.10.0-linux-amd64.tar.gz
tar -zxvf helm-v3.10.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm
在K3s中使用,需要配置环境变量
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
安装单节点Mysql
#添加仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
#查看chart
helm show chart bitnami/mysql
#查看默认值
helm show values bitnami/mysql
#安装mysql
helm install my-mysql \
--set-string auth.rootPassword="123456" \
--set primary.persistence.size=2Gi \
bitnami/mysql
#查看设置
helm get values my-mysql
#删除mysql
helm delete my-release
values.yaml
auth:
rootPassword: "123456"
primary:
persistence:
size: 2Gi
enabled: true
secondary:
# 从节点的数量
replicaCount: 2
persistence:
size: 2Gi
enabled: true
# 集群模式
architecture: replication
helm install my-db -f values.yaml bitnami/mysql
如果报下面的错是环境变量没弄好
Error: INSTALLATION FAILED: Kubernetes cluster unreachable: Get "http://localhost:8080/version": dial tcp [::1]:8080: connect: connection refused
解决方法
编辑/etc/profile
vim /etc/profile
追加内容:
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
刷新配置
source /etc/profile
再次执行helm install my-db -f values.yaml bitnami/mysql
安装成功后将显示的一大堆英文复制出来
NAME: cluster
LAST DEPLOYED: Mon Dec 26 16:17:16 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mysql
CHART VERSION: 9.4.5
APP VERSION: 8.0.31
** 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: cluster-mysql-primary.default.svc.cluster.local:3306
echo Secondary: cluster-mysql-secondary.default.svc.cluster.local:3306
Execute the following to get the administrator credentials:
echo Username: root
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default cluster-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 cluster-mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.31-debian-11-r20 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
2. To connect to primary service (read/write):
mysql -h cluster-mysql-primary.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
3. To connect to secondary service (read-only):
mysql -h cluster-mysql-secondary.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
在依次执行
# 设置root密码环境变量
MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default cluster-mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)
# 创建mysql客户端pod
kubectl run cluster-mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.31-debian-11-r20 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
# 在pod中先连接主库
mysql -h cluster-mysql-primary.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
# 创建test数据库和message的表 在表里放一条数据 hello
使用端口转发 用图形化工具连接mysql
kubectl port-forward --address=192.168.177.151 pods/cluster-mysql-primary-0 33060
这个命令是前台运行 关闭后就断开连接