当前位置: 首页 > news >正文

K8S搭建共享存储(以MySQL例)

持久卷使用(nfs存储数据)

Kubernetes 为了使应用程序及其开发人员能够正常请求存储资源,避免处理存储设施细节,引入了 PV 和 PVC。创建 PV
有两种方式:

  • 集群管理员通过手动方式静态创建应用所需要的 PV;
  • 用户手动创建 PVC 并由 Provisioner 组件动态创建对应的 PV。

搭建nfs服务器(ip:192.168.3.210)

  1. 安装工具
yum -y install nfs-utils
  1. 创建nfs目录
yum -y install nfs-utils
  1. 修改全新
chmod -R 777 /nfs/data
  1. 编辑export文件
nano /etc/exports
  1. 写入如下内容

* 代表所有人都能连接,建议换成具体ip或ip段,如192.168.3.0/24

/nfs/data 192.168.3.0/24(rw,no_root_squash,sync)
  1. 配置生效
exportfs -r
  1. 查看生效
exportfs
  1. 启动rpcbind、nfs服务
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
  1. 查看 RPC 服务的注册状况
rpcinfo -p localhost
  1. 所有node节点安装nfs客户端
yum -y install nfs-utils && systemctl start nfs && systemctl enable nfs

静态创建PV卷

添加pv卷对应目录,这里创建个pv卷,则添加个pv卷的目录作为挂载点。

  1. 创建pv卷对应的目录
mkdir -p /nfs/data/mysql
  1. 配置exportrs,新增如下内容
/nfs/data/mysql 192.168.3.0/24(rw,no_root_squash,sync)
  1. 配置生效
exportfs -r
  1. 重启rpcbind、nfs服务
systemctl restart rpcbind && systemctl restart nfs

创建 NFS PV与PVC

创建命名空间

cat >> common-tools.yaml << EOF
# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:
  name: common-tools
EOF
kubectl apply -f common-tools.yaml

创建nfs-mysql.yaml文件

注意:修改server里的地址为您的nfs服务地址

cat >> nfs-mysql.yaml << EOF
# 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-mysql
  namespace: common-tools
  labels:
    pv: nfs-mysql
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /nfs/data/mysql
    server: 192.168.3.210

---

# 创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-mysql
  namespace: common-tools
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs
  selector:
    matchLabels:
      pv: nfs-mysql
EOF

创建pv与pvc

kubectl apply -f nfs-mysql.yaml
配置说明:
① capacity 指定 PV 的容量为 1G。
② accessModes 指定访问模式为 ReadWriteOnce,支持的访问模式有:

    ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。
    ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。
    ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。

③ persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle,支持的策略有:

    Retain – 需要管理员手工回收。
    Recycle – 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*。
    Delete – 删除 Storage Provider 上的对应存储资源,例如 AWS EBS、GCE PD、Azure
    Disk、OpenStack Cinder Volume 等。

④ storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV。
⑤ 指定 PV 在 NFS 服务器上对应的目录。

安装MySQL

创建配置文件

cat >> mysql.yaml << EOF
# 创建配置
kind: ConfigMap
apiVersion: v1
metadata:
  name: mysql-config
  namespace: common-tools
  labels:
    app: mysql
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

---

# 创建服务
kind: Service
apiVersion: v1
metadata:
  labels:
    app: mysql
  name: mysql-svc
  namespace: common-tools
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30306
      protocol: TCP
      targetPort: 3306
  selector:
    app: mysql

---

# 部署配置
kind: Deployment
apiVersion: apps/v1
metadata:
  name: mysql
  namespace: common-tools
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - args:
            - --datadir
            - /var/lib/mysql/datadir
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: root
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: user
          image: mysql:5.7
          name: mysql-container
          ports:
            - containerPort: 3306
              name: dbapi
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: mysql-storage
            - name: config
              mountPath: /etc/mysql/conf.d/my.cnf
              subPath: my.cnf
      volumes:
        - name: mysql-storage
          persistentVolumeClaim:
            claimName: nfs-mysql
        - name: config
          configMap:
            name: mysql-config
        - name: localtime
          hostPath:
            type: File
            path: /etc/localtime
EOF

执行mysql.yaml

kubectl apply -f mysql.yaml

相关文章:

  • 【C++】类和对象(中篇)(万字)
  • 虹科教您 | 虹科TSN配置软件RELY-TSN-Configurator基本操作指南
  • 【python基础】super是啥,你会用吗?
  • 反向传播和其他微分算法
  • 爆肝撸了个“羊了个羊”通关助手
  • Flutter快学快用17 打包发布:Flutter 应用,你离线上运营只差最后一步
  • 效果超强!基于Prompt Learning、检索思路实现文本分类,开源数据增强、可信增强技术
  • 第五次线上面试总结(2022.9.21 二面)
  • 多容器SSM整合
  • 如何用架构的思维为云原生做减法?
  • 程序员面试必备软技能,值得收藏!
  • IDEA社区版(Community Edition)创建Springboot-Web项目,Java
  • 全能赛道、热门方向、稀缺数据,“嬴彻-清华AIR杯”自动驾驶技术大赛火热开赛中
  • 案例分享 | 高性能材料企业官网3D可视化升级
  • 深度学习——day22 知识回顾class1:什么是神经网络
  • canvas 高仿 Apple Watch 表盘
  • ComponentOne 2017 V2版本正式发布
  • const let
  • docker python 配置
  • Golang-长连接-状态推送
  • golang中接口赋值与方法集
  • Gradle 5.0 正式版发布
  • Java 23种设计模式 之单例模式 7种实现方式
  • laravel5.5 视图共享数据
  • Linux下的乱码问题
  • oldjun 检测网站的经验
  • React组件设计模式(一)
  • Service Worker
  • 工作手记之html2canvas使用概述
  • 前端面试总结(at, md)
  • 试着探索高并发下的系统架构面貌
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序开发中的那些坑
  • 《天龙八部3D》Unity技术方案揭秘
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 选择阿里云数据库HBase版十大理由
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $forceUpdate()函数
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (175)FPGA门控时钟技术
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (52)只出现一次的数字III
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (day6) 319. 灯泡开关
  • (poj1.2.1)1970(筛选法模拟)
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (强烈推荐)移动端音视频从零到上手(上)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)创业家杂志:UCWEB天使第一步
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)