挂载MySQL数据卷

在k8s集群中挂载MySQL数据卷 需要安装一个NFS。
在主节点安装NFS
  yum install -y nfs-utils rpcbind
在主节点创建目录
  mkdir -p /nfs
  chmod 777 /nfs
更改归属组与用户
  chown -R nfsnobody:nfsnobody /nfs
配置共享目录
  echo "/nfs *(insecure,rw,sync,no_root_squash)" > /etc/exports
创建mysql共享目录
  mkdir -p /nfs/mysql
启动服务
  systemctl start rpcbind
  systemctl start nfs
设置开启启动
  systemctl enable rpcbind
  systemctl enable nfs
检查配置是否生效
  exportfs
  showmount -e 192.168.91.129

创建MySQL Deployment

编写一个 mysql.yaml 配置文件:
apiVersion: apps/v1                             # apiserver的版本
kind: Deployment # 副本控制器deployment,管理pod和RS
metadata:
name: mysql # deployment的名称,全局唯一
namespace: default # deployment所在的命名空间
labels:
app: mysql
spec:
replicas: 1 # Pod副本期待数量
selector:
matchLabels: # 定义RS的标签
app: mysql # 符合目标的Pod拥有此标签
strategy: # 定义升级的策略
type: RollingUpdate # 滚动升级,逐步替换的策略
template: # 根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql # Pod副本的标签,对应RS的Selector
spec:
nodeName: k8s-worker01 # 指定pod运行在的node
containers: # Pod里容器的定义部分
- name: mysql # 容器的名称
image: mysql:5.7 # 容器对应的docker镜像
volumeMounts: # 容器内挂载点的定义部分
- name: time-zone # 容器内挂载点名称
mountPath: /etc/localtime # 容器内挂载点路径,可以是文件或目录
- name: mysql-data
mountPath: /var/lib/mysql # 容器内mysql的数据目录
- name: mysql-logs
mountPath: /var/log/mysql # 容器内mysql的日志目录
ports:
- containerPort: 3306 # 容器暴露的端口号
env: # 写入到容器内的环境容量
- name: MYSQL_ROOT_PASSWORD # 定义了一个mysql的root密码的变量
value: "root"
volumes: # 本地需要挂载到容器里的数据卷定义部分
- name: time-zone # 数据卷名称,需要与容器内挂载点名称一致
hostPath:
path: /etc/localtime # 挂载到容器里的路径,将localtime文件挂载到容器里,可让容器使用本地的时区
- name: mysql-data
hostPath:
path: /data/mysql/data # 本地存放mysql数据的目录
- name: mysql-logs
hostPath:
path: /data/mysql/logs # 本地存入mysql日志的目录
将 mysql.yaml 配置文件上传至虚拟机的 /root 目录下,在 /root 目录下执行命令:
  kubectl create -f mysql.yaml
执行添加服务的命令(这行不执行应该也不影响结果):
  kubectl apply -f mysql.yaml
编写一个提供对外访问的service mysql-svc.yaml:
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30001
selector:
app: mysql
将 mysql-svc.yaml 配置文件上传至虚拟机的 /root 目录下,在 /root 目录下执行命令:
  kubectl create -f mysql-svc.yaml
访问数据库并验证其运行正常
  kubectl get pod
kubectl exec -it mysql-999dcb98f-srxff -- mysql -u root -p
(密码也是root)

mysql开放远程连接:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;        #刷新权限表,使配置生效

开启防火墙端口

systemctl start firewalld.service
firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=30001/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
systemctl stop firewalld.service
systemctl disable firewalld.service
要开放6443端口(k8s集群连接地址)和30001端口(k8s集群mysql端口)

查看已安装的mysql

kubectl get pod
 
kubectl get svc
 
mysql服务安装在default命名空间中,查看其所在节点:
kubectl get pod -n default -o wide
此次部署的mysql服务被我们指定运行在了 k8s-worker01 节点上。
 
在本地用SQLyog连接到k8s集群的mysql:
创建一个名为 test 的数据库:
将本地数据导入搭建好的mysql服务器-test数据库:
可以看到,数据已成功导入。
 
在k8s集群中查看mysql数据库:
可看到中文数据出现乱码问题。
 
查看数据库的字符编码类型:
show variables like '%char%';
将查询结果集设置为utf8后再查看数据:
set character_set_results=utf8;
已经可以正常显示中文了。

总结

到这里,我们就成功地在k8s集群上部署了一个mysql、公布该mysql使其可以在外部进行访问、向mysql数据库中导入数据并设置其查询结果集支持中文显示,整个搭建过程还是有点繁琐的,如果不熟悉k8s集群一些概念,可能会遇到挺多小问题。

这里分享我自己的搭建过程,希望其他人在学习过程中能从我的笔记中得到一些帮助!

k8s集群部署mysql完整过程记录的更多相关文章

  1. 在k8s集群部署SonarQube

    目录 1.2.存储环境 1.3.sonarqube版本 2.部署sonarqube 2.1.部署PostgreSQL 2.2.部署SonarQube 2.3.访问检查 SonarQube 是一款用于代 ...

  2. 基于k8s集群部署prometheus监控ingress nginx

    目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...

  3. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

  4. 菜鸟系列k8s——k8s集群部署(2)

    k8s集群部署 1. 角色分配 角色 IP 安装组件 k8s-master 10.0.0.170 kube-apiserver,kube-controller-manager,kube-schedul ...

  5. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  6. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之集群部署环境规划(一)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.环境规划 软件 版本 ...

  7. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...

  9. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 ...

  10. (视频)asp.net core系列之k8s集群部署视频

    0.前言 应许多网友的要求,特此录制一下k8s集群部署的视频.在录制完成后发现视频的声音存在一点瑕疵,不过不影响大家的观感. 一.视频说明 1.视频地址: 如果有不懂,或者有疑问的欢迎留言.视频分为两 ...

随机推荐

  1. 一文彻底弄懂MySQL的MVCC多版本控制器

    InnoDB 的 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是 MySQL 实现高并发事务处理的一种机制.通过 MVCC,InnoDB 可以在高并 ...

  2. A星、Floyod、Bellman-Ford

    A 星算法 A 星和 Dijkstra 算法唯一区别在于堆中排序的依据.distance 数组仍然保存实际代价,预估代价只影响堆的弹出顺序. Dijkstra 根据源点到当前点的实际代价进行排序. A ...

  3. Web渗透02_信息搜集

    以两个测试工具官方给出的用于工具实践的网站.一定不要拿在运营的网站做测试. http://testfire.net http://vulnweb.com DNS信息搜集 关注域名注册商,管理员的邮箱电 ...

  4. hadoop运行原理

    包括HDFS和Mapreduce两部分. 1)HDFS自动保存多个副本,移动计算.缺点是小文件存取占用namenode内存,写入只支持追加,不能随机修改. 它存储的逻辑空间称为block,文件的权限类 ...

  5. 5.9 Linux Vim批量注释和自定义注释

    使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符#再退回命令模式,非常麻烦. 连续行的注释其实可以用替换命令来完成.换句话说,在指定范 ...

  6. 3.15 Linux复制文件和目录(cp命令)

    cp 命令,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能. cp 命令的基本格式如下: [root@localhost ~]# cp [选项] ...

  7. cmu15545-数据访问方式:B+树(B+Tree)

    目录 基本概念 基于磁盘的B+树 查询与索引 设计选择 结点大小(Node Size) 合并阈值(Merge Thredshold) 变长键(Variable-length Keys) 结点内部搜索( ...

  8. C++学习笔记-Cherno C++系列

    21-23.[Cherno C++]C++中的静态(static) static变量只在编译单元内部链接 静态变量的作用域只在单个文件内 建议:在非特殊情况下,永远使用static定义全局变量以限制作 ...

  9. 三菱电梯综合监控系统适配 lonele.exe 由 20180418 降级至 20150930 而调整相应的 msde2000 数据库

    win10 x86 系统下程序文件的部分目录可能是 电梯综合监控系统 C:\PROGRAM FILES\上海三菱电梯有限公司 ├─电梯综合监控系统 │ │ AxInterop.BRTMFSHX.dll ...

  10. 推荐7个最强Appium替代工具,移动App自动化测试必备!

    在移动应用开发日益火爆的今天,自动化测试成为了确保应用质量和用户体验的关键环节.Appium 作为一款广泛应用的移动应用自动化测试工具,为测试人员所熟知.然而,在不同的测试场景和需求下,还有许多其他优 ...