记录一下用helm来安装mysql主从,遇到的PV的问题
添加bitnami的repo,参考官方文档
https://artifacthub.io/packages/helm/bitnami/mysql
helm repo add my-repo https://charts.bitnami.com/bitnami
编辑mysql主从需要的配置文件,参数详情可以参考上述文档,以下是本次用到的配置db_tst.yaml
# mysql初始化yaml
auth:
rootPassword: "123456" # 初始化root密码
database: db_tst # 数据库名称
architecture: replication # 设置replication 模式
initdbScriptsConfigMap: init-sql # 已添加好的sql configmap,也可以后期再执行sql文件
# 主库设置
primary:
persistence:
size: 2Gi
enabled: true
# 从库设置
secondary:
replicaCount: 2
persistence:
size: 2Gi
enabled: true
helm进行安装mysql
helm install db -f db_tst.yaml \
my-repo/mysql \
--namespace mysql_db
这里记录一下安装完成后给的dns
echo Primary: db-mysql-primary.ruoyi.svc.cluster.local:3306
echo Secondary: db-mysql-secondary.ruoyi.svc.cluster.local:3306
查看pod运行状态,问题来了,以下是排查解决
kuebctl get pods ,查看到pod pending状态
NAME READY STATUS RESTARTS AGE
db-mysql-primary-0 0/1 Pending 0 5h33m
db-mysql-secondary-0 0/1 Pending 0 5h33m
kubectl describe pod,查看pod详细信息,发信啊是PVC出现了问题

继续查看PVC,也是pending状态

查看PVC详细信息,发现没有PV

helm inspect 查看所需要的PV,helm inspect values my-repo/mysql
persistence:
## @param secondary.persistence.enabled Enable persistence on MySQL secondary replicas using a `PersistentVolumeClaim`
##
enabled: true
## @param secondary.persistence.existingClaim Name of an existing `PersistentVolumeClaim` for MySQL secondary replicas
## NOTE: When it's set the rest of persistence parameters are ignored
##
existingClaim: ""
## @param secondary.persistence.subPath The name of a volume's sub path to mount for persistence
##
subPath: ""
## @param secondary.persistence.storageClass MySQL secondary persistent volume storage Class
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
storageClass: ""
## @param secondary.persistence.annotations MySQL secondary persistent volume claim annotations
##
annotations: {}
## @param secondary.persistence.accessModes MySQL secondary persistent volume access Modes
##
accessModes:
- ReadWriteOnce
## @param secondary.persistence.size MySQL secondary persistent volume size
##
size: 8Gi
## @param secondary.persistence.selector Selector to match an existing Persistent Volume
## selector:
## matchLabels:
## app: my-app
##
selector: {}
创建PV,因为这里用到了mysql主从,所以配置两个pv:pv-volume-mysql-1和pv-volume-mysql-2。两个yaml文件内容相同,这是name做了区别。因为是虚拟机测试环境,所以这里只用本地存储。kubectl apply -f xxx,创建pv卷。
kind: PersistentVolume
apiVersion: v1
metadata:
name: pv-volume-mysql-1
labels:
type: local
spec:
capacity:
storage: 3Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/bitnami/mysql/data"

继续查看pod状态,这里还有遇到个,mysql写入"/bitnami/mysql/data"权限失败的问题,导致pod创建失败。我这里的解决方法是各节点中创建"/bitnami/mysql/data",并赋予足够的权限。
最后看到pod的状态是逐步变成running



最后,查看一下mysql的连接是否正常,将pod的端口映射到主机端口,然后用mysql连接一下,可以看到已经连接成功,并且configmap中sql已经加载。
kubectl port-forward db-mysql-primary-0 --address=10.211.55.18 3306:3306