「MySQL」- 部署 | Kubernetes | 服务 | 单实例 | 测试

MySQL 8 | on Kubernetes | with Manifest

kubectl apply -f ./mysql-single.yaml

MySQL 8 | on Kubernetes | with Helm Chart | by Bitnami

该笔记将记录:在 Kubernetes 中,如何部署单节点的 MySQL 服务,以及常见问题处理;

通过 HELM 部署

Run a Single-Instance Stateful Application | Kubernetes
Helm Charts to deploy MySQL in Kubernetes
charts/bitnami/mysql at master · bitnami/charts

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update bitnami

helm search repo bitnami/mysql --versions | grep -F 8.0

helm pull bitnami/mysql
helm show values ./mysql-9.2.0.tgz > mysql-9.2.0.helm-values.yaml

vim mysql-9.2.0.helm-values.yaml
... 修改存储类:global.storageClass
... 修改运行模式:默认 standalone 模式,无需修改;
... 修改帐号密码:auth.rootPassword

helm upgrade --install --namespace infra-database --create-namespace \
     mysql ./mysql-9.2.0.tgz -f mysql-9.2.0.helm-values.yaml

// ---------------------------------------------------------------------------- // 当部署成功后,输出如下信息:

...
Services:

  echo Primary: mysql.infra-database.svc.cluster.local:3306

Execute the following to get the administrator credentials:

  echo Username: root
  MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace infra-database 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-r9 --namespace infra-database --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash

  2. To connect to primary service (read/write):

      mysql -h mysql.infra-database.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"

鉴于我们是环境迁移,所以未使用 storageClass 而是通过 primary.persistence.existingClaim 使用已有存储;

如果通过 storageClass 部署,helm uninstall 并不会删除 PVC,所以下次重新安装时仍旧使用之前的 PVC 数据;

数据目录:/bitnami/mysql/data

MySQL Client

我们在集群中运行该 Pod 实例,用于测试 MySQL 连接:

kubectl run mysql-client --rm --tty -i --restart='Never'   \
    --image  docker.io/bitnami/mysql:8.0.29-debian-11-r9   \
    --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD         \
    --command -- bash

kubectl create deployment mysql-client --image=mysql:latest --replicas=1 -- sleep infinity