【痛苦】按照K8s官方文档部署Mysql高可用+读写分离的坑

最近接到一个需求,用K8s部署Mysql高可用+读写分离,对于小白的我,要被官方文档调戏了

先花点时间跟着文档做一遍,如果顺利得到了结果,就不用往下看了。
文档:https://www.kubernetes.org.cn/3985.html
这篇也一样:https://www.jianshu.com/p/a5e184188ccd

感谢回来!!!对号入座
一、镜像问题,gcr.io不能访问
思路:从github中下载下来;用tag把标签换上,在yaml文件中修改镜像拉取策略
1.vim /usr/local/bin/pull-google.com.sh

image=$1
  echo $1
  img=`echo $image | sed 's/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/_/-/g;s/anjia0532\./anjia0532\//g' | uniq | awk '{print ""$1""}'`
  echo "docker pull $img"
  docker pull $img
  echo  "docker tag $img $image"
  docker tag $img $image

2.chmod +x /usr/local/bin/pull-google.com.sh
3.pull-google.com.sh gcr.io/google-samples/xtrabackup:1.0
4.vim mysql-statefulset.yaml

1.找到这行:image: gcr.io/google-samples/xtrabackup:1.0
2.换行输入:imagePullPolicy:IfNotPresent  

二、PVC问题
1.这篇文章先入门
https://www.cnblogs.com/Smbands/p/11059843.html
再回头看dashboard就发现都绿了

三、 【深入分析】K8s部署Mysql主从复制+读写分离

k8s集群部署mysql高可用的方法可以通过以下步骤进行实现: 1. 首先,确保已经安装好StorageClass,可以参考文章中的指南进行安装。 2. 下载并准备mysql镜像: ``` docker pull mysql:5.7 docker save -o mysql-5.7.tar mysql:5.7 ``` 3. 创建ConfigMap,用于存储mysql的配置信息,包括master和slave的配置。可以使用以下yaml文件创建ConfigMap: ``` apiVersion: v1 kind: ConfigMap metadata: name: mysql-cluster namespace: mysql labels: app: mysql-cluster data: master.cnf: | # Apply this config only on the master. [mysqld] log-bin log_bin_trust_function_creators=1 lower_case_table_names=1 slave.cnf: | # Apply this config only on slaves. [mysqld] super-read-only log_bin_trust_function_creators=1 ``` 使用以下命令创建ConfigMap: ``` kubectl apply -f mysql-configmap.yaml ``` 4. 创建PersistentVolumeClaim(PVC),用于存储mysql的数据。可以使用以下yaml文件创建PVC: ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-data namespace: mysql labels: app: mysql-cluster spec: storageClassName: <your-storage-class> accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 使用以下命令创建PVC: ``` kubectl apply -f mysql-pvc.yaml ``` 5. 创建Service,用于暴露mysql服务。可以使用以下yaml文件创建Service: ``` apiVersion: v1 kind: Service metadata: name: mysql namespace: mysql labels: app: mysql-cluster spec: selector: app: mysql-cluster ports: - name: mysql port: 3306 targetPort: 3306 ``` 使用以下命令创建Service: ``` kubectl apply -f mysql-service.yaml ``` 6. 创建StatefulSet,用于管理mysql的Pod。可以使用以下yaml文件创建StatefulSet: ``` apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql namespace: mysql labels: app: mysql-cluster spec: serviceName: mysql replicas: 3 selector: matchLabels: app: mysql-cluster template: metadata: labels: app: mysql-cluster spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: root-password ports: - containerPort: 3306 volumeMounts: - name: mysql-data mountPath: /var/lib/mysql subPath: mysql-data - name: mysql-config mountPath: /etc/mysql/conf.d readinessProbe: exec: command: - "/bin/sh" - "-c" - "mysqladmin ping -h 127.0.0.1 -u root -p$MYSQL_ROOT_PASSWORD" livenessProbe: exec: command: - "/bin/sh" - "-c" - "mysqladmin ping -h 127.0.0.1 -u root -p$MYSQL_ROOT_PASSWORD" volumeClaimTemplates: - metadata: name: mysql-data labels: app: mysql-cluster spec: storageClassName: <your-storage-class> accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 使用以下命令创建StatefulSet: ``` kubectl apply -f mysql-statefulset.yaml ``` 通过以上步骤,可以在k8s集群中部署mysql高可用
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值