IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> k8s部署mysql -> 正文阅读

[大数据]k8s部署mysql

目录

单节点

nfs挂载方式

pvc挂载方式

编写PersistentVolume和PersistentVolumeClaim

编写mysql-pvc.yaml文件


单节点

nfs挂载方式

? ? ? ? 镜像使用mysql:5.7, imagePullPolicy设置为IfNotPresent, 表示有镜像的话不会从remote registry重新拉取。

????????部署mysql时,我们需要使用数据挂载,否则会出现数据丢失的情况,这里采用nfs挂载的方式, 我们需要给挂载的目标文件路径/data/dev/mysql授权777, 同时设置为nfs对该路径mount时为insecure,编写mysql-dev-nfs.yaml文件:?

---
apiVersion: v1
kind: Service
metadata:
  name: mysql-dev
spec:
  ports:
    - port: 3306
      nodePort: 30060
  selector:
    app: mysql-dev
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-dev
  labels:
    app: mysql-dev
spec:
  replicas: 1 # pod数量
  selector:
    matchLabels:
      app: mysql-dev
  template:
    metadata:
      labels:
        app: mysql-dev
    spec:
      containers:
        - name: mysql-dev
          image: mysql:5.7
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: "512Mi"
              cpu: "1500m"
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
            - name: mysql-dev-conf
              mountPath: /etc/mysql
      volumes:
        - name: mysql-data
          nfs:
            server: localhost
            path: /data/dev/mysql
        - name: mysql-dev-conf
          configMap:
            name: my.cnf
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: my.cnf
data:
  my.cnf: |
    [mysqld]
    port = 3306
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    skip-character-set-client-handshake=1
    default-storage-engine=INNODB
    max_allowed_packet = 500M
    explicit_defaults_for_timestamp=1
    long_query_time = 10

暴露端口为30060,执行mysql-dev-nfs.yaml,命令:

kubectl apply -f mysql-dev-nfs.yaml

对外的端口使用30060, 测试是否能连接成:

?

?注意: 如果使用nfs挂载方式,那么需要将挂载nfs的pod停止后,centos才能关机, 否则在关机时会出现如下报错: A stop job is running for ...

? ? ? ? 此问题是因为nfs的资源在被占用,与关机需要的请求资源相竞争,形式一种死锁的形态,暂时没有好的解决方式,只能先通过停止Pod的方式先解决。?

[nfs无法挂载问题] mount.nfs: access denied by server while mounting localhost:/data/dev/mysql_ Dream_it_possible!的博客-CSDN博客

pvc挂载方式

? ? ? ? 采用pvc挂载方式,那么需要先声明pv卷,然后绑定pvc卷,Pvc启动成功后,mysql才能使用。

? ? ? ? 建议将pvc与mysql的pod分开编写,便于管理,如果把pv和pvc的脚本和mysql放一起,在停mysql pod时,会出现卡顿的情况。

编写PersistentVolume和PersistentVolumeClaim

? ? ? ? 编写persistVolume.yaml文件,声明pv和pvc

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-01-pvc
spec:
  accessModes:
    - ReadWriteOnce   # 只能被一个容器访问,如果能被多个容器访问那么设置为ReadWriteMany
  resources:
    requests:
      storage: 3Gi
  storageClassName: standard
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: 3g-pv-1
spec:
  capacity:
    storage: 3Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: standard
  cinder:
    volumeID: a198bce4-ba0f-4d13-8f0c-55e31212a8c9 # 改路径为映射到本机的  /var/lib/kubelet/plugins/kubernetes.io/cinder/mounts
    fsType: ext4

注意:

1 .?pv 的storageClassName和pvc的storageClassName要保持一致,否则绑定不上。

2 .?按需要分配 storage。

3 .??使用cinder挂载时,会将指定的volumID挂载到 /var/lib/kubelet/plugins/kubernetes.io/cinder/mounts 目录下,如果没有该目录,那么需要手动创建?/var/lib/kubelet/plugins/kubernetes.io/cinder/mounts 目录。volumeID的值为/var/lib/kubelet/plugins/kubernetes.io/cinder/mounts 下的目录名。

4.?accessModes 设置为 ReadWriteOnce,表示该pv或pvc只能被一个容器所使用。

编写mysql-pvc.yaml文件

---
apiVersion: v1
kind: Service
metadata:
  name: mysql-01
spec:
  ports:
    - port: 3306
      nodePort: 30060
  selector:
    app: mysql-01
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-01
  labels:
    app: mysql-01
spec:
  replicas: 1 # pod数量
  selector:
    matchLabels:
      app: mysql-01
  template:
    metadata:
      labels:
        app: mysql-01
    spec:
      containers:
        - name: mysql-01
          image: mysql:5.7
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: "512Mi"
              cpu: "1500m"
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
          volumeMounts:
            - name: mysql-01-persistent-storage
              mountPath: /var/lib/mysql
            - name: mysql-01-conf
              mountPath: /etc/mysql
      volumes:
        - name: mysql-01-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-01-pvc
        - name: mysql-01-conf
          configMap:
            name: my.cnf
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: my.cnf
data:
  my.cnf: |
    [mysqld]
    skip-grant-tables
    port = 3306
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    skip-character-set-client-handshake=1
    default-storage-engine=INNODB
    max_allowed_packet = 500M
    explicit_defaults_for_timestamp=1
    long_query_time = 10

可在[mysqlId] 里加入??skip-grant-tables跳过权限验证。

执行kubectl apply -f mysql-pvc.yaml 命令。

可使用 kubectl get pv kubectl get pvc 查看pv和pvc。

?查看service和pod的状态。

[root@localhost ~]# kubectl get svc
[root@localhost ~]# kubectl logs mysql-01-58694b58f7-rs9sz

停止mysql pod

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:27:35  更:2022-03-16 22:27:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:56:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码