安装nfs

server和client端都执行

yum install nfs-utils rpcbind -y
systemctl start nfs
systemctl start rpcbind
systemctl enable nfs
systemctl enable rpcbind

部署nfs-provisioner

nfs-rbac.yaml

  • rbac鉴权
  • 设置nfs server
  • 设置nfs客户端与server端数据同步
    • mkdir -p /home/nfsmount && mount -t nfs 192.168.116.101:/nfs/data /home/nfsmount
---
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-provisioner
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-provisioner-runner
rules:-  apiGroups: [""]resources: ["persistentvolumes"]verbs: ["get", "list", "watch", "create", "delete"]-  apiGroups: [""]resources: ["persistentvolumeclaims"]verbs: ["get", "list", "watch", "update"]-  apiGroups: ["storage.k8s.io"]resources: ["storageclasses"]verbs: ["get", "list", "watch"]-  apiGroups: [""]resources: ["events"]verbs: ["watch", "create", "update", "patch"]-  apiGroups: [""]resources: ["services", "endpoints"]verbs: ["get","create","list", "watch","update"]-  apiGroups: ["extensions"]resources: ["podsecuritypolicies"]resourceNames: ["nfs-provisioner"]verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-provisioner
subjects:- kind: ServiceAccountname: nfs-provisionernamespace: default
roleRef:kind: ClusterRolename: nfs-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
#vi nfs-deployment.yaml;创建nfs-client的授权
kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-client-provisioner
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccount: nfs-provisionercontainers:-  name: nfs-client-provisionerimage: 192.168.145.28:1603/kubesphere/nfs-client-provisioner:v3.1.0-k8s1.11volumeMounts:-  name: nfs-client-rootmountPath:  /persistentvolumesenv:-  name: PROVISIONER_NAME #供应者的名字value: storage.pri/nfs #名字虽然可以随便起,以后引用要一致-  name: NFS_SERVERvalue: 192.168.116.101-  name: NFS_PATHvalue: /nfs/datavolumes:- name: nfs-client-rootnfs:server: 192.168.116.101path: /nfs/data

storageclass-nfs.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: storage-nfs
provisioner: storage.pri/nfs
reclaimPolicy: Delete

编写nfs-provisioner部署脚本

  • 部署nfs-provisioner
  • 设置为默认storageclass
    [root@m-1 kubesphere-install]# cat start.sh
sudo kubectl apply -f nfs-rbac.yaml -f storageclass-nfs.yaml
sudo kubectl patch storageclass storage-nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

部署mysql一主两从集群

mysql-all-in-one.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: mysql-configmapnamespace: dmgeo-liblabels:app: mysql
data:primary.cnf: |# Apply this config only on the primary.[mysqld]log-binreplica.cnf: |# Apply this config only on replicas.[mysqld]super-read-only---
# Headless service for stable DNS entries of StatefulSet members.
apiVersion: v1
kind: Service
metadata:name: mysqlnamespace: dmgeo-liblabels:app: mysql
spec:ports:- name: mysqlport: 3306clusterIP: Noneselector:app: mysql
---
# Client service for connecting to any MySQL instance for reads.
# For writes, you must instead connect to the primary: mysql-0.mysql.
apiVersion: v1
kind: Service
metadata:name: mysql-readnamespace: dmgeo-liblabels:app: mysql
spec:ports:- name: mysqlport: 3306selector:app: mysql---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysqlnamespace: dmgeo-lib
spec:selector:matchLabels:app: mysqlserviceName: mysqlreplicas: 3template:metadata:labels:app: mysqlspec:initContainers:- name: init-mysqlimage: 192.168.145.28:1603/lego/mysql/mysql:5.7command:- bash- "-c"- |set -ex# Generate mysql server-id from pod ordinal index.[[ `hostname` =~ -([0-9]+)$ ]] || exit 1ordinal=${BASH_REMATCH[1]}echo [mysqld] > /mnt/conf.d/server-id.cnf# Add an offset to avoid reserved server-id=0 value.echo server-id=$((100 + $ordinal)) >> /mnt/conf.d/server-id.cnf# Copy appropriate conf.d files from config-map to emptyDir.if [[ $ordinal -eq 0 ]]; thencp /mnt/config-map/primary.cnf /mnt/conf.d/elsecp /mnt/config-map/replica.cnf /mnt/conf.d/fivolumeMounts:- name: mysql-confmountPath: /mnt/conf.d- name: mysql-configmapmountPath: /mnt/config-map- name: clone-mysqlimage: 192.168.145.28:1603/lego/mysql/twoeo/gcr.io-google-samples-xtrabackup:latestcommand:- bash- "-c"- |set -ex# Skip the clone if data already exists.[[ -d /var/lib/mysql/mysql ]] && exit 0# Skip the clone on primary (ordinal index 0).[[ `hostname` =~ -([0-9]+)$ ]] || exit 1ordinal=${BASH_REMATCH[1]}[[ $ordinal -eq 0 ]] && exit 0# Clone data from previous peer.ncat --recv-only mysql-$(($ordinal-1)).mysql 3307 | xbstream -x -C /var/lib/mysql# Prepare the backup.xtrabackup --prepare --target-dir=/var/lib/mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysqlsubPath: mysql- name: mysql-confmountPath: /etc/mysql/conf.dcontainers:- name: mysqlimage: 192.168.145.28:1603/lego/mysql/mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: 123456#- name: MYSQL_ALLOW_EMPTY_PASSWORD#  value: "1"ports:- name: mysqlcontainerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlsubPath: mysql- name: mysql-confmountPath: /etc/mysql/conf.dresources:requests:cpu: 500mmemory: 1GilivenessProbe:exec:command: ["mysqladmin", "ping"]initialDelaySeconds: 30periodSeconds: 10timeoutSeconds: 5readinessProbe:exec:# Check we can execute queries over TCP (skip-networking is off).command: ["mysql", "-h", "127.0.0.1", "-e", "SELECT 1"]initialDelaySeconds: 5periodSeconds: 2timeoutSeconds: 1- name: xtrabackupimage: 192.168.145.28:1603/lego/mysql/twoeo/gcr.io-google-samples-xtrabackup:latestports:- name: xtrabackupcontainerPort: 3307command:- bash- "-c"- |set -excd /var/lib/mysql# Determine binlog position of cloned data, if any.if [[ -f xtrabackup_slave_info && "x$(<xtrabackup_slave_info)" != "x" ]]; then# XtraBackup already generated a partial "CHANGE MASTER TO" query# because we're cloning from an existing replica. (Need to remove the tailing semicolon!)cat xtrabackup_slave_info | sed -E 's/;$//g' > change_master_to.sql.in# Ignore xtrabackup_binlog_info in this case (it's useless).rm -f xtrabackup_slave_info xtrabackup_binlog_infoelif [[ -f xtrabackup_binlog_info ]]; then# We're cloning directly from primary. Parse binlog position.[[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1rm -f xtrabackup_binlog_info xtrabackup_slave_infoecho "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.infi# Check if we need to complete a clone by starting replication.if [[ -f change_master_to.sql.in ]]; thenecho "Waiting for mysqld to be ready (accepting connections)"until mysql -h 127.0.0.1 -e "SELECT 1"; do sleep 1; doneecho "Initializing replication from clone position"mysql -h 127.0.0.1 \-e "$(<change_master_to.sql.in), \MASTER_HOST='mysql-0.mysql', \MASTER_USER='root', \MASTER_PASSWORD='', \MASTER_CONNECT_RETRY=10; \START SLAVE;" || exit 1# In case of container restart, attempt this at-most-once.mv change_master_to.sql.in change_master_to.sql.origfi# Start a server to send backups when requested by peers.exec ncat --listen --keep-open --send-only --max-conns=1 3307 -c \"xtrabackup --backup --slave-info --stream=xbstream --host=127.0.0.1 --user=root"volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlsubPath: mysql- name: mysql-confmountPath: /etc/mysql/conf.dresources:requests:cpu: 100mmemory: 100Mivolumes:- name: mysql-confemptyDir: {}- name: mysql-configmapconfigMap:name: mysql-configmapvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi

参考链接:
K8S 实战(六)| 配置 NFS 动态卷提供持久化存储
K8S 实战(七)| 有状态应用之 MySQL 集群

k8s部署mysql集群(statefulset):主写从读、一主多从集群相关推荐

  1. k8s部署有状态(StatefulSet)zk-kafka集群

    k8s部署有状态(StatefulSet)zk-kafka集群 一共是五台服务器: 功能 IP node-1 192.168.10.201 node-2 192.168.10.202 node-3 1 ...

  2. 【云原生】Kubernetes(k8s)部署 MySQL+Dubbo+Nacos服务

    一.说明 二.部署 MySQL 三.部署 Nacos 四.部署 Dubbo 服务 4.1. 创建镜像仓库的密钥 4.2. 部署 provider 服务 4.3. 部署 consumer 服务 五.测试 ...

  3. 高可用集群篇(五)-- K8S部署微服务

    高可用集群篇(五)-- K8S部署微服务 一.K8S有状态服务 1.1 什么是有状态服务 1.2 k8s部署MySQL 1.2.1 创建MySQL主从服务 1.2.2 测试主从配置 1.2.3 k8s ...

  4. 基于 k8s 搭建 mysql 5.7 主从复制集群

    关于 k8s 集群环境的搭建可以参考我的另一篇博客 k8s 集群之使用 kubeadm 在 Centos8 上部署 kubernetes 1.20 关于 nfs 网络存储如何搭建和使用可以参考我的另一 ...

  5. flink on k8s部署方案实践--详细步骤

    背景 Flink-operator极大的方便了我们管理 Flink 集群及其作业,我们只需要自定义yaml文件就可以做到. Flink 官方还未给出 flink-operator 方案,不过 Goog ...

  6. k8s使用statefulset部署mysql一主多从集群_k8s部署mysql集群南

    部署原理 1.准备环境 服务器2核4G 139.198.38.94 139.198.41.101 139.198.31.125 需要提前准备好NFS挂载,此处用的是静态nfs #所有机器安装 yum ...

  7. k8s使用statefulset部署mysql一主多从集群

    部署原理 1.准备环境 服务器2核4G 139.198.38.94 139.198.41.101 139.198.31.125 需要提前准备好NFS挂载,此处用的是静态nfs #所有机器安装 yum ...

  8. k8s(七)—statefullset部署mysql主从集群

    1 使用statefullset部署mysql主从集群 mysql-0是master mysql-1和mysql-2是两个备份 当mysql写的时候,找headless service中的mysql- ...

  9. k8s部署nacos集群:3个pod、连接外部mysql读写分离集群

    部署mysql nacos连接外部mysql sts 使用mysql-0.mysql.dmgeo-lib.svc.cluster.local进行连接,同一ns下可以省略后面的. 需要先初始化数据:创建 ...

最新文章

  1. 数据模拟工具wgsim
  2. 地图与定位之大头针视图
  3. Apache Flink 1.10.0 发布 | 云原生生态周报 Vol. 38
  4. 关于web技术的一些见解
  5. Google邮局可以实时开通了
  6. php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...
  7. 编写下载服务器。 第五部分:油门下载速度
  8. 基于Cmail的邮件收发限制说明
  9. 深入探討 SCOM 2007 管理技術
  10. mapabc高德地图区域收缩事件监听
  11. 固态硬盘用软件测试掉速严重,固态硬盘掉速别慌张,教你如何快速进行调节!...
  12. linux服务器防御ddos,linux如何防御ddos
  13. 当x大于时,y等于1;当x等于0时,y等于0;当x小于0时,y等于-1。
  14. tableau数据分析
  15. 设备树学习(二十三、番外篇-中断子系统之softirq)
  16. CSP 202206-1 归一化处理
  17. 【python】argv的用法
  18. 12306订票助手,春运抢票之必备良品,圆你回家梦
  19. 【原创】Android-找不到 drawable 文件夹下下的 xml 文件
  20. 离线文档管理服务器,离线数据管理

热门文章

  1. mxnet基础到提高(49)-使用免费的云jupyter
  2. c++计算机等级考试笔记(1)
  3. 【机器学习】scikit-learn 1.0 版本重要新特性一览
  4. 【NLP】到目前为止,机器学习与自然语言处理相遇的那些事
  5. 从 Java 小白到收获 BAT offer ,分享我这 2 年的经验
  6. 搜索推荐炼丹笔记:Transformer在搜索推荐中的应用
  7. 游戏社交崛起!四缺一,开黑吗?
  8. ansible高级应用示例
  9. 《编写高质量代码:改善c程序代码的125个建议》——建议20-6:尽量将循环嵌套控制在3 层以内...
  10. nginx缓存和flask_cache