记helm安装bitnami mysql遇到的PV问题

记录一下用helm来安装mysql主从,遇到的PV的问题

  1. 添加bitnami的repo,参考官方文档

https://artifacthub.io/packages/helm/bitnami/mysql

helm repo add my-repo https://charts.bitnami.com/bitnami
  1. 编辑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
  1. 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
  1. 查看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

  1. 最后,查看一下mysql的连接是否正常,将pod的端口映射到主机端口,然后用mysql连接一下,可以看到已经连接成功,并且configmap中sql已经加载。

kubectl port-forward db-mysql-primary-0 --address=10.211.55.18 3306:3306
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值